selectUnit.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <template>
  2. <div class="select-unit-box">
  3. <el-autocomplete
  4. style="width:100%"
  5. v-model="unit"
  6. value-key="label"
  7. :fetch-suggestions="querySearch"
  8. :disabled="disabled"
  9. :placeholder="$t('Edb.InputHolderAll.input_unit')"
  10. @select="handleChange"
  11. @change="handleChange"
  12. @blur.stop="handleChange"
  13. >
  14. <template slot-scope="{ item }">
  15. <div>{{ item.label }}</div>
  16. </template>
  17. </el-autocomplete>
  18. </div>
  19. </template>
  20. <script>
  21. // import { unitArr } from '@/utils/defaultOptions';
  22. /* const unitArr = [
  23. '无',
  24. '万吨',
  25. '亿元',
  26. '元',
  27. '元/吨',
  28. '元/湿吨',
  29. '千克',
  30. '吨',
  31. '短吨',
  32. '美元/吨',
  33. '万平方米',
  34. '美元/桶',
  35. '美分/加仑',
  36. '手'
  37. ] */
  38. //selectUnit在registryComponents就被初始化,用不了bus
  39. export default {
  40. name:"selectUnit",
  41. props:{
  42. value:{
  43. type:String,
  44. default:''
  45. },
  46. disabled:{
  47. type:Boolean,
  48. default:false
  49. }
  50. },
  51. watch:{
  52. value:{
  53. handler(){
  54. if(this.value){
  55. this.unit = this.getUnitTrans(this.value)
  56. }
  57. },
  58. immediate:true
  59. }
  60. },
  61. data() {
  62. return {
  63. unit:'',
  64. /* unitArr: [], */
  65. }
  66. },
  67. computed:{
  68. unitArr(){
  69. return this.getUnitArr()
  70. }
  71. },
  72. mounted(){},
  73. methods:{
  74. querySearch(queryString, cb) {
  75. const unitArr = this.unitArr;
  76. const results = queryString ? unitArr.filter(this.createFilter(queryString)) : unitArr;
  77. // 调用 callback 返回建议列表的数据
  78. cb(results);
  79. },
  80. createFilter(queryString) {
  81. return (unit) => {
  82. return (unit.label.toLowerCase().indexOf(queryString.toLowerCase()) !== -1);
  83. };
  84. },
  85. handleChange(item){
  86. //this.unit = item.value
  87. console.log('单位',this.unit);
  88. this.$emit('input',item.value||this.unit); //若为unitArr内的单位,则存对应的中文,若为自行输入的单位,则输什么存什么
  89. },
  90. getUnitArr(){
  91. return [
  92. {value:'无',label:this.$i18nt.t('Edb.UnitAll.u_null')},
  93. {value:'万吨',label:this.$i18nt.t('Edb.UnitAll.wanton')},
  94. {value:'亿元',label:this.$i18nt.t('Edb.UnitAll.u_bill')},
  95. {value:'元',label:this.$i18nt.t('Edb.UnitAll.u_yuan')},
  96. {value:'元/吨',label:this.$i18nt.t('Edb.UnitAll.yuan_ton')},
  97. {value:'元/湿吨',label:this.$i18nt.t('Edb.UnitAll.yuan_wetton')},
  98. {value:'千克',label:this.$i18nt.t('Edb.UnitAll.u_kg')},
  99. {value:'吨',label:this.$i18nt.t('Edb.UnitAll.u_ton')},
  100. {value:'短吨',label:this.$i18nt.t('Edb.UnitAll.short_ton')},
  101. {value:'美元/吨',label:this.$i18nt.t('Edb.UnitAll.doll_ton')},
  102. {value:'万平方千米',label:this.$i18nt.t('Edb.UnitAll.wan_skilo')},
  103. {value:'美元/桶',label:this.$i18nt.t('Edb.UnitAll.doll_bar')},
  104. {value:'美分/加仑',label:this.$i18nt.t('Edb.UnitAll.cent_gal')},
  105. {value:'手',label:this.$i18nt.t('Edb.UnitAll.u_hand')},
  106. ]
  107. },
  108. getUnitTrans(unit){
  109. const map = {
  110. '无':this.$i18nt.t('Edb.UnitAll.u_null'),
  111. '万吨':this.$i18nt.t('Edb.UnitAll.wanton'),
  112. '亿元':this.$i18nt.t('Edb.UnitAll.u_bill'),
  113. '元':this.$i18nt.t('Edb.UnitAll.u_yuan'),
  114. '元/吨':this.$i18nt.t('Edb.UnitAll.yuan_ton'),
  115. '元/湿吨':this.$i18nt.t('Edb.UnitAll.yuan_wetton'),
  116. '千克':this.$i18nt.t('Edb.UnitAll.u_kg'),
  117. '吨':this.$i18nt.t('Edb.UnitAll.u_ton'),
  118. '短吨':this.$i18nt.t('Edb.UnitAll.short_ton'),
  119. '美元/吨':this.$i18nt.t('Edb.UnitAll.doll_ton'),
  120. '万平方千米':this.$i18nt.t('Edb.UnitAll.wan_skilo'),
  121. '美元/桶':this.$i18nt.t('Edb.UnitAll.doll_bar'),
  122. '美分/加仑':this.$i18nt.t('Edb.UnitAll.cent_gal'),
  123. '手':this.$i18nt.t('Edb.UnitAll.u_hand'),
  124. }
  125. return map[unit]||unit //若是自行输入的单位,直接返回
  126. }
  127. }
  128. }
  129. </script>
  130. <style lang="scss">
  131. .select-unit-box{
  132. width: 100%;
  133. .el-input{
  134. width: 100% !important;
  135. }
  136. }
  137. </style>