wantHouse.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <view>
  3. <z-text style="min-width: 300rpx;" arrow v-model="chooseContent" :placeholder="placeholder" @click="visible=true"></z-text>
  4. <z-slide-card :title="title" :visible.sync="visible" @beforeClose="beforeClose" rightBtnText="确定" @rightClick="submit">
  5. <z-cell :label="item.houseName" v-for="(item,index) in dataList" :key="item.id" @click.native="changeChecked(item.id)">
  6. <view class="iconfont iconicon-test" v-if="item.checked"></view>
  7. </z-cell>
  8. </z-slide-card>
  9. </view>
  10. </template>
  11. <script>
  12. const app = getApp({
  13. allowDefault: true
  14. });
  15. export default {
  16. props: {
  17. multiple: Boolean,
  18. value: String | Array,
  19. placeholder: String,
  20. title: {
  21. type: String,
  22. default: '选择场地'
  23. }
  24. },
  25. model: {
  26. prop: 'value',
  27. },
  28. data() {
  29. return {
  30. visible: false,
  31. dataList: [],
  32. checkedList: [],
  33. oldcheckedList: [],
  34. chooseContent: '',
  35. }
  36. },
  37. onBackPress() {
  38. if(this.visible) {
  39. this.visible = false;
  40. return true;
  41. }
  42. },
  43. watch: {
  44. value(newval, oldval) {
  45. console.log(newval)
  46. this.oldcheckedList = newval;
  47. this.checkedList = newval; //选中的数据
  48. // this.getData();
  49. }
  50. },
  51. mounted() {
  52. this.getData();
  53. },
  54. methods: {
  55. getData() {
  56. // this.$root.getStorage('storeId')
  57. this.$axios.get("/house/houseListByStoreId/"+uni.getStorageSync('storeId')).then(res => {
  58. // console.log(res.data.list)
  59. this.dataList = res.data.list;
  60. this.getChecked();
  61. }).catch(err => {
  62. console.log(err.msg);
  63. })
  64. },
  65. //获取已经被选中的
  66. getChecked() {
  67. var num = 0, //匹配个数
  68. slength = this.checkedList.length, //选中数
  69. chooseContent = '',
  70. checkedVal = [],
  71. checkedDetail = this.multiple ? [] : {};
  72. if (this.multiple) {
  73. for (var i in this.dataList) {
  74. for (var j in this.checkedList) {
  75. if (this.dataList[i].id == this.checkedList[j]) {
  76. chooseContent += this.dataList[i].houseName + '、';
  77. this.dataList[i].checked = true;
  78. checkedVal.push(this.dataList[i].id);
  79. checkedDetail.push(this.dataList[i]);
  80. num++;
  81. break;
  82. }
  83. }
  84. }
  85. } else {
  86. slength = 1;
  87. for (var i in this.dataList) {
  88. if (this.dataList[i].id == this.checkedList) {
  89. this.dataList[i].checked = true;
  90. chooseContent += this.dataList[i].houseName + '、';
  91. checkedVal = this.dataList[i].id;
  92. checkedDetail = this.dataList[i];
  93. break;
  94. }
  95. }
  96. }
  97. if (chooseContent.length > 0) {
  98. chooseContent = chooseContent.substring(0, chooseContent.length - 1);
  99. }
  100. this.chooseContent = chooseContent;
  101. this.$emit('input', checkedVal);
  102. this.$emit('checkedDetail', checkedDetail);
  103. },
  104. beforeClose() {
  105. var checkedDetail = this.multiple ? [] : {};
  106. for (var i in this.dataList) {
  107. this.dataList[i].checked = false;
  108. if (this.multiple) {
  109. for (var j in this.oldcheckedList) {
  110. console.log(this.oldcheckedList[j])
  111. if (this.oldcheckedList[j] == this.dataList[i].id) {
  112. this.dataList[i].checked = true;
  113. checkedDetail.push(this.dataList[i]);
  114. break;
  115. }
  116. }
  117. } else {
  118. if (this.dataList[i].id == this.oldcheckedList) {
  119. this.dataList[i].checked = true;
  120. checkedDetail = this.dataList[i];
  121. }
  122. }
  123. }
  124. this.checkedList = this.oldcheckedList;
  125. this.$emit('input', this.oldcheckedList);
  126. this.$emit('checkedDetail', checkedDetail);
  127. },
  128. changeChecked(id) {
  129. if (this.multiple) {
  130. for (var i = 0, len = this.dataList.length; i < len; i++) {
  131. if (this.dataList[i].id == id) {
  132. this.dataList[i].checked = this.dataList[i].checked ? false : true;
  133. this.$set(this.dataList, i, this.dataList[i]);
  134. }
  135. }
  136. } else {
  137. for (var i = 0, len = this.dataList.length; i < len; i++) {
  138. if (this.dataList[i].id == id) {
  139. this.dataList[i].checked = this.dataList[i].checked ? false : true;
  140. this.$set(this.dataList, i, this.dataList[i]);
  141. } else {
  142. this.dataList[i].checked = false;
  143. this.$set(this.dataList, i, this.dataList[i]);
  144. }
  145. }
  146. }
  147. },
  148. submit() {
  149. var checkedList = this.dataList.filter((item) => item.checked);
  150. var chooseContent = '',
  151. checkedVal = [],
  152. checkedDetail = this.multiple ? [] : {};
  153. for (var i = 0, len = checkedList.length; i < len; i++) {
  154. chooseContent += checkedList[i].houseName + '、';
  155. if (this.multiple) {
  156. checkedVal.push(checkedList[i].id);
  157. checkedDetail.push(checkedList[i]);
  158. } else {
  159. checkedVal = checkedList[i].id;
  160. checkedDetail = checkedList[i];
  161. }
  162. }
  163. if (chooseContent.length > 0) {
  164. chooseContent = chooseContent.substring(0, chooseContent.length - 1);
  165. }
  166. this.chooseContent = chooseContent;
  167. this.$emit('input', checkedVal);
  168. this.$emit('checkedDetail', checkedDetail);
  169. this.visible = false;
  170. }
  171. }
  172. }
  173. </script>
  174. <style lang="scss" scoped>
  175. .iconfont {
  176. color: #2481EE;
  177. }
  178. </style>