index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. <template>
  2. <div>
  3. <el-form :inline="true" :model="secondForm">
  4. <el-form-item class="mr10" label="班级:">
  5. <el-input
  6. v-model="secondForm.bjmc"
  7. placeholder="输入班级名称"
  8. clearable
  9. @clear="getHdList"
  10. ></el-input>
  11. </el-form-item>
  12. <el-form-item class="mr10" label="活动类别:">
  13. <el-select
  14. v-model="secondForm.type"
  15. placeholder="请选择类别"
  16. @change="getHdList"
  17. clearable
  18. >
  19. <el-option
  20. v-for="item in typeList"
  21. :key="item.xdbh_id"
  22. :label="item.xdbh_name"
  23. :value="item.xdbh_id"
  24. ></el-option>
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item class="mr10" label="活动时间:">
  28. <el-date-picker
  29. style="width: 100%"
  30. clearable
  31. v-model="secondForm.time"
  32. type="date"
  33. value-format="yyyy-MM-dd"
  34. @change="getHdList"
  35. placeholder="请选择日期"
  36. >
  37. </el-date-picker>
  38. </el-form-item>
  39. <el-form-item class="mr10" label="活动名称:">
  40. <el-input
  41. v-model="secondForm.title"
  42. placeholder="输入活动名称"
  43. clearable
  44. @clear="getHdList"
  45. ></el-input>
  46. </el-form-item>
  47. <el-button class="mb20" type="primary" @click="getHdList">搜索</el-button>
  48. </el-form>
  49. <div>
  50. <el-button type="primary" @click="createNew">发起活动</el-button>
  51. <el-button type="primary" @click="exportAc">导出</el-button>
  52. <el-button
  53. type="danger"
  54. :disabled="multipleSelection.length == 0"
  55. @click="delAc"
  56. >删除</el-button
  57. >
  58. </div>
  59. <el-table
  60. :data="secondTable"
  61. v-loading="loading"
  62. tooltip-effect="dark"
  63. class="mt20"
  64. style="width: 100%"
  65. @selection-change="handleSelectionChange"
  66. >
  67. <el-table-column type="selection" align="center" width="55">
  68. </el-table-column>
  69. <el-table-column
  70. label="班级"
  71. align="left"
  72. prop="xdb_bjmc"
  73. width="200"
  74. ></el-table-column>
  75. <el-table-column label="活动名称" width="auto">
  76. <template slot-scope="scope">
  77. <h3
  78. class="font-size-14 color-2 hand"
  79. @click="toDetail(scope.row.xdb_id)"
  80. >
  81. {{ scope.row.xdb_hdmc }}
  82. </h3>
  83. </template>
  84. </el-table-column>
  85. <el-table-column
  86. label="类别"
  87. width="100"
  88. prop="xdbh_name"
  89. ></el-table-column>
  90. <el-table-column label="活动时间" width="200">
  91. <template v-slot="scope">
  92. {{ scope.row.xdb_hdkssj }} ~ {{ scope.row.xdb_hdjssj }}
  93. </template>
  94. </el-table-column>
  95. <el-table-column label="创建人" prop="xdb_cjr" width="120">
  96. </el-table-column>
  97. <el-table-column label="审核人" prop="xdb_shr" width="120">
  98. </el-table-column>
  99. <el-table-column label="活动状态" width="120">
  100. <template slot-scope="scope">
  101. <span
  102. v-if="
  103. scope.row.xdb_hdzt_option_k == 0 ||
  104. scope.row.xdb_hdzt_option_k == 1
  105. "
  106. class="text-grey"
  107. >未审核</span
  108. >
  109. <span v-if="scope.row.xdb_hdzt_option_k == 2" class="text-green"
  110. >进行中</span
  111. >
  112. <span v-if="scope.row.xdb_hdzt_option_k == 3" class="text-green"
  113. >已结束</span
  114. >
  115. </template>
  116. </el-table-column>
  117. <el-table-column label="活动地点" prop="xdb_hddz" width="auto">
  118. </el-table-column>
  119. <el-table-column label="操作" width="200">
  120. <template slot-scope="scope">
  121. <el-button type="text" @click="signDialogShow(scope.row)"
  122. >报名
  123. </el-button>
  124. <!-- <el-button-->
  125. <!-- :disabled="scope.row.xdb_hdzt_option_k > 1"-->
  126. <!-- type="text"-->
  127. <!-- @click="auditAc(scope.row)"-->
  128. <!-- >审核-->
  129. <!-- </el-button>-->
  130. <el-button type="text" @click="editAc(scope.row)">编辑 </el-button>
  131. <el-button type="text" @click="toDetail(scope.row.xdb_id)"
  132. >详情
  133. </el-button>
  134. </template>
  135. </el-table-column>
  136. </el-table>
  137. <footer
  138. class="flex-item-none"
  139. style="display: flex; justify-content: flex-end; margin-top: 30px"
  140. >
  141. <el-pagination
  142. background
  143. layout="total,prev, pager, next"
  144. :page-size="limit"
  145. :total="total"
  146. :current-page.sync="cur_page"
  147. @current-change="handleCurrentChange"
  148. ></el-pagination>
  149. </footer>
  150. <el-dialog
  151. :title="dialogTitle"
  152. :visible.sync="newDialogShow"
  153. width="750px"
  154. v-loading="loading"
  155. >
  156. <el-form
  157. :model="newForm"
  158. ref="newForm"
  159. :rules="rules"
  160. label-width="100px"
  161. >
  162. <el-form-item label="班级:" prop="xdb_bjmc">
  163. <el-input
  164. v-model="newForm.xdb_bjmc"
  165. placeholder="请输入班级名称"
  166. ></el-input>
  167. </el-form-item>
  168. <el-form-item label="活动名称:" prop="xdb_hdmc">
  169. <el-input
  170. v-model="newForm.xdb_hdmc"
  171. placeholder="请输入活动名称"
  172. ></el-input>
  173. </el-form-item>
  174. <el-form-item label="活动类别:" prop="xdbh">
  175. <el-select
  176. v-model="newForm.xdbh"
  177. filterable
  178. placeholder="请选择活动类别"
  179. style="width: 410px"
  180. >
  181. <el-option
  182. v-for="item in typeList.slice(1)"
  183. :key="item.xdbh_id"
  184. :label="item.xdbh_name"
  185. :value="{ value: item.xdbh_id, label: item.xdbh_name }"
  186. ></el-option>
  187. </el-select>
  188. </el-form-item>
  189. <el-form-item label="活动时间:" prop="xdb_hdsj">
  190. <el-date-picker
  191. style="width: 410px"
  192. v-model="newForm.xdb_hdsj"
  193. type="daterange"
  194. value-format="yyyy-MM-dd"
  195. range-separator="至"
  196. start-placeholder="开始日期"
  197. end-placeholder="结束日期"
  198. >
  199. </el-date-picker>
  200. </el-form-item>
  201. <el-form-item label="活动地址:" prop="xdb_hddz">
  202. <el-input
  203. v-model="newForm.xdb_hddz"
  204. placeholder="请输入活动地址"
  205. ></el-input>
  206. </el-form-item>
  207. <!-- <el-form-item label="审核人:" prop="xdb_shr">-->
  208. <!-- <el-input-->
  209. <!-- v-model="newForm.xdb_shr"-->
  210. <!-- placeholder="请输入审核人"-->
  211. <!-- ></el-input>-->
  212. <!-- </el-form-item>-->
  213. <el-form-item label="活动描述:" prop="xdb_hdms">
  214. <Tinymce
  215. v-if="newDialogShow"
  216. v-model="newForm.xdb_hdms"
  217. :height="300"
  218. :key="timestamp"
  219. ></Tinymce>
  220. </el-form-item>
  221. </el-form>
  222. <div slot="footer">
  223. <el-button @click="newDialogShow = false">取 消</el-button>
  224. <el-button type="primary" @click="newFormSubmit('newForm')"
  225. >确 定</el-button
  226. >
  227. </div>
  228. </el-dialog>
  229. <el-dialog
  230. title="报名"
  231. :visible.sync="signDialogVisible"
  232. width="550px"
  233. v-loading="loading"
  234. >
  235. <el-form
  236. :model="signForm"
  237. ref="signForm"
  238. :rules="rules"
  239. label-width="100px"
  240. >
  241. <el-form-item label="学生姓名:" prop="xdh_xsxm">
  242. <el-input
  243. v-model="signForm.xdh_xsxm"
  244. placeholder="请输入学生姓名"
  245. ></el-input>
  246. </el-form-item>
  247. <el-form-item label="学籍号:" prop="xdh_xsxh">
  248. <el-input
  249. v-model="signForm.xdh_xsxh"
  250. placeholder="请输入学籍号"
  251. ></el-input>
  252. </el-form-item>
  253. <el-form-item label="手机号码:" prop="xdh_sjhm">
  254. <el-input
  255. v-model="signForm.xdh_sjhm"
  256. placeholder="请输入手机号码"
  257. ></el-input>
  258. </el-form-item>
  259. </el-form>
  260. <div slot="footer">
  261. <el-button @click="signDialogVisible = false">取 消</el-button>
  262. <el-button type="primary" @click="signFormSubmit('signForm')"
  263. >确 定</el-button
  264. >
  265. </div>
  266. </el-dialog>
  267. </div>
  268. </template>
  269. <script>
  270. import { hd_list, hdlb_list, hd_add, hd_edit, hd_del, sign_add } from "./api";
  271. import Tinymce from "@/components/Tinymce/index.vue";
  272. import FileUpload from "@/components/FileUpload/index.vue";
  273. import { useUserStore } from "@/stores/user";
  274. const { token, real_name } = useUserStore();
  275. export default {
  276. name: "index",
  277. data() {
  278. return {
  279. limit: 10,
  280. total: 0,
  281. loading: false,
  282. cur_page: 1,
  283. secondForm: {
  284. bjmc: "",
  285. type: "",
  286. title: "",
  287. time: "",
  288. },
  289. gradeList: [
  290. {
  291. label: "六年级一班",
  292. value: 1,
  293. },
  294. {
  295. label: "五年级一班",
  296. value: 2,
  297. },
  298. {
  299. label: "四年级一班",
  300. value: 3,
  301. },
  302. {
  303. label: "三年级一班",
  304. value: 4,
  305. },
  306. ],
  307. secondTable: [],
  308. typeList: [],
  309. multipleSelection: [],
  310. dialogTitle: "",
  311. newDialogShow: false,
  312. newForm: {
  313. xdb_id: "",
  314. xdb_bjmc: "",
  315. xdb_hdmc: "",
  316. xdbh: "",
  317. xdb_hdsj: [],
  318. xdb_cjr: "",
  319. // xdb_shr: '',
  320. xdb_hddz: "",
  321. xdb_hdms: "",
  322. },
  323. rules: {
  324. xdb_bjmc: [
  325. { required: true, message: "请输入班级名称", trigger: "blur" },
  326. ],
  327. xdb_hdmc: [
  328. { required: true, message: "请输入活动名称", trigger: "blur" },
  329. ],
  330. xdbh: [
  331. {
  332. type: "object",
  333. required: true,
  334. message: "请选择审核人",
  335. trigger: "change",
  336. },
  337. ],
  338. xdbh_sfqy: [
  339. { required: true, message: "请选择启用状态", trigger: "change" },
  340. ],
  341. xdb_hdsj: [
  342. { required: true, message: "请选择报名时间", trigger: "blur" },
  343. ],
  344. xdb_hddz: [
  345. { required: true, message: "请输入活动地址", trigger: "blur" },
  346. ],
  347. xdb_hdms: [
  348. { required: true, message: "请输入活动描述", trigger: "blur" },
  349. ],
  350. // xdb_shr:[
  351. // {required: true, message: '请输入审核人', trigger: 'blur'}
  352. // ],
  353. xdh_xsxm: [
  354. { required: true, message: "请输入学生姓名", trigger: "blur" },
  355. ],
  356. xdh_xsxh: [
  357. { required: true, message: "请输入学籍号", trigger: "blur" },
  358. ],
  359. xdh_sjhm: [
  360. { required: true, message: "请输入手机号码", trigger: "blur" },
  361. ],
  362. },
  363. newEdit: false,
  364. signDialogVisible: false,
  365. signForm: {
  366. xdh_xsxm: "",
  367. xdh_xsxh: "",
  368. xdh_sjhm: "",
  369. xdb_id: "",
  370. xdb_hdmc: "",
  371. },
  372. timestamp: Date.now(),
  373. };
  374. },
  375. components: {
  376. Tinymce,
  377. FileUpload,
  378. },
  379. methods: {
  380. getAllActivityType() {
  381. let data = {
  382. page: 1,
  383. limit: 9999,
  384. };
  385. hdlb_list(data).then((res) => {
  386. if (res.code == 1) {
  387. this.typeList = res.data.page_data;
  388. let obj = {
  389. xdbh_id: "",
  390. xdbh_name: "全部",
  391. };
  392. this.typeList.unshift(obj);
  393. }
  394. });
  395. },
  396. getHdList() {
  397. this.loading = true;
  398. let data = {
  399. page: this.cur_page,
  400. limit: this.limit,
  401. keyword: this.secondForm.title,
  402. xdb_bjmc: this.secondForm.bjmc,
  403. xdbh_id: this.secondForm.type,
  404. };
  405. hd_list(data).then((res) => {
  406. this.loading = false;
  407. if (res.code == 1) {
  408. this.secondTable = res.data.page_data;
  409. this.cur_page = Number(res.data.page_now);
  410. this.total = Number(res.data.total_rows);
  411. }
  412. });
  413. },
  414. handleSelectionChange(val) {
  415. this.multipleSelection = val;
  416. },
  417. handleCurrentChange(val) {
  418. this.cur_page = val;
  419. this.getHdList();
  420. },
  421. createNew() {
  422. this.dialogTitle = "发起活动";
  423. this.newEdit = false;
  424. this.newForm = {
  425. xdb_id: "",
  426. xdb_bjmc: "",
  427. xdb_hdmc: "",
  428. xdbh: "",
  429. xdb_hdsj: [],
  430. xdb_cjr: "",
  431. // xdb_shr: '',
  432. xdb_hddz: "",
  433. xdb_hdms: "",
  434. };
  435. this.newDialogShow = true;
  436. },
  437. editAc(item) {
  438. this.dialogTitle = "活动编辑";
  439. this.newEdit = true;
  440. this.newForm = {
  441. xdb_id: item.xdb_id,
  442. xdb_bjmc: item.xdb_bjmc,
  443. xdb_hdmc: item.xdb_hdmc,
  444. xdbh: {
  445. label: item.xdbh_name,
  446. value: item.xdbh_id,
  447. },
  448. xdb_hdsj: [item.xdb_hdkssj, item.xdb_hdjssj],
  449. xdb_cjr: item.xdb_cjr,
  450. // xdb_shr: item.xdb_shr,
  451. xdb_hddz: item.xdb_hddz,
  452. xdb_hdms: item.xdb_hdms,
  453. };
  454. this.newDialogShow = true;
  455. },
  456. newFormSubmit(formName) {
  457. this.$refs[formName].validate((valid) => {
  458. if (valid) {
  459. this.loading = true;
  460. let data = {
  461. xdb_bjmc: this.newForm.xdb_bjmc,
  462. xdb_hdmc: this.newForm.xdb_hdmc,
  463. xdbh_id: this.newForm.xdbh.value,
  464. xdbh_name: this.newForm.xdbh.label,
  465. xdb_hdkssj: this.newForm.xdb_hdsj[0],
  466. xdb_hdjssj: this.newForm.xdb_hdsj[1],
  467. xdb_cjr: real_name,
  468. // xdb_shr: this.newForm.xdb_shr,
  469. xdb_hddz: this.newForm.xdb_hddz,
  470. xdb_hdms: this.newForm.xdb_hdms,
  471. };
  472. if (!this.newEdit) {
  473. hd_add(data).then((res) => {
  474. this.loading = false;
  475. if (res.code == 1) {
  476. this.$message({
  477. message: "活动发起成功!",
  478. type: "success",
  479. });
  480. this.newDialogShow = false;
  481. this.getHdList();
  482. } else {
  483. this.$message({
  484. message: res.msg,
  485. type: "error",
  486. });
  487. }
  488. });
  489. } else {
  490. data.xdb_id = this.newForm.xdb_id;
  491. hd_edit(data).then((res) => {
  492. this.loading = false;
  493. if (res.code == 1) {
  494. this.$message({
  495. message: "活动编辑成功!",
  496. type: "success",
  497. });
  498. this.newDialogShow = false;
  499. this.getHdList();
  500. } else {
  501. this.$message({
  502. message: res.msg,
  503. type: "error",
  504. });
  505. }
  506. });
  507. }
  508. }
  509. });
  510. },
  511. auditAc(item) {
  512. this.loading = true;
  513. let data = {
  514. xdb_id: item.xdb_id,
  515. xdb_hdzt: "2",
  516. };
  517. hd_edit(data).then((res) => {
  518. this.loading = false;
  519. if (res.code == 1) {
  520. this.$message({
  521. message: "审核成功!",
  522. type: "success",
  523. });
  524. this.loading = false;
  525. this.getHdList();
  526. } else {
  527. this.$message({
  528. message: res.msg,
  529. type: "error",
  530. });
  531. }
  532. });
  533. },
  534. signDialogShow(item) {
  535. this.signForm.xdb_id = item.xdb_id;
  536. this.signForm.xdb_hdmc = item.xdb_hdmc;
  537. this.signForm.xdh_xsxm = "";
  538. this.signForm.xdh_xsxh = "";
  539. this.signForm.xdh_sjhm = "";
  540. this.signDialogVisible = true;
  541. },
  542. signFormSubmit(formName) {
  543. this.$refs[formName].validate((valid) => {
  544. if (valid) {
  545. this.loading = true;
  546. let data = {
  547. xdh_xsxm: this.signForm.xdh_xsxm,
  548. xdh_xsxh: this.signForm.xdh_xsxh,
  549. xdh_sjhm: this.signForm.xdh_sjhm,
  550. xdb_id: this.signForm.xdb_id,
  551. xdb_hdmc: this.signForm.xdb_hdmc,
  552. };
  553. sign_add(data).then((res) => {
  554. this.loading = false;
  555. if (res.code == 1) {
  556. this.$message({
  557. message: "活动报名成功!",
  558. type: "success",
  559. });
  560. this.signDialogVisible = false;
  561. this.getHdList();
  562. } else {
  563. this.$message({
  564. message: res.msg,
  565. type: "error",
  566. });
  567. }
  568. });
  569. }
  570. });
  571. },
  572. delAc() {
  573. let del_arr = [];
  574. for (let i in this.multipleSelection) {
  575. del_arr.push(this.multipleSelection[i].xdb_id);
  576. }
  577. this.$confirm("确定要删除这些活动?", "提示", {
  578. confirmButtonText: "确定",
  579. cancelButtonText: "取消",
  580. type: "warning",
  581. })
  582. .then(() => {
  583. let data = {
  584. xdb_id: del_arr,
  585. };
  586. hd_del(data).then((res) => {
  587. if (res.code == 1) {
  588. this.$message({
  589. message: "活动删除成功!",
  590. type: "success",
  591. });
  592. this.getHdList();
  593. } else {
  594. this.$message({
  595. message: res.msg,
  596. type: "error",
  597. });
  598. }
  599. });
  600. })
  601. .catch(() => {});
  602. },
  603. exportAc() {
  604. let exp_arr = [];
  605. for (let i in this.multipleSelection) {
  606. exp_arr.push(this.multipleSelection[i].xdb_id);
  607. }
  608. let link =
  609. window.globalVariables.api +
  610. "/xddy/dygl_bjhd/index?api=xls&page=1&limit=10000&token=" +
  611. token + '&xdb_id=' + exp_arr.join(',');
  612. window.open(link, "_self");
  613. },
  614. toDetail(id) {
  615. this.$router.push({ name: "bjhd_hdlb_hdxq", params: { id: id } });
  616. },
  617. },
  618. mounted() {
  619. this.getAllActivityType();
  620. this.getHdList();
  621. },
  622. };
  623. </script>
  624. <style scoped>
  625. </style>