ModifySchool.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <template>
  2. <el-dialog
  3. class="modify-school"
  4. :visible.sync="modalIsShow"
  5. :title="title"
  6. top="10vh"
  7. width="640px"
  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="130px"
  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>
  39. <el-checkbox v-model="modalForm.defaultSchool"
  40. >是否默认学校
  41. </el-checkbox>
  42. </el-form-item>
  43. <el-form-item>
  44. <el-checkbox v-model="modalForm.hasPaperNumber"
  45. >学校是否有固定试卷编号
  46. </el-checkbox>
  47. </el-form-item>
  48. <el-form-item prop="logo" label="学校logo:">
  49. <UploadFetchFile
  50. ref="LogoUploadFetchFile"
  51. input-width="300px"
  52. :disabled="isSubmit"
  53. :format="['png', 'jpg']"
  54. @file-change="logoChange"
  55. @valid-change="logoValidChange"
  56. />
  57. <div class="mt-1">
  58. <p class="tips-info">logo会展示在登录页及内页;</p>
  59. <p class="tips-info">
  60. 文件必须是jpg或png格式的图片,不超过2M,推荐尺寸:160*40px。
  61. </p>
  62. </div>
  63. <div class="logo-image" v-if="logoSrc">
  64. <img class="logo-view" :src="logoSrc" alt="logo" />
  65. </div>
  66. </el-form-item>
  67. <el-form-item prop="backgroundImage" label="登录背景:">
  68. <UploadFetchFile
  69. ref="BgUploadFetchFile"
  70. input-width="300px"
  71. :disabled="isSubmit"
  72. :format="['png', 'jpg']"
  73. @file-change="bgChange"
  74. @valid-change="bgValidChange"
  75. />
  76. <div class="mt-1">
  77. <p class="tips-info">背景会展示在登录页;</p>
  78. <p class="tips-info">文件必须是jpg或png格式的图片,不超过2M。</p>
  79. </div>
  80. <div class="logo-image" v-if="bgSrc">
  81. <img class="bg-view" :src="bgSrc" alt="logo" />
  82. </div>
  83. </el-form-item>
  84. <el-form-item prop="examTaskInstr" label="命题任务提示语:">
  85. <el-input
  86. v-model.trim="modalForm.examTaskInstr"
  87. placeholder="请输入"
  88. clearable
  89. ></el-input>
  90. </el-form-item>
  91. </el-form>
  92. <div slot="footer">
  93. <el-button type="danger" @click="cancel" plain>取消</el-button>
  94. <el-button type="primary" :disabled="isSubmit" @click="submit"
  95. >确认</el-button
  96. >
  97. </div>
  98. </el-dialog>
  99. </template>
  100. <script>
  101. import { updateSchool } from "../api";
  102. import UploadFetchFile from "../../../components/UploadFetchFile.vue";
  103. import { password } from "@/plugins/formRules";
  104. const initModalForm = {
  105. id: "",
  106. name: "",
  107. code: "",
  108. logo: "",
  109. logoMd5: "",
  110. backgroundImage: "",
  111. backgroundImageMd5: "",
  112. initPassword: "",
  113. examTaskInstr: "",
  114. defaultSchool: false,
  115. hasPaperNumber: false,
  116. };
  117. export default {
  118. name: "modify-school",
  119. components: { UploadFetchFile },
  120. props: {
  121. instance: {
  122. type: Object,
  123. default() {
  124. return {};
  125. },
  126. },
  127. },
  128. computed: {
  129. isEdit() {
  130. return !!this.instance.id;
  131. },
  132. title() {
  133. return (this.isEdit ? "编辑" : "新增") + "学校";
  134. },
  135. },
  136. data() {
  137. return {
  138. modalIsShow: false,
  139. isSubmit: false,
  140. modalForm: { ...initModalForm },
  141. logoSrc: "",
  142. logoValidInfo: {},
  143. bgSrc: "",
  144. bgValidInfo: {},
  145. rules: {
  146. name: [
  147. {
  148. required: true,
  149. message: "请输入学校名称",
  150. trigger: "change",
  151. },
  152. ],
  153. code: [
  154. {
  155. required: true,
  156. message: "请输入学校代码",
  157. trigger: "change",
  158. },
  159. ],
  160. logo: [
  161. {
  162. validator: (rule, value, callback) => {
  163. if (!this.logoValidInfo.success && this.logoValidInfo.message) {
  164. return callback(new Error(this.logoValidInfo.message));
  165. }
  166. callback();
  167. },
  168. },
  169. ],
  170. backgroundImage: [
  171. {
  172. validator: (rule, value, callback) => {
  173. if (!this.bgValidInfo.success && this.bgValidInfo.message) {
  174. return callback(new Error(this.bgValidInfo.message));
  175. }
  176. callback();
  177. },
  178. },
  179. ],
  180. initPassword: password,
  181. examTaskInstr: [
  182. {
  183. required: false,
  184. max: 100,
  185. message: "内容不超过100字符",
  186. trigger: "change",
  187. },
  188. ],
  189. },
  190. };
  191. },
  192. methods: {
  193. initData(val) {
  194. if (val.id) {
  195. this.modalForm = this.$objAssign(initModalForm, val);
  196. this.logoSrc = val.logo || "";
  197. this.modalForm.logo = "";
  198. this.modalForm.logoMd5 = "";
  199. this.bgSrc = val.backgroundImage || "";
  200. this.modalForm.backgroundImage = "";
  201. this.modalForm.backgroundImageMd5 = "";
  202. } else {
  203. this.logoSrc = "";
  204. this.bgSrc = "";
  205. this.modalForm = { ...initModalForm };
  206. }
  207. this.$refs.modalFormComp.clearValidate();
  208. this.$nextTick(() => {
  209. this.$refs.LogoUploadFetchFile.setAttachmentName("");
  210. this.$refs.BgUploadFetchFile.setAttachmentName("");
  211. });
  212. },
  213. visibleChange() {
  214. this.initData(this.instance);
  215. },
  216. cancel() {
  217. this.modalIsShow = false;
  218. },
  219. open() {
  220. this.modalIsShow = true;
  221. },
  222. logoChange({ file, md5 }) {
  223. let uRl = window.URL || window.webkitURL;
  224. this.logoSrc = uRl.createObjectURL(file);
  225. this.modalForm.logo = file;
  226. this.modalForm.logoMd5 = md5;
  227. },
  228. logoValidChange(res) {
  229. this.logoValidInfo = res;
  230. this.$refs.modalFormComp.validateField("logo", () => {});
  231. },
  232. bgChange({ file, md5 }) {
  233. let uRl = window.URL || window.webkitURL;
  234. this.bgSrc = uRl.createObjectURL(file);
  235. this.modalForm.backgroundImage = file;
  236. this.modalForm.backgroundImageMd5 = md5;
  237. },
  238. bgValidChange(res) {
  239. this.bgValidInfo = res;
  240. this.$refs.modalFormComp.validateField("backgroundImage", () => {});
  241. },
  242. async submit() {
  243. const valid = await this.$refs.modalFormComp.validate();
  244. if (!valid) return;
  245. if (this.isSubmit) return;
  246. this.isSubmit = true;
  247. let datas = { ...this.modalForm };
  248. const data = await updateSchool(datas).catch(() => {
  249. this.isSubmit = false;
  250. });
  251. if (!data) return;
  252. this.isSubmit = false;
  253. this.$message.success(this.title + "成功!");
  254. this.$emit("modified");
  255. this.cancel();
  256. },
  257. },
  258. };
  259. </script>