Step3.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <template>
  2. <div>
  3. <common @asynCallBack="asynCallBack"></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. </form>
  17. </div>
  18. <div class="mui-content-padded vongi-qingjiadt">
  19. <form class="mui-input-group">
  20. <div v-for="(item,index) in structureNameList" class="mui-input-row">
  21. <label v-text="item"></label>
  22. <button @click="selectStructure(index)" class="mui-btn mui-btn-block mui-navigate-right mui-ellipsis" type='button'
  23. style="width:65%">
  24. {{subForm.selectCompanyStructureList[index]?subForm.selectCompanyStructureList[index].name:'请选择'}}
  25. </button>
  26. </div>
  27. </form>
  28. </div>
  29. <div class="vongi-btn vongi-login-btn">
  30. <button class="mui-btn mui-btn-primary" @click="nextStep">
  31. 下一步
  32. </button>
  33. </div>
  34. </div>
  35. </div>
  36. </template>
  37. <script>
  38. import Vue from 'vue'
  39. require('$project/assets/js/mui.picker.min.js');
  40. import * as API_Person from '@/apis/person'
  41. import Common from '$project/components/Common.vue'
  42. import Loading from '$project/components/Loading.vue'
  43. import TopHeader from '$project/components/TopHeader.vue'
  44. import {
  45. mapGetters,
  46. mapMutations
  47. } from 'vuex'
  48. import * as types from '$project/store/mutation-types'
  49. export default {
  50. name: 'RegisterResidenceStep3',
  51. components: {
  52. Common,
  53. Loading,
  54. TopHeader
  55. },
  56. data() {
  57. return {
  58. pageTitle: '注册',
  59. subForm: {
  60. sceneId: '',
  61. sceneName: '',
  62. personRoleId: '',
  63. roleName: '',
  64. name: '',
  65. telephone: '',
  66. personId: '',
  67. companyId: '',
  68. companyName: '请选择',
  69. companyStructureId: '',
  70. //最终选择的数据
  71. selectCompanyStructureList: [],
  72. address: '',
  73. idCard: '',
  74. faceImageUrl: ''
  75. },
  76. isLoading: false,
  77. structureList: [],
  78. structureNameList: [],
  79. }
  80. },
  81. created() {
  82. this.subForm = this.register_form_data;
  83. },
  84. methods: {
  85. //获取公司部门列表
  86. getStructureList() {
  87. this.isLoading = true;
  88. API_Person.getCompanyStructureList(this.subForm.companyId).then(response => {
  89. this.isLoading = false;
  90. Vue.set(this.structureList, 0, response.structureInfoList)
  91. this.structureNameList = response.structureNameList;
  92. }).catch(error => {
  93. this.isLoading = false;
  94. mui.toast(error);
  95. })
  96. },
  97. //选择部门
  98. selectStructure(index) {
  99. if (this.structureList[index]) {
  100. var structureList = [];
  101. for (var i = 0; i < this.structureList[index].length; i++) {
  102. structureList.push({
  103. value: this.structureList[index][i]['id'],
  104. text: this.structureList[index][i]['structureName'],
  105. })
  106. }
  107. var _this = this;
  108. var picker = new mui.PopPicker();
  109. picker.setData(structureList);
  110. picker.show(function(selectItems) {
  111. _this.getStructureListNext(index);
  112. //设置保存数据
  113. Vue.set(_this.subForm.selectCompanyStructureList, index, {
  114. id: selectItems[0].value,
  115. name: selectItems[0].text
  116. })
  117. })
  118. } else {
  119. mui.toast('请选择' + this.structureNameList[index - 1]);
  120. }
  121. },
  122. //获取下一层机构数据
  123. getStructureListNext(index) {
  124. //如果有下一层数据就去读取
  125. if (this.structureNameList[index + 1]) {
  126. this.isLoading = true;
  127. API_Person.getCompanyStructureByName(this.subForm.companyId, this.structureNameList[index + 1]).then(response => {
  128. this.isLoading = false;
  129. Vue.set(this.structureList, index + 1, response)
  130. }).catch(error => {
  131. this.isLoading = false;
  132. mui.toast(error);
  133. })
  134. }
  135. },
  136. //检测表单
  137. checkForm() {
  138. //设置最后一个id
  139. let lastIndex = this.subForm.selectCompanyStructureList.length;
  140. let lastItem = this.subForm.selectCompanyStructureList[lastIndex - 1];
  141. //只有当选择的数据长度等于返回的总长度才赋值通过
  142. if (lastIndex == this.structureNameList.length) {
  143. this.subForm.companyStructureId = lastItem ? lastItem.id : '';
  144. }
  145. if (!this.subForm.companyStructureId && this.structureNameList.length > 0) {
  146. mui.toast('请选择' + this.structureNameList[lastIndex]);
  147. return false;
  148. } else {
  149. return true;
  150. }
  151. },
  152. //下一步
  153. nextStep() {
  154. if (this.checkForm()) {
  155. this.set_register_form_data(this.subForm);
  156. this.$router.push({
  157. name: 'RegisterResidenceStep4'
  158. })
  159. }
  160. },
  161. asynCallBack() {
  162. },
  163. ...mapMutations({
  164. set_register_form_data: types.SET_REGISTER_FORM_DATA,
  165. })
  166. },
  167. mounted() {
  168. //获取公司部门列表
  169. this.getStructureList();
  170. },
  171. destroyed() {
  172. },
  173. computed: {
  174. ...mapGetters({
  175. openId: 'wx_openid',
  176. token: 'token',
  177. person_data: 'person_data',
  178. person_popedom: 'person_popedom',
  179. register_form_data: 'register_form_data'
  180. })
  181. }
  182. }
  183. </script>
  184. <style scoped src="$project/assets/css/xpwyfyy.css"></style>
  185. <style src="$project/assets/css/iconfont.css"></style>
  186. <style src="$project/assets/css/mui.picker.min.css"></style>
  187. <style>
  188. </style>