AddToken.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <!-- 添加常见科室症状 -->
  2. <template>
  3. <div class="AddTokenWrapper">
  4. <crumbs
  5. :title="'license维护-'+titleText"
  6. class="topBack"
  7. :param="$route.params"
  8. linkTo="TokenControl"
  9. ></crumbs>
  10. <el-form ref="ruleForm" class="addDepartForm" label-width="190px">
  11. <el-form-item class="addDepartFormItem isRequired" label="服务器秘钥:">
  12. <!-- <input class="searchInput" type="text" v-model = "equipNum"> -->
  13. <el-input
  14. type="textarea"
  15. :autosize ="{minRows: 2}"
  16. placeholder="请输入内容"
  17. @blur="tokenAnalysis"
  18. v-model.trim="equipNum">
  19. </el-input>
  20. <!-- <el-button
  21. type="primary"
  22. class="analysis"
  23. @click="tokenAnalysis"
  24. >解析</el-button> -->
  25. </el-form-item>
  26. <el-form-item class="isRequired" label="服务商:">
  27. <el-input v-model.trim="server" placeholder="请输服务商" maxlength="255"></el-input>
  28. </el-form-item>
  29. <el-form-item class="isRequired" label="医院:" >
  30. <el-input v-model.trim="hospital" placeholder="请输医院" maxlength="255"></el-input>
  31. </el-form-item>
  32. <el-form-item class="isRequired" label="cpu:" >
  33. {{this.cpu}}
  34. </el-form-item>
  35. <el-form-item label="ip:">
  36. {{this.ip}}
  37. </el-form-item>
  38. <el-form-item label="主板:">
  39. {{this.mainboard}}
  40. </el-form-item>
  41. <el-form-item label="硬盘:">
  42. {{this.disk}}
  43. </el-form-item>
  44. <el-form-item class="isRequired" label="license使用天数(天):" >
  45. <el-input v-model.trim="remainDay" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入使用天数" type='text' min = '0' maxlength="255"></el-input>
  46. </el-form-item>
  47. <el-form-item class="isRequired" label="token有效时间(分钟):" >
  48. <el-input v-model.trim="validTime" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入有效时间" type='text' min = '0' maxlength="255"></el-input>
  49. </el-form-item>
  50. <el-form-item label="登录Key:" v-if="isEdit" >
  51. {{this.loginKey}}
  52. </el-form-item>
  53. <el-form-item label="备注:">
  54. <el-input v-model.trim="remark"
  55. type="textarea"
  56. :autosize ="{minRows: 2}"
  57. placeholder="请输备注"
  58. maxlength="255"></el-input>
  59. </el-form-item>
  60. </el-form>
  61. <div class="btn">
  62. <el-button
  63. type="primary"
  64. :disabled = 'saveDisable'
  65. @click="submitForm"
  66. >确 定</el-button>
  67. </div>
  68. </div>
  69. </template>
  70. <script>
  71. import api from '@api/safeControl.js';
  72. export default {
  73. name: 'AddToken',
  74. data() {
  75. return{
  76. titleText: '添加license',
  77. modifier: '', //操作人
  78. id: '',
  79. equipNum:'',
  80. remainDay: '',
  81. remark: '',
  82. server: '',
  83. hospital: '',
  84. cpu: '',
  85. mainboard: '',
  86. validTime: 30,
  87. disk: '',
  88. ip: '',
  89. loginKey: '',
  90. isEdit: false,
  91. saveDisable: false
  92. }
  93. },
  94. created(){
  95. const { isEdit, data } = this.$route.params;
  96. const userLoginDTO = JSON.parse(localStorage.getItem('userLoginDTO'))
  97. this.modifier = userLoginDTO && userLoginDTO.linkman
  98. if(isEdit) {
  99. if(isEdit) {
  100. this.isEdit = isEdit;
  101. this.titleText = '修改license';
  102. this.id = data.id
  103. this.equipNum = data.content
  104. this.remainDay = data.remainDay
  105. this.remark = data.remark
  106. this.server = data.server
  107. this.hospital = data.hospital
  108. this.cpu = data.cpu
  109. this.mainboard = data.mainboard
  110. this.validTime = data.validTime
  111. this.disk = data.disk
  112. this.ip = data.ip
  113. this.loginKey = data.loginKey
  114. }
  115. } else {
  116. }
  117. },
  118. watch: {
  119. },
  120. methods: {
  121. back(){
  122. this.$router.go(-1);
  123. },
  124. submitForm() {
  125. if(!this.equipNum || !this.hospital || !this.server || !this.cpu || !this.remainDay || !this.validTime) {
  126. this.warning('请输入必填项!')
  127. return
  128. }
  129. this.showDelDialog()
  130. },
  131. tokenAnalysis() {
  132. const param = {
  133. content: this.equipNum
  134. }
  135. api.tokenAnalysis(param).then(res =>{
  136. if(res.data.code == '0') {
  137. const data = res.data.data
  138. this.mainboard = data['server.mainboard']
  139. this.cpu = data['server.cpu']
  140. this.disk = data['server.disk']
  141. } else {
  142. this.warning(res.data.msg)
  143. }
  144. }).catch((err) => {
  145. this.warning(err);
  146. })
  147. },
  148. showDelDialog() {
  149. this.showConfirmDialog('是否生成该令牌?', () => {
  150. const param = {
  151. id: this.id,
  152. creator: this.modifier,
  153. server: this.server,
  154. hospital: this.hospital,
  155. cpu: this.cpu,
  156. remainDay: this.remainDay,
  157. mainboard: this.mainboard,
  158. disk: this.disk,
  159. ip: this.ip,
  160. remark: this.remark,
  161. content: this.equipNum,
  162. validTime: this.validTime
  163. }
  164. if(this.id) {
  165. param.loginKey = this.loginKey
  166. }
  167. this.saveDisable = true //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
  168. api.tokenSaveOrUpdate(param).then((res) => {
  169. if (res.data.code === '0') {
  170. this.warning(res.data.msg || '生成成功', 'success','1000')
  171. setTimeout(() => {
  172. //返回带搜索条件的首页
  173. this.$router.push({
  174. name:'TokenControl',
  175. params: Object.assign({}, this.$route.params, {currentPage: 1})
  176. })
  177. }, 1000);
  178. } else {
  179. this.warning(res.data.msg)
  180. }
  181. this.saveDisable = false
  182. }).catch((err) => {
  183. this.warning(err);
  184. })
  185. });
  186. },
  187. showConfirmDialog(msg, resolve) {
  188. this.$alert(msg, '提示', {
  189. confirmButtonText: '确定',
  190. type: 'warning'
  191. }).then(() => {
  192. resolve();
  193. }).catch(() => {});
  194. },
  195. warning(msg, type,time) {
  196. this.$message({
  197. showClose: true,
  198. dangerouslyUseHTMLString: true,
  199. message: msg,
  200. type: type || 'warning',
  201. duration:time || '3000'
  202. })
  203. },
  204. handleInp(e){ //分组不能输入负数
  205. const value = e;
  206. this.remainDay = value.replace(/\./g,'');
  207. // e = value.replace(/[^\d]/g,'');
  208. // this.remainDay = value.replace(/[^\d]/g,'');
  209. }
  210. }
  211. }
  212. </script>
  213. <style lang="less">
  214. @import '../../less/common.less';
  215. .AddTokenWrapper {
  216. color: #606266;
  217. .topBack {
  218. top: 0;
  219. }
  220. .analysis{
  221. margin-top: 20px;
  222. }
  223. .searchInput, .searchName {
  224. display: inline-block;
  225. height: 32px;
  226. line-height: 32px;
  227. border: 1px solid #a9a9a9;
  228. margin: 0px 0 0 0;
  229. padding: 0 5px;
  230. float: left;
  231. margin-top: 4px;
  232. }
  233. .isRequired .el-form-item__label::before {
  234. content: '*';
  235. color: red;
  236. }
  237. .searchName {
  238. border-left: none;
  239. cursor: pointer;
  240. font-size: 16px;
  241. padding: 0 14px;
  242. }
  243. .addDepartForm {
  244. position: relative;
  245. background-color: #fff;
  246. padding: 20px;
  247. margin: 70px 20px 0px 20px;
  248. border-bottom: 1px solid #c0c4cc;
  249. }
  250. .addDepartFormItem {
  251. position: relative;
  252. }
  253. .symptomList {
  254. background-color: #fff;
  255. padding: 20px;
  256. margin: 0px 20px 0px 20px;
  257. min-height: 400px;
  258. }
  259. .btn {
  260. position: relative;
  261. background-color: #fff;
  262. margin: 0px 20px;
  263. height: 40px;
  264. padding: 20px;
  265. .el-button {
  266. position: absolute;
  267. right: 20px;
  268. }
  269. }
  270. .selectDepart {
  271. }
  272. }
  273. </style>