You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

372 lines
17 KiB

  1. @{
  2. ViewBag.Title = "新生信息管理";
  3. Layout = "~/Views/Shared/_Form.cshtml";
  4. }
  5. <link href="~/Content/camera/cropper.min.css" rel="stylesheet" />
  6. <link href="~/Content/camera/ImgCropping.css" rel="stylesheet" />
  7. <style>
  8. .title, #photoBox {
  9. margin-left: 40px;
  10. }
  11. #photoBox img {
  12. width: 100px;
  13. height: 100px;
  14. margin: 10px 10px 10px 0;
  15. }
  16. #form .disabled {
  17. background-color: #eee;
  18. }
  19. #form .box {
  20. padding-left: 0;
  21. }
  22. </style>
  23. <div class="lr-form-wrap" id="form">
  24. <div class="col-xs-9 lr-form-item box">
  25. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  26. <div class="lr-form-item-title">考生号 <font face="宋体">*</font></div>
  27. <input id="ksh" type="text" class="form-control disabled" isvalid="yes" checkexpession="NotNull" readonly="readonly" />
  28. </div>
  29. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  30. <div class="lr-form-item-title">准考证号 <font face="宋体">*</font></div>
  31. <input id="zkzh" type="text" class="form-control disabled" isvalid="yes" checkexpession="NotNull" readonly="readonly" />
  32. </div>
  33. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  34. <div class="lr-form-item-title">姓名 <font face="宋体">*</font></div>
  35. <input id="StuName" type="text" class="form-control disabled" isvalid="yes" checkexpession="NotNull" readonly="readonly" />
  36. </div>
  37. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  38. <div class="lr-form-item-title">性别 <font face="宋体">*</font></div>
  39. <div id="GenderNo" class="disabled" isvalid="yes" checkexpession="NotNull" readonly="readonly"></div>
  40. </div>
  41. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  42. <div class="lr-form-item-title">系所号 </div>
  43. <input id="DeptNo" type="text" class="form-control disabled" readonly="readonly" />
  44. </div>
  45. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  46. <div class="lr-form-item-title">专业号 </div>
  47. <input id="MajorNo" type="text" class="form-control disabled" readonly="readonly" />
  48. </div>
  49. </div>
  50. <div class="col-xs-3 lr-form-item ">
  51. <div class="col-xs-12" id="photoBox">
  52. @*<div id="photoBtn" class="btn btn-default ">拍照</div>*@
  53. <div><img src="@ViewBag.Url" /></div>
  54. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh" style="display:none;">
  55. <div class="lr-form-item-title">头像地址 </div>
  56. <input id="Photo" type="text" class="form-control" value="" />
  57. </div>
  58. </div>
  59. </div>
  60. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  61. <div class="lr-form-item-title">出生日期 </div>
  62. <input id="Birthday" type="text" class="form-control disabled" readonly="readonly" />
  63. </div>
  64. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  65. <div class="lr-form-item-title">政治面貌 <font face="宋体">*</font></div>
  66. <div id="PartyFaceNo" class="disabled" isvalid="yes" checkexpession="NotNull" readonly="readonly"></div>
  67. </div>
  68. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  69. <div class="lr-form-item-title">考生类别 </div>
  70. <div id="FamilyOriginNo" class="disabled" readonly="readonly"></div>
  71. </div>
  72. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  73. <div class="lr-form-item-title">民族<font face="宋体">*</font> </div>
  74. <div id="NationalityNo" class="disabled" isvalid="yes" checkexpession="NotNull" readonly="readonly"></div>
  75. </div>
  76. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  77. <div class="lr-form-item-title">户口类别 </div>
  78. <div id="ResidenceNo" class="disabled" readonly="readonly"></div>
  79. </div>
  80. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  81. <div class="lr-form-item-title">考生类型 </div>
  82. <div id="TestStuSortNo" class="disabled" readonly="readonly"></div>
  83. </div>
  84. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  85. <div class="lr-form-item-title">第几志愿 <font face="宋体">*</font> </div>
  86. <input id="WillNo" type="text" class="form-control disabled" isvalid="yes" checkexpession="NotNull" readonly="readonly" />
  87. </div>
  88. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  89. <div class="lr-form-item-title">科类 </div>
  90. <div id="TestStuSubjectNo" class="disabled" readonly="readonly"></div>
  91. </div>
  92. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  93. <div class="lr-form-item-title">毕业类别代码 </div>
  94. <div id="HighTestSortNo" class="disabled" readonly="readonly"></div>
  95. </div>
  96. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  97. <div class="lr-form-item-title">高考总分 <font face="宋体">*</font> </div>
  98. <input id="HighAmountScore" type="text" class="form-control disabled" isvalid="yes" checkexpession="PositiveFloatintZero" readonly="readonly" />
  99. </div>
  100. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  101. <div class="lr-form-item-title">语文成绩 </div>
  102. <input id="ChineseScore" type="text" class="form-control disabled" readonly="readonly" />
  103. </div>
  104. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  105. <div class="lr-form-item-title">数学成绩 </div>
  106. <input id="MathScore" type="text" class="form-control disabled" readonly="readonly" />
  107. </div>
  108. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  109. <div class="lr-form-item-title">英语成绩 </div>
  110. <input id="ForeignLangScore" type="text" class="form-control disabled" readonly="readonly" />
  111. </div>
  112. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  113. <div class="lr-form-item-title">综合成绩 </div>
  114. <input id="ComprehensiveScore" type="text" class="form-control disabled" readonly="readonly" />
  115. </div>
  116. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  117. <div class="lr-form-item-title">外语语种 </div>
  118. <input id="ForeignLangSpecies" type="text" class="form-control disabled" readonly="readonly" />
  119. </div>
  120. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  121. <div class="lr-form-item-title">录取方式 </div>
  122. <div id="MatriculateSort" class="disabled" readonly="readonly"></div>
  123. </div>
  124. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  125. <div class="lr-form-item-title">地区代码 </div>
  126. <input id="ProvinceNo" type="text" class="form-control disabled" readonly="readonly" />
  127. </div>
  128. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  129. <div class="lr-form-item-title">籍贯 </div>
  130. <input id="RegionNo" type="text" class="form-control disabled" readonly="readonly" />
  131. </div>
  132. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  133. <div class="lr-form-item-title">身份证号 <font face="宋体">*</font></div>
  134. <input id="IdentityCardNo" type="text" class="form-control disabled" isvalid="yes" checkexpession="NotNull" readonly="readonly" />
  135. </div>
  136. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  137. <div class="lr-form-item-title">联系电话 <font face="宋体">*</font></div>
  138. <input id="telephone" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
  139. </div>
  140. <div class="col-xs-6 lr-form-item" data-table="StuInfoFresh">
  141. <div class="lr-form-item-title">家庭地址 <font face="宋体">*</font></div>
  142. <input id="FamilyAddress" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
  143. </div>
  144. <div class="col-xs-12 title">家庭成员(直系亲属)</div>
  145. <div class="col-xs-12 lr-form-item lr-form-item-grid">
  146. <div id="StuInfoFreshFamily"></div>
  147. </div>
  148. <div class="col-xs-12 title">紧急联系人</div>
  149. <div class="col-xs-12 lr-form-item lr-form-item-grid">
  150. <div id="StuInfoFreshEmergePeople"></div>
  151. </div>
  152. <!--图片裁剪框 start-->
  153. <div style="display: none" class="tailoring-container">
  154. <div class="black-cloth" onclick="closeTailor(this)"></div>
  155. <div class="tailoring-content">
  156. <div class="tailoring-content-one">
  157. <label title="上传图片" for="chooseImg" class="l2-btn choose-btn">
  158. <input type="file" accept="image/jpg,image/jpeg,image/png" name="file" id="chooseImg" class="hidden" onchange="selectImg(this)">
  159. 本地上传
  160. </label>
  161. <label title="拍照" class="l2-btn choose-btn" id='capture' style="margin-left: 2%;">拍照</label>
  162. <label title="重拍" class="l2-btn choose-btn" id='takeAgain' style="margin-left: 2%;">重拍</label>
  163. <div class="close-tailoring" onclick="closeTailor(this)">×</div>
  164. </div>
  165. <div class="tailoring-content-two">
  166. <div class="tailoring-box-parcel">
  167. <video id="video" width="100%" height="100%" style="float: left;"></video>
  168. <canvas id="canvas" width="482px" height="448px" style="float: left;" hidden="hidden"></canvas>
  169. <div id="showImg" hidden="hidden" style="width: 100%;height:100%;">
  170. <img id="tailoringImg">
  171. </div>
  172. </div>
  173. <div class="preview-box-parcel">
  174. <p>图片预览:</p>
  175. <div class="square previewImg"></div>
  176. <div class="circular previewImg"></div>
  177. </div>
  178. </div>
  179. <div class="tailoring-content-three">
  180. <button class="l2-btn cropper-reset-btn">复位</button>
  181. <button class="l2-btn cropper-rotate-btn">旋转</button>
  182. <button class="l2-btn cropper-scaleX-btn">换向</button>
  183. <button class="l2-btn sureCut" id="sureCut">确定</button>
  184. </div>
  185. </div>
  186. </div>
  187. <!--图片裁剪框 end-->
  188. </div>
  189. @Html.AppendJsFile("/Areas/EducationalAdministration/Views/StuInfoFresh/FormOfStudent.js")
  190. <script src="~/Content/camera/cropper.min.js"></script>
  191. <script>
  192. //弹出框水平垂直居中
  193. (window.onresize = function () {
  194. var win_height = $(window).height();
  195. var win_width = $(window).width();
  196. if (win_width <= 768) {
  197. $(".tailoring-content").css({
  198. "top": (win_height - $(".tailoring-content").outerHeight()) / 2,
  199. "left": 0
  200. });
  201. } else {
  202. $(".tailoring-content").css({
  203. "top": (win_height - $(".tailoring-content").outerHeight()) / 2,
  204. "left": (win_width - $(".tailoring-content").outerWidth()) / 2
  205. });
  206. }
  207. })();
  208. //图像上传
  209. function selectImg(file) {
  210. if (!file.files || !file.files[0]) {
  211. return;
  212. }
  213. var reader = new FileReader();
  214. reader.onload = function (evt) {
  215. var replaceSrc = evt.target.result;
  216. //更换cropper的图片
  217. $('#tailoringImg').cropper('replace', replaceSrc, false);//默认false,适应高度,不失真
  218. }
  219. reader.readAsDataURL(file.files[0]);
  220. mediaStreamTrack && mediaStreamTrack.stop();
  221. $("#video").hide();
  222. $("#showImg").show();
  223. }
  224. //cropper图片裁剪
  225. $('#tailoringImg').cropper({
  226. aspectRatio: 1 / 1,//默认比例
  227. preview: '.previewImg',//预览视图
  228. guides: false, //裁剪框的虚线(九宫格)
  229. autoCropArea: 0.5, //0-1之间的数值,定义自动剪裁区域的大小,默认0.8
  230. movable: false, //是否允许移动图片
  231. dragCrop: true, //是否允许移除当前的剪裁框,并通过拖动来新建一个剪裁框区域
  232. movable: true, //是否允许移动剪裁框
  233. resizable: true, //是否允许改变裁剪框的大小
  234. zoomable: false, //是否允许缩放图片大小
  235. mouseWheelZoom: false, //是否允许通过鼠标滚轮来缩放图片
  236. touchDragZoom: true, //是否允许通过触摸移动来缩放图片
  237. rotatable: true, //是否允许旋转图片
  238. crop: function (e) {
  239. // 输出结果数据裁剪图像。
  240. }
  241. });
  242. //旋转
  243. $(".cropper-rotate-btn").on("click", function () {
  244. $('#tailoringImg').cropper("rotate", 45);
  245. });
  246. //复位
  247. $(".cropper-reset-btn").on("click", function () {
  248. $('#tailoringImg').cropper("reset");
  249. });
  250. //换向
  251. var flagX = true;
  252. $(".cropper-scaleX-btn").on("click", function () {
  253. if (flagX) {
  254. $('#tailoringImg').cropper("scaleX", -1);
  255. flagX = false;
  256. } else {
  257. $('#tailoringImg').cropper("scaleX", 1);
  258. flagX = true;
  259. }
  260. flagX != flagX;
  261. });
  262. //裁剪后的处理
  263. $("#sureCut").on("click", function () {
  264. var cas = $('#tailoringImg').cropper('getCroppedCanvas');//获取被裁剪后的canvas
  265. var base64url = cas.toDataURL('image/png'); //转换为base64地址形式
  266. base64url = base64url.replace("\r", "");
  267. top.learun.postFormSilence(top.$.rootUrl + '/EducationalAdministration/StuInfoFresh/DoPhoto', { base64url: base64url },
  268. function (res) {
  269. //关闭裁剪框
  270. closeTailor();
  271. if (res.code == 200) {
  272. if (res.data.Url != null && res.data.Url != "") {
  273. $('#photoBox').find('img').attr('src', '/' + res.data.Url.slice(res.data.Url.indexOf('Resource')));
  274. }
  275. $('#Photo').val(res.data.AnnexesFileId);
  276. }
  277. });
  278. });
  279. //关闭裁剪框
  280. function closeTailor() {
  281. $(".tailoring-container").toggle();
  282. mediaStreamTrack && mediaStreamTrack.stop();
  283. }
  284. let video = document.getElementById('video');
  285. let canvas = document.getElementById('canvas');
  286. let context = canvas.getContext('2d');
  287. var mediaStreamTrack;
  288. document.getElementById('capture').addEventListener('click',
  289. function () {
  290. context.drawImage(video, 0, 0, 518, 420);
  291. mediaStreamTrack && mediaStreamTrack.stop();
  292. $('#tailoringImg').cropper('replace', canvas.toDataURL("image/png"), false); //默认false,适应高度,不失真
  293. $("#video").hide(); //隐藏拍照框
  294. $("#showImg").show(); //将拍照结果显示
  295. });
  296. //请求拍照
  297. $("#takeAgain").bind("click", function () {
  298. takePhoto();
  299. });
  300. //开始拍照
  301. function takeImg() {
  302. $(".tailoring-container").toggle();
  303. takePhoto();
  304. }
  305. //请求摄像头
  306. function takePhoto() {
  307. // 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象
  308. if (navigator.mediaDevices === undefined) {
  309. navigator.mediaDevices = {};
  310. }
  311. if (navigator.mediaDevices.getUserMedia === undefined) {
  312. navigator.mediaDevices.getUserMedia = function (constraints) {
  313. // 首先,如果有getUserMedia的话,就获得它
  314. var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
  315. // 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
  316. if (!getUserMedia) {
  317. return Promise.reject(new Error('不支持此浏览器,请更换Chrome或360浏览器'));
  318. }
  319. // 否则,为老的navigator.getUserMedia方法包裹一个Promise
  320. return new Promise(function (resolve, reject) {
  321. getUserMedia.call(navigator, constraints, resolve, reject);
  322. });
  323. }
  324. }
  325. const constraints = {
  326. video: true,
  327. audio: false
  328. };
  329. let videoPlaying = false;
  330. let promise = navigator.mediaDevices.getUserMedia(constraints);
  331. promise.then(stream => {
  332. // 旧的浏览器可能没有srcObject
  333. if ("srcObject" in video) {
  334. video.srcObject = stream;
  335. mediaStreamTrack = stream.getTracks()[0];
  336. } else {
  337. // 防止再新的浏览器里使用它,应为它已经不再支持了
  338. video.src = window.URL.createObjectURL(stream);
  339. }
  340. video.onloadedmetadata = function (e) {
  341. video.play();
  342. videoPlaying = true;
  343. };
  344. }).catch(err => {
  345. console.error(err.name + ": " + err.message);
  346. });
  347. $("#showImg").hide();//隐藏拍照结果显示框
  348. //$('#showImg').html('<img id="tailoringImg" hidden="hidden">')
  349. $("#video").show();//开启拍照框
  350. }
  351. </script>