searchBoxNew.vue 18 KB

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