index.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. <template>
  2. <div class="app-container public-config-page">
  3. <el-form :model="form" ref="form" :inline="true" :rules="rules" label-width="160px">
  4. <div class="title-box">
  5. <p>基本信息</p>
  6. </div>
  7. <div class="form-max-box">
  8. <el-form-item label="学校名称:" prop="schoolName">
  9. <el-input
  10. v-model="form.schoolName"
  11. maxLength="20"
  12. placeholder="请输入学校名称"
  13. />
  14. </el-form-item>
  15. <el-form-item label="圆形Logo:" prop="circularLogo">
  16. <el-upload
  17. class="certificate-avatar-uploader"
  18. :action="uploadImgUrl"
  19. :show-file-list="false"
  20. accept="image/jpeg,image/gif,image/png"
  21. :on-success="(res)=>handleAvatarSuccess(res,'circularLogo')"
  22. :headers="headers"
  23. :before-upload="beforeAvatarUpload">
  24. <img v-if="form.circularLogo" :src="form.circularLogo" class="avatar" style="height:80px;width:80px;">
  25. <i v-if="!form.circularLogo" class="el-icon-plus avatar-uploader-icon"></i>
  26. </el-upload>
  27. <i v-if="form.circularLogo" class="el-icon-view" @click="lookImg(form.circularLogo)"
  28. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  29. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  30. </el-form-item>
  31. <el-form-item label="长方形Logo:" prop="rectangleLogo">
  32. <el-upload
  33. class="certificate-avatar-uploader"
  34. :action="uploadImgUrl"
  35. :show-file-list="false"
  36. accept="image/jpeg,image/gif,image/png"
  37. :on-success="(res)=>handleAvatarSuccess(res,'rectangleLogo')"
  38. :headers="headers"
  39. :before-upload="beforeAvatarUpload">
  40. <img v-if="form.rectangleLogo" :src="form.rectangleLogo" class="avatar" style="height:80px;width:80px;">
  41. <i v-if="!form.rectangleLogo" class="el-icon-plus avatar-uploader-icon"></i>
  42. </el-upload>
  43. <i v-if="form.rectangleLogo" class="el-icon-view" @click="lookImg(form.rectangleLogo)"
  44. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  45. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  46. </el-form-item>
  47. </div>
  48. <div class="title-box">
  49. <p>一体机</p>
  50. </div>
  51. <div class="form-max-box">
  52. <el-form-item label="签到/离开示意图:" prop="signMap">
  53. <el-upload
  54. class="certificate-avatar-uploader"
  55. :action="uploadImgUrl"
  56. :show-file-list="false"
  57. accept="image/jpeg,image/gif,image/png"
  58. :on-success="(res)=>handleAvatarSuccess(res,'signMap')"
  59. :headers="headers"
  60. :before-upload="beforeAvatarUpload">
  61. <img v-if="form.signMap" :src="form.signMap" class="avatar" style="height:80px;width:80px;">
  62. <i v-if="!form.signMap" class="el-icon-plus avatar-uploader-icon"></i>
  63. </el-upload>
  64. <i v-if="form.signMap" class="el-icon-view" @click="lookImg(form.signMap)"
  65. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  66. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  67. </el-form-item>
  68. <el-form-item label="视频封面:" prop="videoCover">
  69. <el-upload
  70. class="certificate-avatar-uploader"
  71. :action="uploadImgUrl"
  72. :show-file-list="false"
  73. accept="image/jpeg,image/gif,image/png"
  74. :on-success="(res)=>handleAvatarSuccess(res,'videoCover')"
  75. :headers="headers"
  76. :before-upload="beforeAvatarUpload">
  77. <img v-if="form.videoCover" :src="form.videoCover" class="avatar" style="height:80px;width:80px;">
  78. <i v-if="!form.videoCover" class="el-icon-plus avatar-uploader-icon"></i>
  79. </el-upload>
  80. <i v-if="form.videoCover" class="el-icon-view" @click="lookImg(form.videoCover)"
  81. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  82. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  83. </el-form-item>
  84. <el-form-item label="操作指南:" prop="operationGuide">
  85. <el-upload
  86. class="certificate-avatar-uploader"
  87. :action="uploadImgUrl"
  88. :show-file-list="false"
  89. accept="image/jpeg,image/gif,image/png"
  90. :on-success="(res)=>handleAvatarSuccess(res,'operationGuide')"
  91. :headers="headers"
  92. :before-upload="beforeAvatarUpload">
  93. <img v-if="form.operationGuide" :src="form.operationGuide" class="avatar" style="height:80px;width:80px;">
  94. <i v-if="!form.operationGuide" class="el-icon-plus avatar-uploader-icon"></i>
  95. </el-upload>
  96. <i v-if="form.operationGuide" class="el-icon-view" @click="lookImg(form.operationGuide)"
  97. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  98. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  99. </el-form-item>
  100. </div>
  101. <div class="title-box">
  102. <p>小程序</p>
  103. </div>
  104. <div class="form-max-box">
  105. <el-form-item label="登录页banner:" prop="loginBanner">
  106. <el-upload
  107. class="certificate-avatar-uploader"
  108. :action="uploadImgUrl"
  109. :show-file-list="false"
  110. accept="image/jpeg,image/gif,image/png"
  111. :on-success="(res)=>handleAvatarSuccess(res,'loginBanner')"
  112. :headers="headers"
  113. :before-upload="beforeAvatarUpload">
  114. <img v-if="form.loginBanner" :src="form.loginBanner" class="avatar" style="height:80px;width:80px;">
  115. <i v-if="!form.loginBanner" class="el-icon-plus avatar-uploader-icon"></i>
  116. </el-upload>
  117. <i v-if="form.loginBanner" class="el-icon-view" @click="lookImg(form.loginBanner)"
  118. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  119. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  120. </el-form-item>
  121. <el-form-item label="首页banner:" prop="homepageBanner">
  122. <el-upload
  123. class="certificate-avatar-uploader"
  124. :action="uploadImgUrl"
  125. :show-file-list="false"
  126. accept="image/jpeg,image/gif,image/png"
  127. :on-success="(res)=>handleAvatarSuccess(res,'homepageBanner')"
  128. :headers="headers"
  129. :before-upload="beforeAvatarUpload">
  130. <img v-if="form.homepageBanner" :src="form.homepageBanner" class="avatar" style="height:80px;width:80px;">
  131. <i v-if="!form.homepageBanner" class="el-icon-plus avatar-uploader-icon"></i>
  132. </el-upload>
  133. <i v-if="form.homepageBanner" class="el-icon-view" @click="lookImg(form.homepageBanner)"
  134. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  135. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  136. </el-form-item>
  137. </div>
  138. <div class="title-box">
  139. <p>化学品智能终端</p>
  140. </div>
  141. <div class="form-max-box">
  142. <el-form-item label="使用身份配置" prop="userType">
  143. <el-checkbox-group v-model="form.userType">
  144. <el-checkbox style="margin:4px 87px 0 20px;" label="11">教职工</el-checkbox>
  145. <el-checkbox label="22">学生</el-checkbox>
  146. </el-checkbox-group>
  147. <!--<el-radio-group v-model="form.userType">-->
  148. <!--<el-radio style="margin:4px 28px 0 20px;" label="-1">全部</el-radio>-->
  149. <!--<el-radio style="margin:4px 30px 0 0;" label="11">教职工</el-radio>-->
  150. <!--<el-radio label="22">学生</el-radio>-->
  151. <!--</el-radio-group>-->
  152. <!--<el-select v-model="form.userType" placeholder="请配置使用身份" style="width:200px;">-->
  153. <!--<el-option label="全部" value="-1" />-->
  154. <!--<el-option label="教职工" value="11" />-->
  155. <!--<el-option label="学生" value="22" />-->
  156. <!--</el-select>-->
  157. </el-form-item>
  158. </div>
  159. <div class="form-max-box">
  160. <el-form-item label="扩展配置" prop="expandType">
  161. <el-checkbox-group v-model="form.expandType">
  162. <el-checkbox style="margin:4px 30px 0 20px;" label="11">化学品柜智能锁</el-checkbox>
  163. <el-checkbox label="22">气瓶标签</el-checkbox>
  164. </el-checkbox-group>
  165. </el-form-item>
  166. </div>
  167. <!--<div class="form-max-box">-->
  168. <!--<el-form-item label="智能锁配置" prop="smartLock">-->
  169. <!--<el-radio-group v-model="form.smartLock">-->
  170. <!--<el-radio style="margin:4px 40px 0 20px;" :label="1">有</el-radio>-->
  171. <!--<el-radio :label="0">无</el-radio>-->
  172. <!--</el-radio-group>-->
  173. <!--&lt;!&ndash;<el-select v-model="form.smartLock" placeholder="请配置智能锁" style="width:200px;">&ndash;&gt;-->
  174. <!--&lt;!&ndash;<el-option label="有" :value="1" />&ndash;&gt;-->
  175. <!--&lt;!&ndash;<el-option label="无" :value="0" />&ndash;&gt;-->
  176. <!--&lt;!&ndash;</el-select>&ndash;&gt;-->
  177. <!--</el-form-item>-->
  178. <!--</div>-->
  179. <!--<div class="form-max-box">-->
  180. <!--<el-form-item label="气瓶标签配置" prop="airBottle">-->
  181. <!--<el-radio-group v-model="form.airBottle">-->
  182. <!--<el-radio style="margin:4px 40px 0 20px;" :label="1">有</el-radio>-->
  183. <!--<el-radio :label="0">无</el-radio>-->
  184. <!--</el-radio-group>-->
  185. <!--&lt;!&ndash;<el-select v-model="form.airBottle" placeholder="请配置气瓶标签" style="width:200px;">&ndash;&gt;-->
  186. <!--&lt;!&ndash;<el-option label="有" :value="1" />&ndash;&gt;-->
  187. <!--&lt;!&ndash;<el-option label="无" :value="0" />&ndash;&gt;-->
  188. <!--&lt;!&ndash;</el-select>&ndash;&gt;-->
  189. <!--</el-form-item>-->
  190. <!--</div>-->
  191. </el-form>
  192. <p class="inquire-button-one" style="margin:60px auto 60px;display: block" @click="submitForm">保存</p>
  193. <!--查看图片-->
  194. <el-dialog title="查看" :visible.sync="imgOpen" width="1200px" append-to-body>
  195. <div class="scrollbar-box" style="width:1160px;margin:0 auto;max-height:700px;overflow-y: scroll">
  196. <img :src="imgUrl" style="display:block;max-width:1160px;margin:0 auto">
  197. </div>
  198. </el-dialog>
  199. </div>
  200. </template>
  201. <script>
  202. import { getToken } from "@/utils/auth";
  203. import { getLogoInfo,updateLogoInfo } from "@/api/system/publicConfig";
  204. import store from '@/store'
  205. export default {
  206. name: "publicConfig",
  207. data() {
  208. return {
  209. uploadImgUrl: window.location.href.split('://')[0]+'://' + process.env.VUE_APP_BASE_API + "/file/upload", // 上传的图片服务器地址
  210. headers: {
  211. Authorization: "Bearer " + getToken(),
  212. },
  213. form:{
  214. userType:[],
  215. expandType:[]
  216. },
  217. rules: {
  218. schoolName: [
  219. { required: true, message: "学校名称不能为空", trigger: "blur" },
  220. { required: true, message: "学校名称不能为空", validator: this.spaceJudgment, trigger: "blur" }
  221. ],
  222. circularLogo: [
  223. { required: true, message: "圆形Logo不能为空", trigger: "blur" }
  224. ],
  225. rectangleLogo: [
  226. { required: true, message: "长方形Logo不能为空", trigger: "blur" }
  227. ],
  228. signMap: [
  229. { required: true, message: "签到/离开示意图不能为空", trigger: "blur" }
  230. ],
  231. videoCover: [
  232. { required: true, message: "视频封面不能为空", trigger: "blur" }
  233. ],
  234. operationGuide: [
  235. { required: true, message: "操作指南不能为空", trigger: "blur" }
  236. ],
  237. loginBanner: [
  238. { required: true, message: "登录页banner不能为空", trigger: "blur" }
  239. ],
  240. homepageBanner: [
  241. { required: true, message: "首页banner不能为空", trigger: "blur" }
  242. ],
  243. userType: [
  244. { required: true, message: "请配置使用身份", trigger: "blur" }
  245. ],
  246. smartLock: [
  247. { required: true, message: "请配置智能锁", trigger: "blur" }
  248. ],
  249. airBottle: [
  250. { required: true, message: "请配置气瓶标签", trigger: "blur" }
  251. ],
  252. expandType: [
  253. { required: true, message: "请配置扩展配置", trigger: "blur" }
  254. ]
  255. },
  256. imgUrl:"",
  257. imgOpen:false,
  258. };
  259. },
  260. created() {
  261. },
  262. mounted(){
  263. this.getLogoInfo();
  264. },
  265. methods: {
  266. /** 提交按钮 */
  267. submitForm: function() {
  268. let self = this;
  269. this.$refs["form"].validate(valid => {
  270. if (valid) {
  271. let obj = {
  272. schoolName:this.form.schoolName,
  273. circularLogo:this.form.circularLogo,
  274. rectangleLogo:this.form.rectangleLogo,
  275. signMap:this.form.signMap,
  276. videoCover:this.form.videoCover,
  277. operationGuide:this.form.operationGuide,
  278. loginBanner:this.form.loginBanner,
  279. homepageBanner:this.form.homepageBanner,
  280. smartLock:0,
  281. airBottle:0,
  282. }
  283. //判断使用身份配置
  284. if(self.form.userType[1]){
  285. obj.userType = '-1';
  286. }else{
  287. if(self.form.userType[0] == '11'){
  288. obj.userType = '11';
  289. }else if(self.form.userType[0] == '22'){
  290. obj.userType = '22';
  291. }
  292. }
  293. //判断扩展配置(智能锁配置/气瓶标签配置)
  294. for(let i=0;i<self.form.expandType.length;i++){
  295. if(self.form.expandType[i] == '11'){
  296. obj.smartLock = 1;
  297. }else if(self.form.expandType[i] == '22'){
  298. obj.airBottle = 1;
  299. }
  300. }
  301. updateLogoInfo(obj).then(response => {
  302. this.msgSuccess(response.msg);
  303. this.getLogoInfo();
  304. });
  305. }
  306. });
  307. },
  308. //查看图片
  309. lookImg(url){
  310. this.imgUrl = url;
  311. this.imgOpen = true;
  312. },
  313. //获取数据
  314. getLogoInfo(){
  315. getLogoInfo().then(response => {
  316. store.dispatch('settings/setSmartAlarmType', response.data.smartLock)
  317. localStorage.setItem('setSmartAlarmType',response.data.smartLock)
  318. localStorage.setItem('circularLogo',response.data.circularLogo)
  319. localStorage.setItem('rectangleLogo',response.data.rectangleLogo)
  320. localStorage.setItem('videoCover',response.data.videoCover)
  321. //判断使用身份配置
  322. let listOne = [];
  323. if(response.data.userType == -1){
  324. listOne.push('11')
  325. listOne.push('22')
  326. }else if(response.data.userType == 11){
  327. listOne.push('11')
  328. }else if(response.data.userType == 22){
  329. listOne.push('22')
  330. }
  331. this.$set(response.data,'userType',listOne);
  332. //判断扩展配置
  333. let listTwo = [];
  334. if(response.data.smartLock == 1){
  335. listTwo.push('11')
  336. }
  337. if(response.data.airBottle == 1){
  338. listTwo.push('22')
  339. }
  340. this.$set(response.data,'expandType',listTwo);
  341. this.$set(this,'form',response.data)
  342. });
  343. },
  344. //上传
  345. handleAvatarSuccess(res,type) {
  346. if(type == 'circularLogo'){
  347. this.$set(this.form,'circularLogo',res.data.url);
  348. }else if(type == 'rectangleLogo'){
  349. this.$set(this.form,'rectangleLogo',res.data.url);
  350. }else if(type == 'signMap'){
  351. this.$set(this.form,'signMap',res.data.url);
  352. }else if(type == 'videoCover'){
  353. this.$set(this.form,'videoCover',res.data.url);
  354. }else if(type == 'operationGuide'){
  355. this.$set(this.form,'operationGuide',res.data.url);
  356. }else if(type == 'loginBanner'){
  357. this.$set(this.form,'loginBanner',res.data.url);
  358. }else if(type == 'homepageBanner'){
  359. this.$set(this.form,'homepageBanner',res.data.url);
  360. }
  361. this.$forceUpdate()
  362. },
  363. beforeAvatarUpload(file) {
  364. let type = false;
  365. console.log('file',file);
  366. if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/gif') {
  367. type = true;
  368. }else{
  369. this.$message.error('只能上传png/jpeg/gif格式图片');
  370. type = false;
  371. }
  372. return type;
  373. },
  374. },
  375. };
  376. </script>
  377. <style scoped lang="scss">
  378. .public-config-page{
  379. *{
  380. margin:0;
  381. }
  382. .title-box{
  383. border-bottom:1px solid #dedede;
  384. p{
  385. margin-left:40px;
  386. color:#0045af;
  387. line-height:60px;
  388. }
  389. }
  390. .form-max-box{
  391. margin-top:20px;
  392. }
  393. }
  394. </style>