ModifySchool.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <el-dialog
  3. class="modify-school"
  4. :visible.sync="modalIsShow"
  5. :title="title"
  6. top="10vh"
  7. width="600px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. @opened="visibleChange"
  12. >
  13. <el-form
  14. ref="modalFormComp"
  15. :model="modalForm"
  16. :rules="rules"
  17. :key="modalForm.id"
  18. label-width="100px"
  19. >
  20. <el-form-item prop="code" label="学校代码:">
  21. {{ modalForm.code }}
  22. </el-form-item>
  23. <el-form-item prop="name" label="学校名称:">
  24. <!-- <el-input
  25. v-model.trim="modalForm.name"
  26. placeholder="请输入名称"
  27. clearable
  28. ></el-input> -->
  29. {{ modalForm.name }}
  30. </el-form-item>
  31. <el-form-item prop="initPassword" label="用户初始密码:">
  32. <el-input
  33. v-model.trim="modalForm.initPassword"
  34. placeholder="请输入密码"
  35. clearable
  36. ></el-input>
  37. </el-form-item>
  38. <el-form-item prop="logo" label="学校logo:">
  39. <UploadFetchFile
  40. ref="UploadFetchFile"
  41. input-width="340px"
  42. :disabled="isSubmit"
  43. :format="['png', 'jpg']"
  44. @file-change="logoChange"
  45. @valid-change="validChange"
  46. />
  47. <div class="mt-1">
  48. <p class="tips-info">logo会展示在登录页及内页;</p>
  49. <p class="tips-info">
  50. 文件必须是 jpg 或 png 格式的图片,不超过 2M 尺寸:160*40px。
  51. </p>
  52. </div>
  53. <div class="logo-image" v-if="imgSrc">
  54. <img class="logo-view" :src="imgSrc" alt="logo" />
  55. </div>
  56. </el-form-item>
  57. </el-form>
  58. <div slot="footer">
  59. <el-button type="danger" @click="cancel" plain>取消</el-button>
  60. <el-button type="primary" :disabled="isSubmit" @click="submit"
  61. >确认</el-button
  62. >
  63. </div>
  64. </el-dialog>
  65. </template>
  66. <script>
  67. import { updateSchool } from "../api";
  68. import UploadFetchFile from "../../../components/UploadFetchFile.vue";
  69. import { password } from "@/plugins/formRules";
  70. const initModalForm = {
  71. id: "",
  72. name: "",
  73. code: "",
  74. logo: "",
  75. logoMd5: "",
  76. initPassword: "",
  77. };
  78. export default {
  79. name: "modify-school",
  80. components: { UploadFetchFile },
  81. props: {
  82. instance: {
  83. type: Object,
  84. default() {
  85. return {};
  86. },
  87. },
  88. },
  89. computed: {
  90. isEdit() {
  91. return !!this.instance.id;
  92. },
  93. title() {
  94. return (this.isEdit ? "编辑" : "新增") + "学校";
  95. },
  96. },
  97. data() {
  98. return {
  99. modalIsShow: false,
  100. isSubmit: false,
  101. modalForm: { ...initModalForm },
  102. imgSrc: "",
  103. logoValidInfo: {},
  104. rules: {
  105. name: [
  106. {
  107. required: true,
  108. message: "请输入学校名称",
  109. trigger: "change",
  110. },
  111. ],
  112. code: [
  113. {
  114. required: true,
  115. message: "请输入学校代码",
  116. trigger: "change",
  117. },
  118. ],
  119. logo: [
  120. {
  121. validator: (rule, value, callback) => {
  122. if (!this.logoValidInfo.success && this.logoValidInfo.message) {
  123. return callback(new Error(this.logoValidInfo.message));
  124. }
  125. callback();
  126. },
  127. },
  128. ],
  129. initPassword: password,
  130. },
  131. };
  132. },
  133. methods: {
  134. initData(val) {
  135. if (val.id) {
  136. this.modalForm = this.$objAssign(initModalForm, val);
  137. this.imgSrc = val.logo || "";
  138. this.modalForm.logo = "";
  139. this.modalForm.logoMd5 = "";
  140. } else {
  141. this.imgSrc = "";
  142. this.modalForm = { ...initModalForm };
  143. }
  144. this.$refs.modalFormComp.clearValidate();
  145. this.$nextTick(() => {
  146. this.$refs.UploadFetchFile.setAttachmentName("");
  147. });
  148. },
  149. visibleChange() {
  150. this.initData(this.instance);
  151. },
  152. cancel() {
  153. this.modalIsShow = false;
  154. },
  155. open() {
  156. this.modalIsShow = true;
  157. },
  158. logoChange({ file, md5 }) {
  159. let uRl = window.URL || window.webkitURL;
  160. this.imgSrc = uRl.createObjectURL(file);
  161. this.modalForm.logo = file;
  162. this.modalForm.logoMd5 = md5;
  163. },
  164. validChange(res) {
  165. this.logoValidInfo = res;
  166. this.$refs.modalFormComp.validateField("logo", () => {});
  167. },
  168. async submit() {
  169. const valid = await this.$refs.modalFormComp.validate();
  170. if (!valid) return;
  171. if (this.isSubmit) return;
  172. this.isSubmit = true;
  173. let datas = { ...this.modalForm };
  174. const data = await updateSchool(datas).catch(() => {
  175. this.isSubmit = false;
  176. });
  177. if (!data) return;
  178. this.isSubmit = false;
  179. this.$message.success(this.title + "成功!");
  180. this.$emit("modified");
  181. this.cancel();
  182. },
  183. },
  184. };
  185. </script>