index.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import { Search } from '@element-plus/icons-vue'
  2. import { defineComponent, toRefs, reactive, onMounted, ref, watch } from 'vue'
  3. import {
  4. ElButton,
  5. ElForm,
  6. ElFormItem,
  7. ElInput,
  8. ElSelect,
  9. ElOption,
  10. ElIcon
  11. } from 'element-plus'
  12. // import white from './while.module.less'
  13. import classes from './index.module.less'
  14. import request from '@/helpers/request'
  15. import searchIcon from './images/searchIcon.png'
  16. export default defineComponent({
  17. name: 'searchInput',
  18. props: {
  19. title: {
  20. type: String,
  21. default: ''
  22. },
  23. isWhile: {
  24. type: Boolean,
  25. default: true
  26. },
  27. searchVal: {
  28. type: Object,
  29. default: {}
  30. },
  31. holder: {
  32. type: String,
  33. default: '搜一搜你想练习的曲目'
  34. }
  35. },
  36. emits: ['startSearch'],
  37. setup(props, conent) {
  38. const state = reactive({
  39. title: props.title,
  40. search: props.searchVal.search,
  41. subject: null as null | number | string,
  42. subjectList: [],
  43. holder: props.holder
  44. })
  45. watch(
  46. () => props.searchVal,
  47. searchVal => {
  48. // console.log(searchVal,'searchVal')
  49. state.search = searchVal.search ? searchVal.search : ''
  50. state.subject = Number(props.searchVal.subject || props.searchVal.lessonSubject)
  51. ? Number(props.searchVal.subject|| props.searchVal.lessonSubject)
  52. : ''
  53. },
  54. {
  55. deep: true
  56. }
  57. )
  58. const getSubjectList = async () => {
  59. console.log('调用')
  60. try {
  61. const res = await request.get(
  62. '/api-website/open/subject/queryPage',
  63. {params:{rows:9999,page:1}}
  64. )
  65. state.subjectList = res.data.rows
  66. } catch (e) {
  67. console.log(e)
  68. }
  69. }
  70. const startSearch = () => {
  71. conent.emit('startSearch', {
  72. search: state.search,
  73. subject: state.subject
  74. })
  75. }
  76. onMounted(() => {
  77. getSubjectList()
  78. })
  79. // let classStyle = classes
  80. return () => (
  81. <>
  82. {/* props.isWhile ? classStyle.While : '' */}
  83. <div class={[classes.wrap]}>
  84. <div class={classes.selectWrap} id="selectWrap">
  85. <ElSelect
  86. clearable
  87. v-model={state.subject}
  88. placeholder="请选择声部"
  89. style="width: 175px"
  90. class={["subSelect",state.subject?'hasVal':'']}
  91. v-slots={{
  92. suffix: () => <div class={classes.san}></div>
  93. }}
  94. >
  95. {state.subjectList.map((item: any) => (
  96. <ElOption label={item.name} value={item.id} />
  97. ))}
  98. </ElSelect>
  99. <div class={classes.line}></div>
  100. </div>
  101. <div class={classes.searchWrap} >
  102. <img src={searchIcon} alt="" />
  103. </div>
  104. <ElInput
  105. v-model={state.search}
  106. placeholder={state.holder}
  107. clearable
  108. class={classes.inputSelect}
  109. // onKeyup={e => {
  110. // if (e.keyCode === 13) {
  111. // startSearch()
  112. // }
  113. // }}
  114. ></ElInput>
  115. <div class={classes.searchline}></div>
  116. <div class={classes.searchBtn} onClick={startSearch}>搜索</div >
  117. </div>
  118. </>
  119. )
  120. }
  121. })