SystemUserForm.vue 27 KB

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