school_config.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. <template>
  2. <el-container>
  3. <el-main class="el-main-padding">
  4. <el-form
  5. ref="ruleForm"
  6. :model="ruleForm"
  7. :rules="rules"
  8. label-width="200px"
  9. class="demo-ruleForm"
  10. :inline-message="true"
  11. >
  12. <el-form-item v-if="isSuperAdmin" label="学校">
  13. <el-select
  14. v-model="ruleForm.orgId"
  15. placeholder="请选择"
  16. style="width: 180px"
  17. filterable
  18. >
  19. <el-option
  20. v-for="item in rootSchoolSelect"
  21. :key="item.id"
  22. :label="item.name"
  23. :value="item.id"
  24. />
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item
  28. label="使用第三方登录"
  29. prop="STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY"
  30. >
  31. <el-switch
  32. v-model="ruleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY"
  33. on-text="是"
  34. off-text="否"
  35. ></el-switch>
  36. </el-form-item>
  37. <el-form-item
  38. label="第三方登录页地址"
  39. prop="STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL"
  40. >
  41. <el-input
  42. v-model="ruleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL"
  43. :disabled="!ruleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY"
  44. placeholder="请输入第三方登录页地址,以http://或https://开头"
  45. class="input-width"
  46. ></el-input>
  47. </el-form-item>
  48. <el-form-item label="展示我司logo" prop="SHOW_QMTH_LOGO">
  49. <el-switch
  50. v-model="ruleForm.SHOW_QMTH_LOGO"
  51. on-text="是"
  52. off-text="否"
  53. ></el-switch>
  54. </el-form-item>
  55. <el-form-item label="证件号隐私模式" prop="ID_NUMBER_PRIVATE_MODE">
  56. <el-switch
  57. v-model="ruleForm.ID_NUMBER_PRIVATE_MODE"
  58. on-text="是"
  59. off-text="否"
  60. ></el-switch>
  61. </el-form-item>
  62. <el-form-item
  63. label="展示APP下载二维码"
  64. prop="SHOW_STUDENT_CLIENT_APP_QRCODE"
  65. >
  66. <el-switch
  67. v-model="ruleForm.SHOW_STUDENT_CLIENT_APP_QRCODE"
  68. on-text="是"
  69. off-text="否"
  70. ></el-switch>
  71. </el-form-item>
  72. <el-form-item label="开放APP" prop="APP_ENABLED">
  73. <el-switch
  74. v-model="ruleForm.APP_ENABLED"
  75. on-text="是"
  76. off-text="否"
  77. ></el-switch>
  78. </el-form-item>
  79. <el-form-item label="开放微信小程序作答" prop="WEIXIN_ANSWER_ENABLED">
  80. <el-switch
  81. v-model="ruleForm.WEIXIN_ANSWER_ENABLED"
  82. on-text="是"
  83. off-text="否"
  84. ></el-switch>
  85. </el-form-item>
  86. <el-form-item
  87. label="活体检测方案"
  88. prop="IDENTIFICATION_OF_LIVING_BODY_SCHEME"
  89. >
  90. <el-radio-group
  91. v-model="ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME"
  92. class="input"
  93. >
  94. <el-radio label="S1">faceID</el-radio>
  95. <el-radio label="S2">自研活体</el-radio>
  96. </el-radio-group>
  97. </el-form-item>
  98. <el-form-item>
  99. <el-button
  100. :disabled="btnSaveDiabled"
  101. type="primary"
  102. @click="submitForm('ruleForm')"
  103. >保 存</el-button
  104. >
  105. </el-form-item>
  106. </el-form>
  107. </el-main>
  108. </el-container>
  109. </template>
  110. <script>
  111. import { mapState } from "vuex";
  112. import { CORE_API } from "@/constants/constants.js";
  113. export default {
  114. data() {
  115. var validateUrl = (rule, value, callback) => {
  116. var ass = this.ruleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY;
  117. var reg = /^(http:\/\/|https:\/\/){1}.*$/;
  118. if (ass && !value) {
  119. return callback(new Error("请输入第三方登录页地址"));
  120. } else if (ass && !value.match(reg)) {
  121. return callback(new Error("url以http://或https://开头"));
  122. } else {
  123. callback();
  124. }
  125. };
  126. return {
  127. rootOrgList: [],
  128. propertyGroupId: "",
  129. formDataChanged: false,
  130. originalRuleForm: {},
  131. ruleForm: {
  132. relatedPropertyGroupIdList: [],
  133. orgId: null,
  134. STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY: false,
  135. SHOW_STUDENT_CLIENT_APP_QRCODE: false,
  136. STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL: "",
  137. SHOW_QMTH_LOGO: false,
  138. ID_NUMBER_PRIVATE_MODE: false,
  139. APP_ENABLED: false,
  140. WEIXIN_ANSWER_ENABLED: false,
  141. IDENTIFICATION_OF_LIVING_BODY_SCHEME: "",
  142. properties: {
  143. STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY: false,
  144. SHOW_STUDENT_CLIENT_APP_QRCODE: false,
  145. STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL: "",
  146. SHOW_QMTH_LOGO: false,
  147. ID_NUMBER_PRIVATE_MODE: false,
  148. APP_ENABLED: false,
  149. WEIXIN_ANSWER_ENABLED: false,
  150. IDENTIFICATION_OF_LIVING_BODY_SCHEME: "",
  151. },
  152. },
  153. rules: {
  154. STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL: [
  155. {
  156. validator: validateUrl,
  157. trigger: "change",
  158. },
  159. ],
  160. },
  161. };
  162. },
  163. computed: {
  164. ...mapState({ user: (state) => state.user }),
  165. btnSaveDiabled() {
  166. console.log(this.formDataChanged);
  167. return !this.formDataChanged;
  168. },
  169. isSuperAdmin() {
  170. return this.user.roleList.some((role) => role.roleCode == "SUPER_ADMIN");
  171. },
  172. rootSchoolSelect() {
  173. let rootSchools = [];
  174. for (let i = 0; i < this.rootOrgList.length; i++) {
  175. let info = {
  176. name: this.rootOrgList[i].name + "(" + this.rootOrgList[i].id + ")",
  177. id: this.rootOrgList[i].id,
  178. };
  179. rootSchools.push(info);
  180. }
  181. return rootSchools;
  182. },
  183. },
  184. watch: {
  185. "ruleForm.orgId": {
  186. handler: function () {
  187. this.initForm();
  188. },
  189. },
  190. "ruleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY": {
  191. handler: function (val) {
  192. this.$refs["ruleForm"].validate();
  193. if (!val) {
  194. this.ruleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL = "";
  195. }
  196. },
  197. },
  198. ruleForm: {
  199. deep: true,
  200. handler: function (newForm) {
  201. if (Object.keys(this.originalRuleForm).length > 0) {
  202. this.formDataChanged = !(
  203. newForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY ==
  204. this.originalRuleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY &&
  205. newForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL ==
  206. this.originalRuleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL &&
  207. newForm.SHOW_QMTH_LOGO == this.originalRuleForm.SHOW_QMTH_LOGO &&
  208. newForm.ID_NUMBER_PRIVATE_MODE ==
  209. this.originalRuleForm.ID_NUMBER_PRIVATE_MODE &&
  210. newForm.APP_ENABLED == this.originalRuleForm.APP_ENABLED &&
  211. newForm.WEIXIN_ANSWER_ENABLED ==
  212. this.originalRuleForm.WEIXIN_ANSWER_ENABLED &&
  213. newForm.SHOW_STUDENT_CLIENT_APP_QRCODE ==
  214. this.originalRuleForm.SHOW_STUDENT_CLIENT_APP_QRCODE &&
  215. newForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME ==
  216. this.originalRuleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME
  217. );
  218. } else {
  219. this.formDataChanged = false;
  220. }
  221. },
  222. },
  223. },
  224. created() {
  225. this.ruleForm.orgId = this.user.rootOrgId;
  226. this.propertyGroupId = "config4Edit1";
  227. if (this.isSuperAdmin) {
  228. this.$httpWithMsg
  229. .get(CORE_API + "/org/getRootOrgList")
  230. .then((response) => {
  231. this.rootOrgList = response.data;
  232. });
  233. }
  234. this.initForm();
  235. },
  236. methods: {
  237. submitForm(formName) {
  238. this.$refs[formName].validate((valid) => {
  239. if (valid) {
  240. this.ruleForm.properties.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY = this.ruleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY;
  241. this.ruleForm.properties.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL = this.ruleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL;
  242. this.ruleForm.properties.SHOW_QMTH_LOGO = this.ruleForm.SHOW_QMTH_LOGO;
  243. this.ruleForm.properties.ID_NUMBER_PRIVATE_MODE = this.ruleForm.ID_NUMBER_PRIVATE_MODE;
  244. this.ruleForm.properties.APP_ENABLED = this.ruleForm.APP_ENABLED;
  245. this.ruleForm.properties.WEIXIN_ANSWER_ENABLED = this.ruleForm.WEIXIN_ANSWER_ENABLED;
  246. this.ruleForm.properties.SHOW_STUDENT_CLIENT_APP_QRCODE = this.ruleForm.SHOW_STUDENT_CLIENT_APP_QRCODE;
  247. this.ruleForm.properties.IDENTIFICATION_OF_LIVING_BODY_SCHEME = this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME;
  248. this.$httpWithMsg
  249. .put(CORE_API + "/org/saveOrgProperties", this.ruleForm)
  250. .then(
  251. () => {
  252. this.$notify({
  253. message: "保存成功",
  254. type: "success",
  255. });
  256. this.originalRuleForm = Object.assign({}, this.ruleForm);
  257. this.formDataChanged = false;
  258. },
  259. () => {}
  260. );
  261. } else {
  262. return false;
  263. }
  264. });
  265. },
  266. initForm() {
  267. this.ruleForm.relatedPropertyGroupIdList = ["studentClientConfig"];
  268. var url =
  269. CORE_API +
  270. "/org/getOrgPropertiesByGroupWithoutCache/" +
  271. this.ruleForm.orgId +
  272. "/" +
  273. this.propertyGroupId;
  274. this.$httpWithMsg.get(url).then((response) => {
  275. if (response) {
  276. this.ruleForm.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY =
  277. response.data.STUDENT_CLIENT_ACCESS_FROM_THIRD_PARTY == "true";
  278. this.ruleForm.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL =
  279. response.data.STUDENT_CLIENT_THIRD_PARTY_LOGIN_URL;
  280. this.ruleForm.SHOW_QMTH_LOGO = response.data.SHOW_QMTH_LOGO == "true";
  281. this.ruleForm.ID_NUMBER_PRIVATE_MODE =
  282. response.data.ID_NUMBER_PRIVATE_MODE == "true";
  283. this.ruleForm.APP_ENABLED = response.data.APP_ENABLED == "true";
  284. this.ruleForm.WEIXIN_ANSWER_ENABLED =
  285. response.data.WEIXIN_ANSWER_ENABLED == "true";
  286. this.ruleForm.SHOW_STUDENT_CLIENT_APP_QRCODE =
  287. response.data.SHOW_STUDENT_CLIENT_APP_QRCODE == "true";
  288. this.ruleForm.IDENTIFICATION_OF_LIVING_BODY_SCHEME =
  289. response.data.IDENTIFICATION_OF_LIVING_BODY_SCHEME;
  290. this.originalRuleForm = Object.assign({}, this.ruleForm);
  291. } else {
  292. this.$notify({
  293. message: "学校设置信息暂未初始化,请立即初始化",
  294. type: "warning",
  295. });
  296. }
  297. });
  298. },
  299. },
  300. };
  301. </script>
  302. <style scoped>
  303. .input-width {
  304. width: 638px;
  305. }
  306. </style>