searchBoxNew.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. <template>
  2. <div id="searchBoxNew">
  3. <div class="inputListBox" v-if="topType">
  4. <div class="fon_s">商品类型:</div>
  5. <div>
  6. <el-button
  7. :type="formData.goodsType === item.value ? 'primary' : ''"
  8. :size="size"
  9. v-for="(item, index) in lists"
  10. :key="index"
  11. @click="topSearch(item.value)"
  12. >{{ item.label }}</el-button
  13. >
  14. </div>
  15. </div>
  16. <div class="inputListBox" v-if="shType">
  17. <div class="fon_s">审核状态:</div>
  18. <div>
  19. <el-button
  20. :type="formData.status === item.value ? 'primary' : ''"
  21. :size="size"
  22. v-for="(item, index) in lists5"
  23. :key="index"
  24. @click="topSearchsh(item.value)"
  25. >{{ item.label }}</el-button
  26. >
  27. </div>
  28. </div>
  29. <!-- <div class="inputListBox" v-if="classType">
  30. <div>
  31. <el-button
  32. :type="formData.goodsType === item.value ? 'primary' : ''"
  33. :size="size"
  34. v-for="(item, index) in classLists"
  35. :key="index"
  36. @click="classSearch(item.value)"
  37. >{{ item.label }}</el-button
  38. >
  39. </div>
  40. </div> -->
  41. <div class="inputListBoxs">
  42. <div
  43. class="fon_s"
  44. style="padding-top: 10px; width: 70px; text-align: end"
  45. >
  46. 筛选:
  47. </div>
  48. <el-form :inline="true" :model="formData" class="tsxnz demo-form-inline">
  49. <template v-for="(item, index) in formList">
  50. <el-form-item :key="index" :label="item.label" v-if="ifCs(item)">
  51. <!-- 教育类型 -->
  52. <el-select
  53. v-if="item.scope === 'educationType'"
  54. v-model="formData[item.prop]"
  55. :placeholder="item.placeholder"
  56. :size="size"
  57. @change="changeEducationType"
  58. >
  59. <el-option
  60. v-for="(items, indexs) in educationType"
  61. :key="indexs"
  62. :label="items.educationName"
  63. :value="items.id"
  64. ></el-option>
  65. </el-select>
  66. <!-- 业务层次 -->
  67. <el-select
  68. v-else-if="item.scope === 'businessLevel'"
  69. v-model="formData[item.prop]"
  70. :placeholder="item.placeholder"
  71. :size="size"
  72. @change="changeBusinessLevel"
  73. >
  74. <el-option
  75. v-for="(items, indexs) in newBusinessLevel"
  76. :key="indexs"
  77. :label="items.projectName + '-' +items.businessName"
  78. :value="items.id"
  79. ></el-option>
  80. </el-select>
  81. <!-- 院校 -->
  82. <el-select
  83. v-else-if="item.scope === 'schoolList'"
  84. v-model="formData[item.prop]"
  85. :placeholder="item.placeholder"
  86. :size="size"
  87. >
  88. <el-option
  89. v-for="(items, indexs) in newSchoolList"
  90. :key="indexs"
  91. :label="items.schoolName"
  92. :value="items.id"
  93. ></el-option>
  94. </el-select>
  95. <!-- 专业-根据教育类型筛选 -->
  96. <el-select
  97. v-else-if="item.scope === 'Professional'"
  98. v-model="formData[item.prop]"
  99. :placeholder="item.placeholder"
  100. :size="size"
  101. >
  102. <el-option
  103. v-for="(items, indexs) in newProfessional"
  104. :key="indexs"
  105. :label="items.categoryName"
  106. :value="items.id"
  107. ></el-option>
  108. </el-select>
  109. <!-- 专业 -->
  110. <el-select
  111. v-else-if="item.scope === 'ProfessionalList'"
  112. v-model="formData[item.prop]"
  113. :placeholder="item.placeholder"
  114. :size="size"
  115. >
  116. <el-option
  117. v-for="(items, indexs) in Professional"
  118. :key="indexs"
  119. :label="items.categoryName"
  120. :value="items.id"
  121. ></el-option>
  122. </el-select>
  123. <!-- 科目 -->
  124. <el-select
  125. v-else-if="item.scope === 'sujectType'"
  126. v-model="formData[item.prop]"
  127. :placeholder="item.placeholder"
  128. :size="size"
  129. >
  130. <el-option
  131. v-for="(items, indexs) in newSujectType"
  132. :key="indexs"
  133. :label="items.subjectName"
  134. :value="items.id"
  135. ></el-option>
  136. </el-select>
  137. <!-- 题目类型 -->
  138. <el-select
  139. v-else-if="item.scope === 'selectBank'"
  140. v-model="formData[item.prop]"
  141. :placeholder="item.placeholder"
  142. :size="size"
  143. >
  144. <el-option
  145. v-for="(items, indexs) in optionsBank"
  146. :key="indexs"
  147. :label="items.label"
  148. :value="items.value"
  149. ></el-option>
  150. </el-select>
  151. <!-- 试卷类型 -->
  152. <el-select
  153. v-else-if="item.scope === 'paperType'"
  154. v-model="formData[item.prop]"
  155. :placeholder="item.placeholder"
  156. :size="size"
  157. >
  158. <el-option
  159. v-for="(items, indexs) in paperType"
  160. :key="indexs"
  161. :label="items.label"
  162. :value="items.value"
  163. ></el-option>
  164. </el-select>
  165. <!-- 考试标题 -->
  166. <el-select
  167. v-else-if="item.scope === 'examList'"
  168. v-model="formData[item.prop]"
  169. :placeholder="item.placeholder"
  170. :size="size"
  171. >
  172. <el-option
  173. v-for="(items, indexs) in examList"
  174. :key="indexs"
  175. :label="items.applyName"
  176. :value="items.applyId"
  177. ></el-option>
  178. </el-select>
  179. <!-- 自定义select -->
  180. <el-select
  181. clearable
  182. v-else-if="item.scope === 'select'"
  183. v-model="formData[item.prop]"
  184. :placeholder="item.placeholder"
  185. :size="size"
  186. >
  187. <el-option
  188. v-for="(items, indexs) in item.options"
  189. :key="indexs"
  190. :label="items.label"
  191. :value="items.value"
  192. ></el-option>
  193. </el-select>
  194. <div v-else-if="item.scope === 'numList'">
  195. <el-input-number
  196. :controls="false"
  197. v-model="formData[item.prop1]"
  198. controls-position="right"
  199. :min="0"
  200. :max="100"
  201. :size="size"
  202. @change="
  203. handleChanges(formData[item.prop1], formData[item.prop2])
  204. "
  205. ></el-input-number
  206. >~
  207. <el-input-number
  208. :controls="false"
  209. v-model="formData[item.prop2]"
  210. controls-position="right"
  211. :min="0"
  212. :max="100"
  213. :size="size"
  214. @change="
  215. handleChanges(formData[item.prop1], formData[item.prop2])
  216. "
  217. ></el-input-number>
  218. </div>
  219. <el-input-number
  220. v-else-if="item.scope === 'inputNumber'"
  221. v-model="formData[item.prop]"
  222. controls-position="right"
  223. :min="0"
  224. :max="100"
  225. :size="size"
  226. ></el-input-number>
  227. <el-cascader
  228. v-else-if="item.scope === 'cascader'"
  229. v-model="formData[item.prop]"
  230. :options="item.options"
  231. :size="size"
  232. :props="{
  233. label: item.props.label,
  234. value: item.props.value,
  235. checkStrictly: true,
  236. emitPath: false,
  237. }"
  238. ></el-cascader>
  239. <el-cascader
  240. v-else-if="item.scope === 'cascaderDZ'"
  241. v-model="formData[item.prop]"
  242. :options="item.options"
  243. :size="size"
  244. :props="{
  245. label: item.props.label,
  246. value: item.props.value,
  247. checkStrictly: true,
  248. emitPath: false,
  249. }"
  250. clearable
  251. ></el-cascader>
  252. <el-date-picker
  253. v-else-if="item.scope === 'datePicker'"
  254. v-model="formData[item.prop]"
  255. type="datetimerange"
  256. :picker-options="pickerOptions"
  257. range-separator="至"
  258. start-placeholder="开始日期"
  259. end-placeholder="结束日期"
  260. align="right"
  261. :size="size"
  262. value-format="timestamp"
  263. >
  264. </el-date-picker>
  265. <el-date-picker
  266. v-else-if="item.scope === 'datePickerA'"
  267. v-model="formData[item.prop]"
  268. type="datetime"
  269. :size="size"
  270. placeholder="选择日期时间"
  271. value-format="timestamp"
  272. >
  273. </el-date-picker>
  274. <div v-else-if="item.scope === 'moreDataPicker'">
  275. <el-date-picker
  276. v-model="formData[item.prop1]"
  277. type="date"
  278. value-format="timestamp"
  279. :size="size"
  280. :placeholder="item.placeholder1"
  281. @change="change1(item.prop1,item.prop2)"
  282. >
  283. </el-date-picker>
  284. <el-date-picker
  285. style="margin-left:10px;"
  286. v-model="formData[item.prop2]"
  287. type="date"
  288. :size="size"
  289. value-format="timestamp"
  290. :placeholder="item.placeholder2"
  291. @change="change2(item.prop1,item.prop2)"
  292. >
  293. </el-date-picker>
  294. </div>
  295. <el-input
  296. v-else
  297. clearable
  298. v-model="formData[item.prop]"
  299. :placeholder="item.placeholder"
  300. :size="size"
  301. ></el-input>
  302. </el-form-item>
  303. </template>
  304. <el-form-item>
  305. <el-button :size="size" type="primary" @click="search"
  306. >查询</el-button
  307. >
  308. <el-button :size="size" @click="init">重置</el-button>
  309. </el-form-item>
  310. </el-form>
  311. </div>
  312. </div>
  313. </template>
  314. <script>
  315. import { mapGetters } from "vuex";
  316. export default {
  317. props: ["formList", "topType", "formData","shType"], //参考文档 component.md
  318. data() {
  319. return {
  320. lists: [
  321. {
  322. label: "全部",
  323. value: "",
  324. },
  325. {
  326. label: "视频",
  327. value: 1,
  328. },
  329. {
  330. label: "题库",
  331. value: 2,
  332. },
  333. {
  334. label: "补考",
  335. value: 3,
  336. },
  337. {
  338. label: "前培",
  339. value: 4,
  340. },
  341. ],
  342. lists5:[
  343. {
  344. label: "全部",
  345. value: "",
  346. },
  347. {
  348. label: "通过",
  349. value: 1,
  350. },
  351. {
  352. label: "待审核",
  353. value: 2,
  354. },
  355. {
  356. label: "不通过",
  357. value: 3,
  358. }
  359. ],
  360. // classLists: [
  361. // {
  362. // label: "全部",
  363. // value: "",
  364. // },
  365. // {
  366. // label: "二建继教",
  367. // value: 1,
  368. // },
  369. // {
  370. // label: "七大员继教",
  371. // value: 2,
  372. // },
  373. // {
  374. // label: "七大员新考",
  375. // value: 3,
  376. // },
  377. // ],
  378. paperType: [
  379. {
  380. label: "发布",
  381. value: 1,
  382. },
  383. {
  384. label: "未发布",
  385. value: 0,
  386. },
  387. ],
  388. optionsBank: [
  389. {
  390. label: "单选题",
  391. value: 1,
  392. },
  393. {
  394. label: "多选题",
  395. value: 2,
  396. },
  397. {
  398. label: "判断题",
  399. value: 3,
  400. },
  401. {
  402. label: "案例题",
  403. value: 4,
  404. },
  405. {
  406. label: "简答题",
  407. value: 5,
  408. },
  409. ], //题目类型
  410. size: "small", //输入框尺寸类型
  411. // formData: {
  412. // status: "0,1",
  413. // pageSize: this.pageSizes,
  414. // pageNum: this.pageNums,
  415. // }, //表单数据收集
  416. newBusinessLevel: [],
  417. newSchoolList: [],
  418. newProfessional: [],
  419. newSujectType: [],
  420. pickerOptions: {
  421. //日期选择器近期功能
  422. shortcuts: [
  423. {
  424. text: "最近一周",
  425. onClick(picker) {
  426. const end = new Date();
  427. const start = new Date();
  428. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  429. picker.$emit("pick", [start, end]);
  430. },
  431. },
  432. {
  433. text: "最近一个月",
  434. onClick(picker) {
  435. const end = new Date();
  436. const start = new Date();
  437. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  438. picker.$emit("pick", [start, end]);
  439. },
  440. },
  441. {
  442. text: "最近三个月",
  443. onClick(picker) {
  444. const end = new Date();
  445. const start = new Date();
  446. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  447. picker.$emit("pick", [start, end]);
  448. },
  449. },
  450. ],
  451. },
  452. };
  453. },
  454. computed: {
  455. ...mapGetters(["educationType","Professional","examList"]),
  456. },
  457. created() {
  458. var self = this;
  459. // document.onkeydown = function (e) {
  460. // var key = window.event.keyCode;
  461. // if (key === 13) {
  462. // self.search();
  463. // }
  464. // };
  465. },
  466. methods: {
  467. change1(data1,data2){
  468. if(this.formData[data1]){
  469. if(this.formData[data2] && this.formData[data1]>this.formData[data2]){
  470. this.formData[data1] = ''
  471. this.$message.warning("开始时间不能大于结束时间,请重新选择开始时间")
  472. }
  473. }
  474. },
  475. change2(data1,data2){
  476. if(this.formData[data2]){
  477. if(this.formData[data1] && this.formData[data2]<this.formData[data1]){
  478. this.formData[data2] = ''
  479. this.$message.warning("结束时间不能小于开始时间,请重新选择结束时间")
  480. }
  481. }
  482. },
  483. topSearch(status) {
  484. this.formData.goodsType = status;
  485. this.$emit("search", 3);
  486. },
  487. topSearchsh(types) {
  488. this.formData.status = types;
  489. this.$emit("search", 3);
  490. },
  491. // classSearch(status) {
  492. // this.formData.classType = status;
  493. // this.$emit("search", 3);
  494. // },
  495. ifCs(item) {
  496. if (item.scope === "businessLevel" && !this.formData[item.edu]) {
  497. return false;
  498. } else if (item.scope === "schoolList" && !this.formData[item.edu]) {
  499. return false;
  500. } else if (item.scope === "Professional" && !this.formData[item.edu]) {
  501. return false;
  502. } else if (item.scope === "sujectType" && !this.formData[item.edu]) {
  503. return false;
  504. } else {
  505. return true;
  506. }
  507. },
  508. //搜索
  509. search() {
  510. this.$emit("search", 1);
  511. },
  512. //重置
  513. init() {
  514. this.$emit("init");
  515. },
  516. handleChanges(int1, int2) {
  517. if (int1 !== undefined && int2 !== undefined) {
  518. if (int1 > int2) {
  519. this.$message.error("请规范输入取值范围");
  520. }
  521. }
  522. },
  523. changeEducationType(id) {
  524. if (this.formData.businessId) {
  525. this.formData.businessId = "";
  526. }
  527. if (this.formData.schoolId) {
  528. this.formData.schoolId = "";
  529. }
  530. if (this.formData.ProfessionalId) {
  531. this.formData.ProfessionalId = "";
  532. }
  533. if (this.formData.subjectId) {
  534. this.formData.subjectId = "";
  535. }
  536. this.$api
  537. .inquirebusinessList({ status: 1, educationId: id })
  538. .then((res) => {
  539. this.newBusinessLevel = res.rows;
  540. });
  541. this.$api
  542. .inquireUserSchool({ status: 1, educationId: id })
  543. .then((res) => {
  544. this.newSchoolList = res.rows;
  545. });
  546. this.$api
  547. .inquireCourseMajor({ status: 1, educationId: id })
  548. .then((res) => {
  549. this.newProfessional = res.rows;
  550. });
  551. this.$api
  552. .inquireCourseSubject({ status: 1, educationId: id })
  553. .then((res) => {
  554. this.newSujectType = res.rows;
  555. });
  556. console.log(this.newBusinessLevel, this.newSchoolList);
  557. },
  558. changeBusinessLevel(id) {},
  559. },
  560. };
  561. </script>
  562. <style lang="less" scoped>
  563. .fon_s {
  564. font-size: 14px;
  565. color: #6b6b6b;
  566. }
  567. .inputListBox {
  568. display: flex;
  569. align-items: center;
  570. margin-bottom: 12px;
  571. }
  572. .inputListBoxs {
  573. display: flex;
  574. margin-bottom: 12px;
  575. }
  576. .tsxnz {
  577. flex: 1;
  578. /deep/ .el-form-item {
  579. margin-bottom: 0px;
  580. }
  581. }
  582. </style>