ModifySchool.vue 9.4 KB

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