dorpdownSelect.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <template>
  2. <view class="select-bg_bx">
  3. <view v-if="isShowTit" @click="switchCut" :class="['select-title',dropdownShow?'select_corlor':'']">
  4. {{menuObjActive?menuObjActive:getMyShopInfo.shopName}}
  5. <!-- {{getMyShopInfo?getMyShopInfo.shopName:menuObj.title}}-->
  6. <i v-if="isShowMore" class="iconfont iconsanjiao_xia"></i>
  7. </view>
  8. <view
  9. class="select-mark-view" v-show="dropdownShow" @click="switchCut"></view>
  10. <view
  11. v-if="dropdownShow"
  12. :style="{
  13. top
  14. }"
  15. class="select-fixed_bx">
  16. <slot>
  17. <view class="select-item-box">
  18. <view class="title">{{menuObj.titleChild}}</view>
  19. <view class="item-child_box">
  20. <button
  21. v-for="(item,index) in menuObj.list"
  22. :key="index"
  23. @click="changeItem(item)"
  24. :class="['admin-button-com','mini-btn',selectItemId === item.id?'blue':'default']">
  25. {{item.name}}
  26. </button>
  27. </view>
  28. </view>
  29. <view
  30. v-if="typeSelect === 1"
  31. class="select-item-box">
  32. <view class="title">其他时间选择</view>
  33. <view class="item-child_box" >
  34. <view class="admin-button-com mini-btn default custom" @tap="changeItem({name:'自定义',id:'custom'})">自定义</view>
  35. <!-- <picker-->
  36. <!-- class="admin-button-com mini-btn default custom"-->
  37. <!-- mode="date" :value="selectItemId" @change="endTimeFn">-->
  38. <!-- <div v-if="selectItemId&&formatSelect">{{ selectItemId }}</div>-->
  39. <!-- <div class="tui-placeholder" v-else>自定义时间</div>-->
  40. <!-- </picker>-->
  41. </view>
  42. </view>
  43. </slot>
  44. </view>
  45. </view>
  46. </template>
  47. <script>
  48. import DropdownList from "@/components/plugin/dropdown-list";
  49. import AppDatePicker from "@/components/app-date-picker";
  50. import rangeDatePick from '@/components/pyh-rdtpicker/pyh-rdtpicker.vue';
  51. import {mapGetters} from "vuex";
  52. export default {
  53. name:'DorpdownSelect',
  54. components:{
  55. DropdownList,AppDatePicker,rangeDatePick
  56. },
  57. props:{
  58. menuObj:{
  59. type: Object,
  60. default: ()=>({
  61. title:'时间',
  62. titleChild:'时间',
  63. list: [{name:'昨天',id:'0'},{name:'今天',id:'1'},{name:'本月',id:'2'},{name:'上月',id:'3'},{name:'今年',id:'4'}]
  64. })
  65. },
  66. // 1 是时间 2是其他
  67. typeSelect:{
  68. type:Number,
  69. default: 2
  70. },
  71. top:{
  72. type: String,
  73. default: 'auto'
  74. },
  75. selectItemId:{
  76. type:[String,Number],
  77. default:''
  78. },
  79. isShowTit:{
  80. type: Boolean,
  81. default: true
  82. },
  83. isShowMore:{
  84. type: Boolean,
  85. default: true
  86. }
  87. },
  88. data(){
  89. return {
  90. dropdownShow: false,
  91. selectItem:'',
  92. menuObjActive:'',
  93. }
  94. },
  95. computed:{
  96. ...mapGetters(["getMyShopInfo"]),
  97. formatSelect(){
  98. if(!this.$util.isEmpty(this.selectItemId)&&
  99. this.$util.isString(this.selectItemId)&&
  100. this.selectItemId.split('-').length>1){
  101. return true
  102. }else{
  103. return false
  104. }
  105. },
  106. },
  107. mounted(){
  108. },
  109. onLoad(){
  110. },
  111. methods:{
  112. switchCut(){
  113. this.dropdownShow = !this.dropdownShow
  114. },
  115. changeItem(val){
  116. if(val.id== this.selectItemId&&val.name!='自定义'){
  117. return false
  118. }
  119. this.$emit('update:selectItemId',val.id)
  120. this.dropdownShow = false;
  121. this.$emit('update:menuObj',{
  122. ...this.menuObj,
  123. title:val.name
  124. })
  125. this.menuObjActive = val.name;
  126. this.$emit('selectSussess',{
  127. select: this.$util.isString(val)?val:val.name,
  128. selectItem: val
  129. })
  130. },
  131. endTimeFn(e){
  132. this.selectItemId = e.detail.value;
  133. this.dropdownShow = false;
  134. this.$emit('update:selectItemId',val.id)
  135. this.$emit('update:menuObj',{
  136. ...this.menuObj,
  137. title:e.detail.value
  138. })
  139. this.$emit('selectSussess',{
  140. select: e.detail.value,
  141. selectItem: val
  142. })
  143. }
  144. }
  145. }
  146. </script>
  147. <style lang="scss" scoped>
  148. .select-bg_bx {
  149. .select-title {
  150. color: #666666;
  151. font-size: 26px;
  152. & .iconsanjiao_xia {
  153. margin-left: 10px;
  154. }
  155. &.select_corlor {
  156. color: #3385FF;
  157. & .iconsanjiao_xia {
  158. transform: rotate(180deg);
  159. }
  160. }
  161. }
  162. .select-mark-view {
  163. height: 100vh;
  164. height: 100%;
  165. position: fixed;
  166. width: 100%;
  167. background-color: rgba(0, 0, 0, 0.5);
  168. left: 0;
  169. top: 0px;
  170. z-index: 900;
  171. }
  172. & .select-fixed_bx {
  173. position: fixed;
  174. width: 100%;
  175. background-color: #FFFFFF;
  176. left: 0;
  177. z-index: 999;
  178. // box-shadow: 0 6px 10px #cccccc;
  179. padding:120px 30px 40px;
  180. border-radius: 0px 0px 20px 20px;
  181. transition: all 0.5s ease-in-out;
  182. // top: 100px;
  183. & .select-item-box {
  184. & .title {
  185. font-size: 24px;
  186. color: #333333;
  187. font-weight: 600;
  188. text-align: left;
  189. }
  190. & .item-child_box {
  191. display: flex;
  192. padding: 20px 0 20px;
  193. align-items: center;
  194. flex-flow: wrap;
  195. justify-content: space-between;
  196. & .admin-button-com {
  197. margin-bottom: 20px;
  198. padding: 18px 50px;
  199. &.custom {
  200. width: 100%;
  201. }
  202. }
  203. }
  204. }
  205. }
  206. }
  207. </style>