detail.tsx 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. import { defineComponent, onMounted, reactive, ref } from 'vue';
  2. import styles from './detail.module.less';
  3. import MHeader from '@/components/m-header';
  4. import { Button, DropdownItem, DropdownMenu, Tab, Tabs } from 'vant';
  5. import MSticky from '@/components/m-sticky';
  6. import DetailList from './detail-list';
  7. import {
  8. coursesStatus,
  9. coursesType,
  10. evaluateStatus,
  11. problemType
  12. } from '@/helpers/constant';
  13. export default defineComponent({
  14. name: 'patrol-evaluation-detail',
  15. setup() {
  16. const dropDownRef = ref();
  17. const forms = reactive({
  18. heightV: 0,
  19. active: 'NotEvaluated',
  20. listState: {
  21. loading: true
  22. },
  23. dropDownValue: {
  24. evaluateStatus: '',
  25. problemType: '',
  26. evaluateStatus1: '',
  27. courseType: '',
  28. status: ''
  29. },
  30. dropDownValueSelect: {
  31. evaluateStatus: '',
  32. problemType: '',
  33. evaluateStatus1: '',
  34. courseType: '',
  35. status: ''
  36. },
  37. courseStatusType: [{ text: '全部状态', value: '' }],
  38. eveluationType: [{ text: '全部评价', value: '' }],
  39. questionType: [{ text: '全部问题', value: '' }],
  40. courseType: [{ text: '全部类型', value: '' }]
  41. });
  42. const onDropDownClose = (item: any) => {
  43. item.value && item.value.toggle();
  44. };
  45. const onSubmit = () => {
  46. if (forms.active === 'Evaluated') {
  47. //
  48. forms.dropDownValue.evaluateStatus =
  49. forms.dropDownValueSelect.evaluateStatus;
  50. forms.dropDownValue.problemType = forms.dropDownValueSelect.problemType;
  51. } else if (forms.active === 'NotEvaluated') {
  52. //
  53. forms.dropDownValue.evaluateStatus1 =
  54. forms.dropDownValueSelect.evaluateStatus1;
  55. forms.dropDownValue.courseType = forms.dropDownValueSelect.courseType;
  56. forms.dropDownValue.status = forms.dropDownValueSelect.status;
  57. }
  58. onDropDownClose(dropDownRef);
  59. };
  60. onMounted(() => {
  61. for (const key in coursesStatus) {
  62. if (Object.prototype.hasOwnProperty.call(coursesStatus, key)) {
  63. forms.courseStatusType.push({
  64. text: coursesStatus[key],
  65. value: key
  66. });
  67. }
  68. }
  69. for (const key in evaluateStatus) {
  70. if (Object.prototype.hasOwnProperty.call(evaluateStatus, key)) {
  71. forms.eveluationType.push({
  72. text: evaluateStatus[key],
  73. value: key
  74. });
  75. }
  76. }
  77. for (const key in problemType) {
  78. if (Object.prototype.hasOwnProperty.call(problemType, key)) {
  79. forms.questionType.push({
  80. text: problemType[key],
  81. value: key
  82. });
  83. }
  84. }
  85. for (const key in coursesType) {
  86. if (Object.prototype.hasOwnProperty.call(coursesType, key)) {
  87. forms.courseType.push({
  88. text: coursesType[key],
  89. value: key
  90. });
  91. }
  92. }
  93. });
  94. return () => (
  95. <div class={styles['patrol-evaluation-detail']}>
  96. <MSticky
  97. position="top"
  98. onBarHeight={(height: number) => {
  99. forms.heightV = height;
  100. }}>
  101. <MHeader>
  102. {{
  103. right: () => (
  104. <DropdownMenu
  105. class={styles.patrolDetailDropDown}
  106. closeOnClickOutside={false}>
  107. <DropdownItem
  108. title="筛选"
  109. ref={dropDownRef}
  110. teleport={'body'}
  111. onOpen={() => {
  112. forms.dropDownValueSelect = {
  113. ...forms.dropDownValue
  114. };
  115. }}>
  116. <div class={styles.searchContainer}>
  117. {forms.active === 'Evaluated' ? (
  118. <>
  119. <div class={styles.searchTitle}>评价类型</div>
  120. <div
  121. class={[
  122. styles.searchTypeGroup,
  123. styles.searchTypeFlex
  124. ]}>
  125. {forms.eveluationType.map((item: any) => (
  126. <div
  127. class={[
  128. styles.searchTypeItem,
  129. forms.dropDownValueSelect.evaluateStatus ===
  130. item.value && styles['is-active']
  131. ]}
  132. onClick={() => {
  133. forms.dropDownValueSelect.evaluateStatus =
  134. item.value;
  135. }}>
  136. {item.text}
  137. </div>
  138. ))}
  139. </div>
  140. <div class={styles.searchTitle}>问题类型</div>
  141. <div
  142. class={[
  143. styles.searchTypeGroup,
  144. styles.searchTypeFlex
  145. ]}>
  146. {forms.questionType.map((item: any) => (
  147. <div
  148. class={[
  149. styles.searchTypeItem,
  150. forms.dropDownValueSelect.problemType ===
  151. item.value && styles['is-active']
  152. ]}
  153. onClick={() => {
  154. forms.dropDownValueSelect.problemType =
  155. item.value;
  156. }}>
  157. {item.text}
  158. </div>
  159. ))}
  160. </div>
  161. </>
  162. ) : null}
  163. {forms.active === 'NotEvaluated' ? (
  164. <>
  165. <div class={styles.searchTitle}>课程状态</div>
  166. <div
  167. class={[
  168. styles.searchTypeGroup,
  169. styles.searchTypeFlex
  170. ]}>
  171. {forms.courseStatusType.map((item: any) => (
  172. <div
  173. class={[
  174. styles.searchTypeItem,
  175. forms.dropDownValueSelect.status ===
  176. item.value && styles['is-active']
  177. ]}
  178. onClick={() => {
  179. forms.dropDownValueSelect.status = item.value;
  180. }}>
  181. {item.text}
  182. </div>
  183. ))}
  184. </div>
  185. <div class={styles.searchTitle}>课程类型</div>
  186. <div
  187. class={[
  188. styles.searchTypeGroup,
  189. styles.searchTypeFlex
  190. ]}>
  191. {forms.courseType.map((item: any) => (
  192. <div
  193. class={[
  194. styles.searchTypeItem,
  195. forms.dropDownValueSelect.courseType ===
  196. item.value && styles['is-active']
  197. ]}
  198. onClick={() => {
  199. forms.dropDownValueSelect.courseType =
  200. item.value;
  201. }}>
  202. {item.text}
  203. </div>
  204. ))}
  205. </div>
  206. </>
  207. ) : null}
  208. </div>
  209. <div class={['btnGroupPopup', 'van-hairline--top']}>
  210. <Button
  211. round
  212. onClick={() => onDropDownClose(dropDownRef)}>
  213. 取消
  214. </Button>
  215. <Button type="primary" round onClick={onSubmit}>
  216. 确定
  217. </Button>
  218. </div>
  219. </DropdownItem>
  220. </DropdownMenu>
  221. )
  222. }}
  223. </MHeader>
  224. </MSticky>
  225. <Tabs
  226. v-model:active={forms.active}
  227. offsetTop={forms.heightV}
  228. sticky
  229. lazyRender
  230. swipeable>
  231. <Tab name={'NotEvaluated'} title="未评价">
  232. <DetailList
  233. type="NotEvaluated"
  234. evaluateStatus={forms.dropDownValue.evaluateStatus1}
  235. courseType={forms.dropDownValue.courseType}
  236. status={forms.dropDownValue.status}
  237. />
  238. </Tab>
  239. <Tab name={'Evaluated'} title="已评价">
  240. <DetailList
  241. type="Evaluated"
  242. evaluateStatus={forms.dropDownValue.evaluateStatus}
  243. problemType={forms.dropDownValue.problemType}
  244. />
  245. </Tab>
  246. </Tabs>
  247. </div>
  248. );
  249. }
  250. });