Step4.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <template>
  2. <div>
  3. <common @asynCallBack="asynCallBack" :projectCheck="false"></common>
  4. <top-header :pageTitle="pageTitle"></top-header>
  5. <div class="mui-content">
  6. <div class="mui-content-padded vongi-qingjiadt">
  7. <form class="mui-input-group">
  8. <div class="mui-input-row">
  9. <label>所在小区</label>
  10. <span v-text="subForm.companyName"></span>
  11. </div>
  12. <div class="mui-input-row">
  13. <label>您的身份</label>
  14. <span v-text="subForm.roleName"></span>
  15. </div>
  16. <div class="mui-input-row">
  17. <label>楼栋房号</label>
  18. <span v-text="companyStructureName"></span>
  19. </div>
  20. </form>
  21. </div>
  22. <div class="mui-content-padded vongi-qingjiadt vongi-editme">
  23. <form class="mui-input-group">
  24. <div class="mui-input-row">
  25. <label>姓名<i class="colorfe616c">*</i></label>
  26. <input v-model="subForm.name" type="text" class="mui-input-clear" placeholder="请输入姓名">
  27. </div>
  28. <div class="mui-input-row">
  29. <label>手机号码</label>
  30. <input v-model="subForm.telephone" type="text" class="mui-input-clear" placeholder="请输入手机号码">
  31. </div>
  32. <div class="mui-input-row">
  33. <label>身份证号</label>
  34. <input v-model="subForm.idCard" type="text" class="mui-input-clear" placeholder="请输入身份证号" style="text-transform: uppercase;">
  35. </div>
  36. <div class="mui-input-row">
  37. <label style="width:50%" @click="alertTips">照片<i class="colorfe616c">*</i><i class="iconfont icon-tishi color4fc5f7"></i></label>
  38. <button @click="chooseImage" class="mui-btn mui-btn-block mui-navigate-right" type='button' style="width:50%">
  39. <img v-if="subForm.faceImageUrl" :src="subForm.faceImageUrl" />
  40. <font v-else>请选择</font>
  41. </button>
  42. </div>
  43. </form>
  44. </div>
  45. <div class="vongi-btn vongi-login-btn">
  46. <button class="mui-btn mui-btn-primary" @click="submit">
  47. 提 交
  48. </button>
  49. </div>
  50. </div>
  51. </div>
  52. </template>
  53. <script>
  54. import * as API_Person from '@/apis/person'
  55. import Common from '$project/components/Common.vue'
  56. import Loading from '$project/components/Loading.vue'
  57. import TopHeader from '$project/components/TopHeader.vue'
  58. import {
  59. mapGetters,
  60. mapMutations
  61. } from 'vuex'
  62. import * as types from '$project/store/mutation-types'
  63. import Cropper from '$project/components/Cropper.vue'
  64. import * as WxJsApi from '$project/utils/wxJsApi'
  65. import {
  66. checkPhone,
  67. } from '$project/utils'
  68. export default {
  69. name: 'RegisterResidenceStep4',
  70. components: {
  71. Common,
  72. Loading,
  73. TopHeader,
  74. Cropper
  75. },
  76. data() {
  77. return {
  78. pageTitle: '注册',
  79. subForm: {
  80. sceneId: '',
  81. sceneName: '',
  82. personRoleId: '',
  83. roleName: '',
  84. name: '',
  85. telephone: '',
  86. personId: '',
  87. companyId: '',
  88. companyName: '请选择',
  89. companyStructureId: '',
  90. //companyStructureName: '请选择',
  91. //最终选择的数据
  92. selectCompanyStructureList: [],
  93. address: '',
  94. idCard: '',
  95. faceImageUrl: ''
  96. },
  97. isLoading: false,
  98. roleList: [],
  99. cropperVisible: '',
  100. cropperField: '',
  101. cropperWidth: 250,
  102. cropperHeight: 350,
  103. cropper: {
  104. img: '',
  105. info: true,
  106. size: 1,
  107. outputType: 'jpeg',
  108. canScale: false,
  109. autoCrop: false,
  110. // 只有自动截图开启 宽度高度才生效
  111. autoCropWidth: 250,
  112. autoCropHeight: 350,
  113. fixed: true,
  114. // 真实的输出宽高
  115. infoTrue: true,
  116. fixedNumber: [5, 7]
  117. },
  118. }
  119. },
  120. created() {
  121. this.subForm = this.register_form_data;
  122. if (this.person_data) {
  123. this.subForm.name = this.subForm.name ? this.subForm.name : this.person_data.name;
  124. this.subForm.telephone = this.subForm.telephone ? this.subForm.telephone : this.person_data.phone;
  125. this.subForm.idCard = this.subForm.idCard ? this.subForm.idCard : this.person_data.idCard;
  126. this.subForm.faceImageUrl = this.subForm.faceImageUrl ? this.subForm.faceImageUrl : this.person_data.faceImageUrl;
  127. }
  128. },
  129. methods: {
  130. //微信选择图片
  131. chooseImage() {
  132. WxJsApi.chooseImage().then(res => {
  133. var localData = res.localData;
  134. if (localData.indexOf('data:image') != 0) {
  135. //判断是否有这样的头部
  136. localData = 'data:image/jpeg;base64,' + localData
  137. }
  138. localData = localData.replace(/\r|\n/g, '').replace('data:image/jgp', 'data:image/jpeg')
  139. this.imgBase64 = localData;
  140. //显示裁剪图片
  141. this.showCropper('faceImageUrl');
  142. //this.uploadpic();
  143. }).catch(error => {
  144. mui.toast(error);
  145. })
  146. },
  147. //显示裁剪图片
  148. showCropper(field) {
  149. this.cropper.img = this.imgBase64;
  150. this.cropperField = field;
  151. this.cropperVisible = true;
  152. },
  153. //裁剪图片
  154. cropperFinish(obj) {
  155. console.log(obj);
  156. this.imgBase64 = obj.data;
  157. this.uploadpic(obj.field);
  158. this.cropperVisible = false;
  159. },
  160. //隐藏裁剪图片
  161. cropperCancel() {
  162. this.cropperVisible = false;
  163. },
  164. //上传图片
  165. uploadpic() {
  166. this.isLoading = true;
  167. WxJsApi.uploadPic(this.imgBase64).then(response => {
  168. this.isLoading = false;
  169. this.subForm.faceImageUrl = response;
  170. }).catch(error => {
  171. this.isLoading = false;
  172. mui.toast(error);
  173. })
  174. },
  175. //表单检测
  176. checkFrom() {
  177. let phoneResult = checkPhone(this.subForm.telephone);
  178. if (!this.subForm.name) {
  179. mui.toast('请输入姓名');
  180. return false;
  181. } else if (typeof phoneResult == 'string') {
  182. mui.toast('请输入手机号');
  183. return false;
  184. } else if (!this.subForm.faceImageUrl) {
  185. mui.toast('请上传人脸照片');
  186. return false;
  187. } else {
  188. return true;
  189. }
  190. },
  191. //提交
  192. submit() {
  193. if (this.checkFrom()) {
  194. this.isLoading = true;
  195. API_Person.register(this.subForm).then(response => {
  196. this.isLoading = false;
  197. if (this.person_data) {
  198. mui.toast('提交成功,等待审核中');
  199. //跳转到项目主页上去
  200. window.location.href = '../business/#/master';
  201. } else {
  202. mui.toast('提交成功,等待审核中');
  203. this.$router.push({
  204. name: 'UserLogin',
  205. project: 'business'
  206. })
  207. }
  208. }).catch(error => {
  209. this.isLoading = false;
  210. mui.toast(error);
  211. })
  212. }
  213. },
  214. //弹出提示
  215. alertTips() {
  216. mui.alert('照片将用于人脸识别设备,请上传清晰的免冠登记照或肩部以上近照。', ' ', function() {
  217. });
  218. },
  219. asynCallBack() {
  220. },
  221. ...mapMutations({
  222. set_register_form_data: types.SET_REGISTER_FORM_DATA,
  223. })
  224. },
  225. mounted() {
  226. //获取微信配置
  227. WxJsApi.getWxConfig();
  228. },
  229. destroyed() {
  230. },
  231. computed: {
  232. companyStructureName: {
  233. // getter
  234. get: function() {
  235. let nameArr = [];
  236. this.subForm.selectCompanyStructureList.forEach(function(item) {
  237. nameArr.push(item.name);
  238. })
  239. return nameArr.join('-');
  240. },
  241. // setter
  242. set: function(newValue) {
  243. console.log(newValue)
  244. }
  245. },
  246. ...mapGetters({
  247. openId: 'wx_openid',
  248. token: 'token',
  249. person_data: 'person_data',
  250. person_popedom: 'person_popedom',
  251. register_form_data: 'register_form_data'
  252. })
  253. }
  254. }
  255. </script>
  256. <style scoped src="$project/assets/css/xpwyfyy.css"></style>
  257. <style src="$project/assets/css/iconfont.css"></style>
  258. <style>
  259. </style>