integrationConfig.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <!--一体机配置-->
  2. <template>
  3. <div class="public-config-page integrationConfig">
  4. <el-form class="public-form-box scrollbar-box" :model="form" ref="form" :inline="true" :rules="rules" label-width="160px">
  5. <div class="form-max-box">
  6. <el-form-item label="信息牌模块:" prop="isStart">
  7. <el-radio-group v-model="form.isStart" style="margin-top:4px;">
  8. <el-radio :label="1" style="margin-right:30px;">启用</el-radio>
  9. <el-radio :label="0">停用</el-radio>
  10. </el-radio-group>
  11. </el-form-item>
  12. </div>
  13. <div class="form-max-box">
  14. <el-form-item label="物联控制权限:" prop="lotControl">
  15. <el-checkbox-group v-model="form.lotControl">
  16. <el-checkbox v-for="item in citiesList" :label="item.id" :key="item.id" style="margin-right:20px;margin-top:2px;">{{item.name}}</el-checkbox>
  17. </el-checkbox-group>
  18. </el-form-item>
  19. </div>
  20. <div class="form-max-box">
  21. <el-form-item class="time-input-box" label="自动返回时间:" prop="returnTime">
  22. <el-input-number :controls="false" :min="30" :max="600" placeholder="请输入内容" v-model="form.returnTime" style="width:500px;"/>
  23. <span>秒</span>
  24. </el-form-item>
  25. </div>
  26. <div class="form-max-box">
  27. <el-form-item class="time-input-box" label="自动注销时间:" prop="logoutTime">
  28. <el-input-number :controls="false" :min="30" :max="600" placeholder="请输入内容" v-model="form.logoutTime" style="width:500px;"/>
  29. <span>秒</span>
  30. </el-form-item>
  31. </div>
  32. <div class="form-max-box">
  33. <el-form-item label="视频封面:" prop="videoCover">
  34. <el-upload
  35. class="certificate-avatar-uploader"
  36. :action="uploadImgUrl"
  37. :show-file-list="false"
  38. accept="image/jpeg,image/gif,image/png"
  39. :on-success="(res)=>handleAvatarSuccess(res,'videoCover')"
  40. :headers="headers"
  41. :before-upload="beforeAvatarUpload">
  42. <img v-if="form.videoCover" :src="form.videoCover" class="avatar" >
  43. <i v-if="!form.videoCover" class="el-icon-plus avatar-uploader-icon">上传</i>
  44. </el-upload>
  45. <i v-if="form.videoCover" class="el-icon-view" @click="fullScreenViewClick(form.videoCover)"
  46. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  47. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  48. </el-form-item>
  49. </div>
  50. <div class="form-max-box">
  51. <el-form-item label="签到/离开示意图:" prop="signMap">
  52. <el-upload
  53. class="certificate-avatar-uploader"
  54. :action="uploadImgUrl"
  55. :show-file-list="false"
  56. accept="image/jpeg,image/gif,image/png"
  57. :on-success="(res)=>handleAvatarSuccess(res,'signMap')"
  58. :headers="headers"
  59. :before-upload="beforeAvatarUpload">
  60. <img v-if="form.signMap" :src="form.signMap" class="avatar">
  61. <i v-if="!form.signMap" class="el-icon-plus avatar-uploader-icon" >上传</i>
  62. </el-upload>
  63. <i v-if="form.signMap" class="el-icon-view" @click="lookImg(form.signMap)"
  64. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  65. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  66. </el-form-item>
  67. </div>
  68. <div class="form-max-box">
  69. <el-form-item label="操作指南:" prop="operationGuide">
  70. <el-upload
  71. class="certificate-avatar-uploader"
  72. :action="uploadImgUrl"
  73. :show-file-list="false"
  74. accept="image/jpeg,image/gif,image/png"
  75. :on-success="(res)=>handleAvatarSuccess(res,'operationGuide')"
  76. :headers="headers"
  77. :before-upload="beforeAvatarUpload">
  78. <img v-if="form.operationGuide" :src="form.operationGuide" class="avatar">
  79. <i v-if="!form.operationGuide" class="el-icon-plus avatar-uploader-icon">上传</i>
  80. </el-upload>
  81. <i v-if="form.operationGuide" class="el-icon-view" @click="lookImg(form.operationGuide)"
  82. style="position: absolute;top:0;right:0;z-index:999;border-radius:3px;cursor:pointer;width:20px;
  83. height:20px;line-height:20px;text-align: center;background: rgba(0,0,0,0.2);color:#fff;"></i>
  84. </el-form-item>
  85. </div>
  86. </el-form>
  87. <div class="page-bottom-button-box" v-hasPermiRouter="['system:conf:edit']">
  88. <p class="page-bottom-button-null-p"></p>
  89. <p class="page-bottom-button-submit-p" @click="addOrUpdate">保存</p>
  90. <p class="page-bottom-button-null-p"></p>
  91. </div>
  92. <!--全屏图片预览-->
  93. <fullScreenView :fullScreenViewProps="fullScreenViewProps" ref="fullScreenView"></fullScreenView>
  94. </div>
  95. </template>
  96. <script>
  97. import { getToken } from "@/utils/auth";
  98. import { getConfigByType } from "@/api/commonality/permission";
  99. import { addOrUpdate } from "@/api/systemManagement/index";
  100. import fullScreenView from "@/components/fullScreenView/fullScreenView.vue";
  101. export default {
  102. name: "publicConfig",
  103. components: {
  104. fullScreenView,
  105. },
  106. data() {
  107. return {
  108. uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
  109. headers: {
  110. Authorization:getToken(),
  111. },
  112. configId:null,
  113. form:{
  114. lotControl:[],
  115. userType:[],
  116. expandType:[],
  117. isStart:1,
  118. returnTime:60,
  119. logoutTime:120,
  120. },
  121. rules: {
  122. lotControl:[
  123. { required: true, message: "请选择物联控制权限", trigger: "blur" }
  124. ],
  125. videoCover: [
  126. { required: true, message: "视频封面不能为空", trigger: "blur" }
  127. ],
  128. signMap: [
  129. { required: true, message: "签到/离开示意图不能为空", trigger: "blur" }
  130. ],
  131. operationGuide: [
  132. { required: true, message: "操作指南不能为空", trigger: "blur" }
  133. ],
  134. isStart:[
  135. { required: true, message: "请选择信息牌模块", trigger: "blur" }
  136. ],
  137. returnTime:[
  138. { required: true, message: "请输入自动返回时间", trigger: "blur" }
  139. ],
  140. logoutTime:[
  141. { required: true, message: "请输入自动注销时间", trigger: "blur" }
  142. ],
  143. },
  144. //物联控制权限
  145. lotControl:[],
  146. citiesList:[
  147. //物联控制 1.实验室负责人,2.安全责任人,3.安全准入人员,4.白名单,-1.全部
  148. {
  149. id:'1',
  150. name:"实验室负责人"
  151. },
  152. {
  153. id:'2',
  154. name:"安全责任人"
  155. },
  156. {
  157. id:'3',
  158. name:"安全准入人员"
  159. },
  160. {
  161. id:'4',
  162. name:"白名单"
  163. },
  164. {
  165. id:'-1',
  166. name:"全部人员"
  167. },
  168. ],
  169. fullScreenViewProps:[],
  170. };
  171. },
  172. created() {
  173. },
  174. mounted(){
  175. this.getConfigByType();
  176. },
  177. methods: {
  178. /** 提交按钮 */
  179. addOrUpdate: function() {
  180. let self = this;
  181. this.$refs["form"].validate(valid => {
  182. if (valid) {
  183. if(this.form.returnTime == this.form.logoutTime){
  184. this.msgError('自动返回时间与自动注销时间不能重复');
  185. return
  186. }
  187. let configValue = {
  188. videoCover:this.form.videoCover,
  189. signMap:this.form.signMap,
  190. operationGuide:this.form.operationGuide,
  191. isStart:this.form.isStart,
  192. returnTime:this.form.returnTime,
  193. logoutTime:this.form.logoutTime,
  194. };
  195. let num = 0;
  196. for(let i=0;i<self.form.lotControl.length;i++){
  197. if(self.form.lotControl[i] == '-1'){
  198. num++
  199. }
  200. }
  201. if(num == 0){
  202. configValue.lotControl = self.form.lotControl+'';
  203. }else{
  204. configValue.lotControl = '-1';
  205. }
  206. let obj = {
  207. id:this.configId,
  208. configName: "一体机配置",
  209. category:2,
  210. configKey:2,
  211. configValue : JSON.stringify(configValue),
  212. }
  213. addOrUpdate(obj).then(response => {
  214. this.msgSuccess(response.message);
  215. this.getConfigByType();
  216. });
  217. }
  218. });
  219. },
  220. fullScreenViewClick(url){
  221. this.$set(this,'fullScreenViewProps',[url]);
  222. this.$refs['fullScreenView'].initialize();
  223. },
  224. //获取数据
  225. getConfigByType(){
  226. getConfigByType({ category: 2, configType: 2 }).then(response => {
  227. this.$set(this,'configId',response.data.id);
  228. let obj = JSON.parse(response.data.configValue)
  229. localStorage.setItem('videoCover',obj.videoCover)
  230. if(!obj.returnTime){
  231. obj.returnTime = 60;
  232. }
  233. if(!obj.logoutTime){
  234. obj.logoutTime = 120;
  235. }
  236. this.$set(this,'form',obj)
  237. if(obj.lotControl){
  238. let list = obj.lotControl.split(",");
  239. this.$set(this.form,'lotControl',list);
  240. }else{
  241. this.$set(this.form,'lotControl',['1','2','3','4']);
  242. }
  243. });
  244. },
  245. //上传
  246. handleAvatarSuccess(res,type) {
  247. if(type == 'videoCover'){
  248. this.$set(this.form,'videoCover',res.data.url);
  249. }else if(type == 'signMap'){
  250. this.$set(this.form,'signMap',res.data.url);
  251. }else if(type == 'operationGuide'){
  252. this.$set(this.form,'operationGuide',res.data.url);
  253. }
  254. this.$forceUpdate()
  255. },
  256. beforeAvatarUpload(file) {
  257. let type = false;
  258. console.log('file',file);
  259. if (file.type == 'image/png' || file.type == 'image/jpeg' || file.type == 'image/gif') {
  260. type = true;
  261. }else{
  262. this.$message.error('只能上传png/jpeg/gif格式图片');
  263. type = false;
  264. }
  265. return type;
  266. },
  267. },
  268. };
  269. </script>
  270. <style scoped lang="scss">
  271. .public-config-page{
  272. flex:1;
  273. display: flex;
  274. flex-direction: column;
  275. overflow: hidden;
  276. .public-form-box{
  277. flex:1;
  278. overflow-y: scroll;
  279. overflow-x: hidden;
  280. }
  281. /*底部按钮弹框*/
  282. .sub_btn{
  283. display: flex;
  284. background: #fff;
  285. height: 112px;
  286. .null-p{
  287. flex:1;
  288. }
  289. .inquire-button-one{
  290. cursor:pointer;
  291. display: inline-block;
  292. text-align: center;
  293. width: 70px;
  294. height: 40px;
  295. border-radius: 6px;
  296. border: 1px solid #0045af;
  297. color:#ffffff;
  298. background:#0045af;
  299. margin:36px 10px 0 0;
  300. }
  301. }
  302. .title-box{
  303. border-bottom:1px solid #dedede;
  304. p{
  305. margin-left:40px;
  306. color:#0045af;
  307. line-height:60px;
  308. }
  309. }
  310. .form-max-box{
  311. margin-top:20px;
  312. margin-left: 100px;
  313. }
  314. .avatar-uploader-icon{
  315. width: 200px;
  316. height: 120px;
  317. line-height: 120px;
  318. font-size: 16px;
  319. font-weight: 400;
  320. color: #CCCCCC;
  321. border:1px dashed #CCCCCC;
  322. border-radius:10px;
  323. }
  324. .avatar{
  325. width: 200px;
  326. height: 120px;
  327. }
  328. }
  329. </style>
  330. <style lang="scss">
  331. .integrationConfig{
  332. .time-input-box{
  333. input{
  334. text-align: left;
  335. border-top-right-radius:0;
  336. border-bottom-right-radius:0;
  337. }
  338. span{
  339. font-size:14px;
  340. font-weight:500;
  341. display: inline-block;
  342. width:40px;
  343. height:40px;
  344. background: #E0E0E0;
  345. text-align: center;
  346. line-height: 40px;
  347. border-top-right-radius:4px;
  348. border-bottom-right-radius:4px;
  349. }
  350. }
  351. }
  352. </style>