SystemUserForm.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. <template>
  2. <a-spin :spinning="confirmLoading">
  3. <j-form-container :disabled="formDisabled">
  4. <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
  5. <a-row>
  6. <a-col :span="24">
  7. <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="username">
  8. <span slot="label">
  9. 用户名称&nbsp;
  10. <a-tooltip title="用户名称不为邮箱格式且sso中无当前用户时需设置密码">
  11. <a-icon type="question-circle-o" />
  12. </a-tooltip>
  13. </span>
  14. <a-input v-model="model.username" placeholder="请输入用户名称" :disabled="userDisabled" @blur="handleBlur"></a-input>
  15. </a-form-model-item>
  16. </a-col>
  17. <template v-if="!isEmail">
  18. <a-col :span="24">
  19. <a-form-model-item label="登录密码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="password">
  20. <a-input-password autocomplete="new-password" v-model="model.password" placeholder="请输入登录密码" />
  21. </a-form-model-item>
  22. </a-col>
  23. <a-col :span="24">
  24. <a-form-model-item label="确认密码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmpassword" >
  25. <a-input-password autocomplete="new-password" v-model="model.confirmpassword" @blur="handleConfirmBlur" placeholder="请再次输入登录密码"/>
  26. </a-form-model-item>
  27. </a-col>
  28. </template>
  29. <a-col :span="24">
  30. <a-form-model-item label="描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
  31. <a-input v-model="model.remark" placeholder="请输入描述" ></a-input>
  32. </a-form-model-item>
  33. </a-col>
  34. <a-col :span="24">
  35. <a-form-model-item label="是否为系统管理员" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="role">
  36. <a-switch v-model="model.isSystem" checked-children="是" un-checked-children="否" @change="roleChange" :disabled="model.isSsoAdmin"/>
  37. </a-form-model-item>
  38. </a-col>
  39. <a-col :span="24">
  40. <a-form-model-item label="所拥有的权限" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="role">
  41. <a-table
  42. v-if="tpmTreeData && tpmTreeData.length"
  43. ref="table"
  44. size="middle"
  45. :scroll="{x:true}"
  46. bordered
  47. rowKey="interlockSystemId"
  48. :columns="columns"
  49. :dataSource="tpmTreeData"
  50. :loading="loading"
  51. :pagination="false"
  52. defaultExpandAllRows
  53. class="interlock-user-limit"
  54. >
  55. <!-- class="j-table-force-nowrap" -->
  56. <!-- @change="handleTableChange" -->
  57. <span slot="manageTitle">
  58. <a-checkbox v-model="manageHeader" :indeterminate="indeterminateManageHeader" :disabled="model.isSystem" @change="changeManageHeader"/>
  59. <div>管理</div>
  60. </span>
  61. <span slot="manage" slot-scope="text, record">
  62. <span v-if="record.interlockType === '0' && !record.children && !model.isSystem">-</span>
  63. <a-checkbox v-else v-model="record.manage" :indeterminate="record.indeterminateManage" :disabled="model.isSystem"/>
  64. <!-- <a-checkbox v-model="record.manage" :indeterminate="record.indeterminateManage" :disabled="model.isSystem"/> -->
  65. </span>
  66. <span slot="viewTitle">
  67. <a-checkbox v-model="viewHeader" :indeterminate="indeterminateViewHeader" :disabled="model.isSystem" @change="changeViewHeader"/>
  68. <div>查看</div>
  69. </span>
  70. <span slot="view" slot-scope="text, record">
  71. <span v-if="record.interlockType === '0' && !record.children && !model.isSystem">-</span>
  72. <a-checkbox v-else v-model="record.view" :indeterminate="record.indeterminateView" :disabled="model.isSystem"/>
  73. <!-- <a-checkbox v-model="record.view" :indeterminate="record.indeterminateView" :disabled="model.isSystem"/> -->
  74. </span>
  75. </a-table>
  76. </a-form-model-item>
  77. </a-col>
  78. </a-row>
  79. </a-form-model>
  80. </j-form-container>
  81. </a-spin>
  82. </template>
  83. <script>
  84. import { httpAction, getAction } from '@/api/manage'
  85. import { validateDuplicateValue } from '@/utils/util'
  86. import cookie from 'js-cookie'
  87. export default {
  88. name: 'InterlockUserForm',
  89. components: {
  90. },
  91. props: {
  92. //表单禁用
  93. disabled: {
  94. type: Boolean,
  95. default: false,
  96. required: false
  97. }
  98. },
  99. data () {
  100. return {
  101. userDisabled: false, // 修改时用户名不可修改
  102. model:{
  103. },
  104. labelCol: {
  105. xs: { span: 24 },
  106. sm: { span: 5 },
  107. },
  108. wrapperCol: {
  109. xs: { span: 24 },
  110. sm: { span: 16 },
  111. },
  112. confirmLoading: false,
  113. validatorRules: {
  114. username: [
  115. { required: true, message: '请输入用户名称!', },
  116. { validator: (rule, value, callback) => validateDuplicateValue('interlock_user', 'username', value, this.model.id, callback)},
  117. // {
  118. // pattern: /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/,
  119. // message: '邮箱格式不正确'
  120. // },
  121. ],
  122. password: [
  123. { required: true,
  124. // pattern:/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,
  125. message: '密码由8位数字、大小写字母和特殊符号组成!' },
  126. { validator: this.validateToNextPassword,trigger: 'change' }
  127. ],
  128. confirmpassword: [
  129. { required: true, message: '请重新输入登录密码!',},
  130. { validator: this.compareToFirstPassword,}
  131. ],
  132. },
  133. url: {
  134. add: "/interlockUser/interlockUser/addUser",
  135. edit: "/interlockUser/interlockUser/editUser",
  136. queryById: "/interlockUser/interlockUser/queryUserById"
  137. },
  138. // 权限树-装置系统
  139. loading: false,
  140. tpmTreeData: [],
  141. expandedRowKeys: [],
  142. columns: [
  143. {
  144. title:'',
  145. dataIndex: 'interlockName'
  146. },
  147. {
  148. // title:'管理',
  149. align:"center",
  150. dataIndex: 'manage',
  151. width:147,
  152. slots: { title: 'manageTitle' },
  153. scopedSlots: { customRender: 'manage' },
  154. customCell: (record, index)=>{ return this.customCell(record, index, 'manage')}
  155. },
  156. {
  157. // title:'查看',
  158. align:"center",
  159. dataIndex: 'view',
  160. width:147,
  161. slots: { title: 'viewTitle' },
  162. scopedSlots: { customRender: 'view' },
  163. customCell: (record, index)=>{ return this.customCell(record, index, 'view')}
  164. },
  165. ],
  166. manageHeader: false,
  167. indeterminateManageHeader: false,
  168. viewHeader: false,
  169. indeterminateViewHeader: false,
  170. isEmail: true, // 用户是否为邮箱格式
  171. }
  172. },
  173. computed: {
  174. formDisabled(){
  175. return this.disabled
  176. },
  177. // isSsoManage(){
  178. // return cookie.get('SSORole') === 'globalAdmin'
  179. // // return this.$store.getters.userInfo.role === '0'
  180. // },
  181. },
  182. created () {
  183. //备份model原始值
  184. this.modelDefault = JSON.parse(JSON.stringify(this.model));
  185. },
  186. methods: {
  187. validateToNextPassword (rule, value, callback) {
  188. const confirmpassword=this.model.confirmpassword;
  189. if (value && confirmpassword && value !== confirmpassword) {
  190. callback('两次输入的密码不一样!');
  191. }
  192. if (value && this.confirmDirty) {
  193. this.$refs.form.validateField(['confirmpassword']);
  194. }
  195. callback();
  196. },
  197. compareToFirstPassword (rule, value, callback) {
  198. if (value && value !== this.model.password) {
  199. callback('两次输入的密码不一样!');
  200. } else {
  201. callback()
  202. }
  203. },
  204. handleConfirmBlur(e) {
  205. const value = e.target.value;
  206. this.confirmDirty = this.confirmDirty || !!value
  207. },
  208. handleBlur(){
  209. const emailRegExp = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/
  210. if(emailRegExp.test(this.model.username)){
  211. // 判断sso中是否有当前账户
  212. }
  213. this.isEmail = emailRegExp.test(this.model.username)
  214. },
  215. // 新增
  216. async add () {
  217. this.confirmLoading = true
  218. await getAction(`/base/interlockBase/list`).then(res=>{
  219. // 重组数据
  220. var arr = res.map(item => {
  221. var reValue = {}
  222. reValue.interlockName = item.interlockName
  223. reValue.interlockApparatusId = item.pid
  224. reValue.interlockSystemId = item.id
  225. reValue.interlockType = item.interlockType
  226. reValue.iotedgeGroupId = item.iotedgeGroupId
  227. reValue.limitType = ''
  228. reValue.manage = false
  229. reValue.view = false
  230. reValue.indeterminateManage = false
  231. reValue.indeterminateView = false
  232. return reValue
  233. })
  234. // arr.push({
  235. // interlockName: '所有',
  236. // interlockApparatusId: '',
  237. // interlockSystemId: '0',
  238. // manage: false,
  239. // view: false,
  240. // indeterminateManage: false,
  241. // indeterminateView: false,
  242. // })
  243. this.tpmTreeData = this.handleTree(arr, "interlockSystemId", "interlockApparatusId")
  244. this.confirmLoading = false
  245. })
  246. },
  247. // 编辑
  248. async edit (record) {
  249. this.confirmLoading = true
  250. var interlockOrgData = []
  251. // 获取装置设置数据
  252. await getAction(`/base/interlockBase/list`).then(res=>{
  253. interlockOrgData = res
  254. })
  255. // 获取当前选择账户的详情以及权限等
  256. getAction(this.url.queryById, {id: record.id}).then(response => {
  257. this.model = Object.assign({}, response.result);
  258. this.model.isSystem = this.model.role === '0' ? true : false
  259. // console.log('model', this.model)
  260. var systemLimitList = response.result.systemLimitList
  261. // 重组数据
  262. var arr = interlockOrgData.map(ele => {
  263. var value = systemLimitList.find(item => item.interlockSystemId === ele.id)
  264. // console.log(value)
  265. var reValue = {}
  266. if(value){reValue.id = value.id}
  267. reValue.interlockName = ele.interlockName
  268. reValue.interlockApparatusId = ele.pid
  269. reValue.interlockSystemId = ele.id
  270. reValue.interlockType = ele.interlockType
  271. reValue.iotedgeGroupId = ele.iotedgeGroupId
  272. reValue.limitType = ''
  273. reValue.manage = false
  274. reValue.view = false
  275. reValue.indeterminateManage = false
  276. reValue.indeterminateView = false
  277. if(this.model.role === '0'){
  278. reValue.manage = true
  279. }
  280. if(this.model.role !== '0' && value){
  281. // reValue.id = value.id
  282. reValue.limitType = value.limitType
  283. reValue.manage = value.limitType === '0' ? true : false
  284. reValue.view = value.limitType === '1' ? true : false
  285. }
  286. return reValue
  287. })
  288. // console.log(arr)
  289. this.tpmTreeData = this.handleTree(arr, "interlockSystemId", "interlockApparatusId")
  290. // console.log(this.tpmTreeData)
  291. // 根据子系统回显父装置的多选框样式
  292. this.tpmTreeData.forEach(ele => {
  293. if(ele.children && ele.children.length > 0){
  294. // 设置每一个父装置管理选择框样式
  295. var chooseLengthM = ele.children.filter(item => item.manage).length
  296. ele.indeterminateManage = !!chooseLengthM && chooseLengthM < ele.children.length
  297. ele.manage = chooseLengthM === ele.children.length
  298. // 设置每一个父装置查看选择框样式
  299. var chooseLengthV = ele.children.filter(item => item.view).length
  300. ele.indeterminateView = !!chooseLengthV && chooseLengthV < ele.children.length
  301. ele.view = chooseLengthV === ele.children.length
  302. }
  303. })
  304. // 根据装置设置总管理/查看的多选框样式
  305. // 设置总的管理/查看多选框样式
  306. var hasSystemLength = this.tpmTreeData.filter(item => !!item.children).length
  307. var chooseLengthMH = this.tpmTreeData.filter(item => item.manage || (!item.manage && item.indeterminateManage)).length
  308. this.indeterminateManageHeader = !!chooseLengthMH && chooseLengthMH < hasSystemLength
  309. this.manageHeader = chooseLengthMH === hasSystemLength
  310. var chooseLengthVH = this.tpmTreeData.filter(item => item.view || (!item.view && item.indeterminateView)).length
  311. this.indeterminateViewHeader = !!chooseLengthVH && chooseLengthVH < hasSystemLength
  312. this.viewHeader = chooseLengthVH === hasSystemLength
  313. this.visible = true;
  314. this.confirmLoading = false
  315. })
  316. },
  317. // 表头管理多选框切换选择时
  318. changeManageHeader(e){
  319. // console.log(e.target.checked)
  320. if(e.target.checked){
  321. // 自身样式相应改变
  322. this.viewHeader = false
  323. this.indeterminateViewHeader = false
  324. this.indeterminateManageHeader = false
  325. for (let i = 0; i < this.tpmTreeData.length; i++) {
  326. // 父装置样式改变
  327. const element = this.tpmTreeData[i];
  328. element.manage = element.children ? true : false
  329. element.indeterminateManage = false
  330. element.view = false
  331. element.indeterminateView = false
  332. if(element.children && element.children.length > 0){
  333. element.children.forEach(item => {
  334. // 子系统样式改变
  335. item.manage = true
  336. item.view = false
  337. })
  338. }
  339. }
  340. } else {
  341. for (let i = 0; i < this.tpmTreeData.length; i++) {
  342. const element = this.tpmTreeData[i];
  343. element.manage = false
  344. element.view = false
  345. if(element.children && element.children.length > 0){
  346. element.children.forEach(item => {
  347. item.manage = false
  348. item.view = false
  349. })
  350. }
  351. }
  352. }
  353. },
  354. // 表头查看多选框切换选择时
  355. changeViewHeader(e){
  356. if(e.target.checked){
  357. this.manageHeader = false
  358. this.indeterminateManageHeader = false
  359. this.indeterminateViewHeader = false
  360. for (let i = 0; i < this.tpmTreeData.length; i++) {
  361. // 父装置样式改变
  362. const element = this.tpmTreeData[i];
  363. element.view = element.children ? true : false
  364. element.indeterminateManage = false
  365. element.manage = false
  366. element.indeterminateView = false
  367. if(element.children && element.children.length > 0){
  368. element.children.forEach(item => {
  369. // 子系统样式改变
  370. item.view = true
  371. item.manage = false
  372. })
  373. }
  374. }
  375. } else {
  376. for (let i = 0; i < this.tpmTreeData.length; i++) {
  377. const element = this.tpmTreeData[i];
  378. element.view = false
  379. element.manage = false
  380. if(element.children && element.children.length > 0){
  381. element.children.forEach(item => {
  382. item.view = false
  383. item.manage = false
  384. })
  385. }
  386. }
  387. }
  388. },
  389. // 角色切换时
  390. roleChange(e){
  391. // this.$set(this.model, 'isSystem', e)
  392. this.model = {...this.model}
  393. if(e){
  394. // 当前为管理员
  395. this.manageHeader = true
  396. this.indeterminateViewHeader = false
  397. this.indeterminateManageHeader = false
  398. for (let i = 0; i < this.tpmTreeData.length; i++) {
  399. const element = this.tpmTreeData[i];
  400. element.manage = true
  401. element.indeterminateManage = false
  402. element.indeterminateView = false
  403. if(element.children && element.children.length > 0){
  404. element.children.forEach(item => {
  405. item.manage = true
  406. item.view = false
  407. })
  408. }
  409. }
  410. } else {
  411. // 当前为管理员
  412. this.manageHeader = false
  413. for (let i = 0; i < this.tpmTreeData.length; i++) {
  414. const element = this.tpmTreeData[i];
  415. element.manage = false
  416. if(element.children && element.children.length > 0){
  417. element.children.forEach(item => {
  418. item.manage = false
  419. item.view = false
  420. })
  421. }
  422. }
  423. }
  424. },
  425. customCell(record, rowIndex, value){
  426. return {
  427. props: {
  428. },
  429. on: { // 事件
  430. click: (event) => {
  431. // console.log(event)
  432. // console.log(event.target.checked)
  433. // console.log(record, rowIndex, value)
  434. // 当前点击为装置且点击为装置选择框
  435. if(record.interlockType === '0' && event.target.type === 'checkbox'){
  436. // 全选管理
  437. if(value === 'manage' && event.target.checked){
  438. // 当前父装置多选框样式以及管理查看取反设置
  439. record.indeterminateView = false
  440. record.indeterminateManage = false
  441. record.manage = true
  442. record.view = false
  443. // 根据装置选择情况判断子系统的选择状态
  444. if(record.children && record.children.length > 0){
  445. record.children.forEach(ele => {
  446. ele.manage = true
  447. ele.view = false
  448. })
  449. }
  450. }
  451. // 全选查看
  452. if(value === 'view' && event.target.checked){
  453. // 当前父装置多选框样式以及管理查看取反设置
  454. record.indeterminateManage = false
  455. record.indeterminateView = false
  456. record.view = true
  457. record.manage = false
  458. // 根据装置选择情况判断子系统的选择状态
  459. if(record.children && record.children.length > 0){
  460. record.children.forEach(ele => {
  461. ele.view = true
  462. ele.manage = false
  463. })
  464. }
  465. }
  466. // 取消全选
  467. if(!event.target.checked){
  468. record.indeterminateManage = false
  469. record.indeterminateView = false
  470. record.view = false
  471. record.manage = false
  472. if(record.children && record.children.length > 0){
  473. record.children.forEach(ele => {
  474. ele.manage = false
  475. ele.view = false
  476. })
  477. }
  478. }
  479. }
  480. // 当前点击为装置且点击为系统选择框
  481. if(record.interlockType === '1' && event.target.type === 'checkbox'){
  482. console.log(record, rowIndex, value)
  483. // 管理和查看相互取反,并设置对应父装置的多选框样式
  484. // interlockApparatusId相当于pid,interlockSystemId相当于id
  485. // 某系统选择管理时
  486. if(value === 'manage'){
  487. // 取反
  488. // if(event.target.checked){record.view = false}
  489. record.view = event.target.checked ? !event.target.checked : record.view
  490. // 设置为true/false是为了下面判断length
  491. record.manage = event.target.checked
  492. var pidValue = this.tpmTreeData.find(item => item.interlockSystemId === record.interlockApparatusId)
  493. // 设置当前子系统父装置管理选择框样式
  494. var chooseLengthM = pidValue.children.filter(item => item.manage).length
  495. pidValue.indeterminateManage = !!chooseLengthM && chooseLengthM < pidValue.children.length
  496. pidValue.manage = chooseLengthM === pidValue.children.length
  497. // 设置当前子系统父装置查看选择框样式
  498. var chooseLengthV = pidValue.children.filter(item => item.view).length
  499. pidValue.indeterminateView = !!chooseLengthV && chooseLengthV < pidValue.children.length
  500. pidValue.view = chooseLengthV === pidValue.children.length
  501. }
  502. if(value === 'view'){
  503. // 取反
  504. record.manage = event.target.checked ? !event.target.checked : record.manage
  505. // 设置为true/false是为了下面判断length
  506. record.view = event.target.checked
  507. // 设置当前子系统父装置查看选择框样式
  508. var pidValue = this.tpmTreeData.find(item => item.interlockSystemId === record.interlockApparatusId)
  509. var chooseLengthV = pidValue.children.filter(item => item.view).length
  510. pidValue.indeterminateView = !!chooseLengthV && chooseLengthV < pidValue.children.length
  511. pidValue.view = chooseLengthV === pidValue.children.length
  512. // 设置当前子系统父装置管理选择框样式
  513. var chooseLengthM = pidValue.children.filter(item => item.manage).length
  514. pidValue.indeterminateManage = !!chooseLengthM && chooseLengthM < pidValue.children.length
  515. pidValue.manage = chooseLengthM === pidValue.children.length
  516. }
  517. }
  518. // 设置总的管理/查看多选框样式
  519. // console.log(this.tpmTreeData)
  520. var hasSystemLength = this.tpmTreeData.filter(item => !!item.children).length
  521. // console.log(hasSystemLength)
  522. // 管理选择但没完全选择样式
  523. var hasChooseLengthMH = this.tpmTreeData.filter(item => item.manage || (!item.manage && item.indeterminateManage)).length
  524. // 管理全选样式
  525. var chooseAllLengthMH = this.tpmTreeData.filter(item => item.manage).length
  526. this.indeterminateManageHeader = !!hasChooseLengthMH && hasChooseLengthMH <= hasSystemLength && chooseAllLengthMH !== hasSystemLength
  527. this.manageHeader = chooseAllLengthMH === hasSystemLength
  528. // 查看选择但没完全选择样式
  529. var hasChooseLengthVH = this.tpmTreeData.filter(item => item.view || (!item.view && item.indeterminateView)).length
  530. // 查看全选样式
  531. var chooseAllLengthVH = this.tpmTreeData.filter(item => item.view).length
  532. this.indeterminateViewHeader = !!hasChooseLengthVH && hasChooseLengthVH <= hasSystemLength && chooseAllLengthVH !== hasSystemLength
  533. this.viewHeader = chooseAllLengthVH === hasSystemLength
  534. },
  535. },
  536. };
  537. },
  538. submitForm () {
  539. const that = this;
  540. // 触发表单验证
  541. this.$refs.form.validate(valid => {
  542. if (valid) {
  543. // console.log(this.tpmTreeData)
  544. // 二维转一维
  545. var arr = []
  546. this.tpmTreeData.forEach(item => {
  547. if(item.children){
  548. arr.push(...item.children)
  549. }
  550. })
  551. // console.log(arr)
  552. this.model.systemLimitList = arr.map(item => {
  553. if(item.manage){item.limitType = '0'}
  554. if(item.view){item.limitType = '1'}
  555. if(!item.manage && !item.view){item.limitType = ''}
  556. return item
  557. })
  558. this.model.role = this.model.isSystem ? '0' : '1'
  559. // console.log(su)
  560. that.confirmLoading = true;
  561. let httpurl = '';
  562. let method = '';
  563. if(!this.model.id){
  564. httpurl+=this.url.add;
  565. method = 'post';
  566. }else{
  567. httpurl+=this.url.edit;
  568. method = 'put';
  569. }
  570. // 1820384671259701250 -- 联锁系统管理员
  571. // 1820343133955698689 -- 联锁普通SSO用户
  572. this.model.roleId = this.model.isSystem ? '1820384671259701250' : '1820343133955698689'
  573. httpAction(httpurl,this.model,method).then((res)=>{
  574. if(res.success){
  575. that.$message.success(res.message);
  576. that.$emit('ok');
  577. }else{
  578. that.$message.warning(res.message);
  579. }
  580. }).finally(() => {
  581. that.confirmLoading = false;
  582. })
  583. }
  584. })
  585. },
  586. }
  587. }
  588. </script>
  589. <style lang="less">
  590. .interlock-user-limit{
  591. tr{
  592. td{
  593. padding: 5px 8px !important;
  594. }
  595. }
  596. }
  597. </style>