detail.vue 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <template>
  2. <div id="detail">
  3. <detail-frame :title="pageTitle" returns="./index">
  4. <data-form :data="info" :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew">
  5. <template #radios="{item}">
  6. <template v-if="item.model === 'hascar'">
  7. <el-radio label="0">否</el-radio>
  8. <el-radio label="1">是</el-radio>
  9. </template>
  10. </template>
  11. </data-form>
  12. </detail-frame>
  13. </div>
  14. </template>
  15. <script>
  16. import detailFrame from '@frame/layout/admin/detail-frame';
  17. import dataForm from '@frame/components/form';
  18. import { mapState, createNamespacedHelpers } from 'vuex';
  19. const { mapActions: school } = createNamespacedHelpers('school');
  20. export default {
  21. name: 'detail',
  22. props: {},
  23. components: { detailFrame, dataForm },
  24. data: () => {
  25. return {
  26. info: {},
  27. fields: [
  28. { label: '学校名称', required: true, model: 'name' },
  29. { label: '学校代码', required: true, model: 'code' },
  30. { label: '学校地点', required: true, model: 'place' },
  31. { label: '学校简称', required: true, model: 'shortname' },
  32. { label: '每期人数', required: true, model: 'number', type: 'number' },
  33. { label: '是否派车', required: true, model: 'hascar', type: 'radio' },
  34. ],
  35. rules: {
  36. name: [{ required: true, message: '请输入学校名称' }],
  37. code: [{ required: true, message: '请输入学校代码' }],
  38. place: [{ required: true, message: '请选择学校地点' }],
  39. shortname: [{ required: true, message: '请输入学校简称' }],
  40. number: [{ required: true, message: '请输入每期人数' }],
  41. hascar: [{ required: true, message: '请选择是否派车' }],
  42. },
  43. };
  44. },
  45. created() {},
  46. methods: {
  47. ...school(['fetch', 'update']),
  48. async search() {
  49. const res = await this.fetch(this.id);
  50. if (this.$checkRes(res)) this.$set(this, `info`, res.data);
  51. this.loading = false;
  52. },
  53. async handleSave({ isNew, data }) {
  54. let res;
  55. let msg;
  56. if (!data.hascar) data.hascar = '0';
  57. if (isNew) {
  58. res = await this.create(data);
  59. msg = `${this.keyWord}添加成功`;
  60. } else {
  61. res = await this.update(data);
  62. msg = `${this.keyWord}修改成功`;
  63. }
  64. if (this.$checkRes(res, msg)) this.$router.push({ path: '/dept/index' });
  65. },
  66. },
  67. computed: {
  68. ...mapState(['user']),
  69. id() {
  70. return this.$route.query.id;
  71. },
  72. isNew() {
  73. return this.$route.query.id ? false : true;
  74. },
  75. pageTitle() {
  76. return `${this.$route.meta.title}`;
  77. },
  78. },
  79. watch: {
  80. isNew: {
  81. immediate: true,
  82. handler(val) {
  83. if (val) this.loading = false;
  84. else this.search();
  85. },
  86. },
  87. },
  88. metaInfo() {
  89. return { title: this.$route.meta.title };
  90. },
  91. };
  92. </script>
  93. <style lang="less" scoped></style>