plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1343 lines
42 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <div class="mod-user">
  3. <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
  4. <el-form-item>
  5. <el-input v-model="dataForm.userName" placeholder="用户账号" clearable></el-input>
  6. </el-form-item>
  7. <el-form-item>
  8. <el-button @click="getDataList()" type="primary">{{ buttons.search || '查询' }}</el-button>
  9. <el-button v-if="isAuth('sys:user:save')" type="primary" @click="addOrUpdateHandle()">
  10. {{ buttons.add || '新增' }}
  11. </el-button>
  12. <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary"
  13. @click="specialAuthorize()"
  14. >{{ buttons.specialCompetencies || '特殊权限' }}
  15. </el-button>
  16. <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary"
  17. @click="siteAuthorize()"
  18. > {{ buttons.factoryAuthorization || '工厂授权' }}
  19. </el-button>
  20. <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary"
  21. @click="buAuthorize()"
  22. > {{ buttons.buAuthorization || 'BU授权' }}
  23. </el-button>
  24. <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary"
  25. @click="projectModel()"
  26. > {{ buttons.projectAuthorization || '项目授权' }}
  27. </el-button>
  28. <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary"
  29. @click="FieldListModel()"
  30. > {{ buttons.fieldAuthorization || '字段授权' }}
  31. </el-button>
  32. <el-button v-if="isAuth('sys:user:save')" :disabled="this.showButton" type="primary"
  33. @click="roleAuthorize()"
  34. > {{ buttons.roleAuthorization || '角色授权' }}
  35. </el-button>
  36. </el-form-item>
  37. </el-form>
  38. <el-table
  39. :data="dataList"
  40. border
  41. :height="height"
  42. v-loading="dataListLoading"
  43. @selection-change="selectionChangeHandle"
  44. highlight-current-row
  45. @current-change="handleCurrentChange"
  46. style="width: 100%;">
  47. <el-table-column
  48. prop="username"
  49. header-align="center"
  50. align="center"
  51. :label="buttons.username||'用户账号'">
  52. </el-table-column>
  53. <el-table-column
  54. prop="userDisplay"
  55. header-align="center"
  56. align="center"
  57. :label="buttons.userDisplay||'用户名'">
  58. </el-table-column>
  59. <el-table-column
  60. prop="buDesc"
  61. header-align="center"
  62. align="center"
  63. :label="'BU'">
  64. </el-table-column>
  65. <el-table-column
  66. prop="departmentName"
  67. header-align="center"
  68. align="center"
  69. :label="'部门'">
  70. </el-table-column>
  71. <el-table-column
  72. prop="postName"
  73. header-align="center"
  74. align="center"
  75. :label="'岗位'">
  76. </el-table-column>
  77. <el-table-column
  78. prop="email"
  79. header-align="center"
  80. align="center"
  81. :label="buttons.email||'邮箱'">
  82. </el-table-column>
  83. <el-table-column
  84. prop="mobile"
  85. header-align="center"
  86. align="center"
  87. :label="buttons.mobile||'手机号'">
  88. </el-table-column>
  89. <el-table-column
  90. prop="status"
  91. header-align="center"
  92. align="center"
  93. :label="buttons.status||'状态'">
  94. <template slot-scope="scope">
  95. <el-link v-if="scope.row.status === 0" type="success">{{ buttons.disable || '禁用' }}</el-link>
  96. <el-link v-else type="danger">{{ buttons.normal || '正常' }}</el-link>
  97. </template>
  98. </el-table-column>
  99. <el-table-column
  100. prop="createTime"
  101. header-align="center"
  102. align="center"
  103. width="180"
  104. :label="buttons.createTime||'创建时间'">
  105. </el-table-column>
  106. <el-table-column
  107. fixed="right"
  108. header-align="center"
  109. align="center"
  110. width="150"
  111. :label="buttons.cz||'操作'">
  112. <template slot-scope="scope">
  113. <!-- <a type="text" size="small" @click="generateData(scope.row)">{{ buttons.auth || '审核' }}</a>-->
  114. <a type="text" size="small" @click="permissionList(scope.row)">权限清单</a>
  115. <a v-if="isAuth('sys:user:update')" type="text" size="small"
  116. @click="addOrUpdateHandle(scope.row.userId)">{{ buttons.edit || '修改' }}</a>
  117. <a v-if="isAuth('sys:user:delete')" type="text" size="small"
  118. @click="deleteHandle(scope.row)">{{ buttons.delete || '删除' }}</a>
  119. </template>
  120. </el-table-column>
  121. </el-table>
  122. <el-pagination
  123. @size-change="sizeChangeHandle"
  124. @current-change="currentChangeHandle"
  125. :current-page="pageIndex"
  126. :page-sizes="[20, 50, 100, 200, 500]"
  127. :page-size="pageSize"
  128. :total="totalPage"
  129. layout="total, sizes, prev, pager, next, jumper">
  130. </el-pagination>
  131. <!-- 权限清单 -->
  132. <el-dialog title="权限清单" @close="closeDataDialog" @open="getUserAccessSiteInfoList" :close-on-click-modal="false" v-drag :visible.sync="permissionFlag" width="900px">
  133. <el-form label-position="top" style="margin-top: 1px; margin-left: 0px;">
  134. 用户 <el-input v-model="selectUser.username" style="width: 130px" readonly></el-input>
  135. 名称 <el-input v-model="selectUser.userDisplay" style="width: 130px" readonly></el-input>
  136. <el-tabs v-model="activeTable" @tab-click="tabClick" >
  137. <!-- 工厂权限页签 -->
  138. <el-tab-pane label="工厂权限" name="factory_information" style="height: 350px;">
  139. <el-table
  140. :data="userSiteList"
  141. border :height="350">
  142. <el-table-column
  143. prop="siteID"
  144. header-align="center"
  145. align="center"
  146. min-width="50"
  147. label="工厂编码">
  148. </el-table-column>
  149. <el-table-column
  150. prop="siteName"
  151. header-align="center"
  152. align="center"
  153. min-width="100"
  154. label="工厂名称">
  155. </el-table-column>
  156. <el-table-column
  157. prop="address"
  158. header-align="center"
  159. align="center"
  160. min-width="100"
  161. label="地址">
  162. </el-table-column>
  163. </el-table>
  164. </el-tab-pane>
  165. <!-- BU权限页签 -->
  166. <el-tab-pane label="BU权限" name="BU_information" style="height: 350px;">
  167. <el-table
  168. :data="userBUList"
  169. border :height="350">
  170. <el-table-column
  171. prop="site"
  172. header-align="center"
  173. align="center"
  174. min-width="50"
  175. label="工厂编码">
  176. </el-table-column>
  177. <el-table-column
  178. prop="buNo"
  179. header-align="center"
  180. align="center"
  181. min-width="100"
  182. label="部门编码">
  183. </el-table-column>
  184. <el-table-column
  185. prop="buDesc"
  186. header-align="center"
  187. align="center"
  188. min-width="100"
  189. label="部门名称">
  190. </el-table-column>
  191. </el-table>
  192. </el-tab-pane>
  193. <!-- 项目权限页签 -->
  194. <el-tab-pane label="项目权限" name="project_information">
  195. <el-table
  196. :data="userProjectList"
  197. border :height="350">
  198. <el-table-column
  199. prop="site"
  200. header-align="center"
  201. align="center"
  202. min-width="50"
  203. label="工厂编码">
  204. </el-table-column>
  205. <el-table-column
  206. prop="projectId"
  207. header-align="center"
  208. align="center"
  209. min-width="50"
  210. label="项目号">
  211. </el-table-column>
  212. <el-table-column
  213. prop="status"
  214. header-align="center"
  215. align="center"
  216. min-width="100"
  217. label="项目状态">
  218. </el-table-column>
  219. <el-table-column
  220. prop="needDate"
  221. header-align="center"
  222. align="center"
  223. min-width="100"
  224. label="要求完成时间">
  225. </el-table-column>
  226. </el-table>
  227. </el-tab-pane>
  228. <!-- 字段权限页签 -->
  229. <el-tab-pane label="字段权限" name="field_function_information" style="height: 350px;">
  230. <el-table
  231. :data="userFieldList"
  232. border :height="350">
  233. <el-table-column
  234. prop="functionName"
  235. header-align="center"
  236. align="center"
  237. min-width="50"
  238. label="功能名称">
  239. </el-table-column>
  240. <el-table-column
  241. prop="functionGroup"
  242. header-align="center"
  243. align="center"
  244. min-width="100"
  245. label="功能分组">
  246. </el-table-column>
  247. <el-table-column
  248. prop="fieldDesc"
  249. header-align="center"
  250. align="center"
  251. min-width="50"
  252. label="字段名称">
  253. </el-table-column>
  254. </el-table>
  255. </el-tab-pane>
  256. <!-- 特殊权限页签 -->
  257. <el-tab-pane label="特殊权限" name="security_information" style="height: 350px;">
  258. <el-table
  259. :data="securityList"
  260. border
  261. v-loading="dataListLoading" :height="350">
  262. <el-table-column
  263. v-for="(item,index) in columnList" :key="index"
  264. :sortable="item.columnSortable"
  265. :prop="item.columnProp"
  266. :header-align="item.headerAlign"
  267. :show-overflow-tooltip="item.showOverflowTooltip"
  268. :align="item.align"
  269. :fixed="item.fixed==''?false:item.fixed"
  270. :min-width="item.columnWidth"
  271. :label="item.columnLabel">
  272. <template slot-scope="scope">
  273. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  274. <span v-if="item.columnHidden">
  275. <el-checkbox v-model="scope.row[item.columnProp] "></el-checkbox>
  276. </span>
  277. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  278. style="width: 100px; height: 80px"/></span>
  279. </template>
  280. </el-table-column>
  281. </el-table>
  282. </el-tab-pane>
  283. <!-- 角色权限页签 -->
  284. <el-tab-pane label="角色权限" name="role_information" style="height: 350px;">
  285. <el-table
  286. :data="userRoleList"
  287. border :height="350">
  288. <el-table-column
  289. prop="site"
  290. header-align="center"
  291. align="center"
  292. min-width="50"
  293. label="工厂编码">
  294. </el-table-column>
  295. <el-table-column
  296. prop="roleNo"
  297. header-align="center"
  298. align="center"
  299. min-width="100"
  300. label="角色编码">
  301. </el-table-column>
  302. <el-table-column
  303. prop="roleDesc"
  304. header-align="center"
  305. align="center"
  306. min-width="100"
  307. label="角色名称">
  308. </el-table-column>
  309. </el-table>
  310. </el-tab-pane>
  311. </el-tabs>
  312. </el-form>
  313. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  314. <el-button @click="permissionFlag = false" type="primary">关闭</el-button>
  315. </el-footer>
  316. </el-dialog>
  317. <!-- 弹窗, 新增 / 修改 -->
  318. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
  319. <!-- 审核权限 -->
  320. <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-drag :title="inputSearch1"
  321. :visible.sync="setUp.reviewFlag" width="518px">
  322. <template>
  323. <el-transfer v-model="checked" :data="transferData"
  324. :titles="[buttons.allAuth || '所有权限', buttons.currentAuth || '当前权限']"></el-transfer>
  325. </template>
  326. <span slot="footer" class="dialog-footer">
  327. <div style="margin-top: 5px">
  328. <el-button type="primary" :disabled="setUp.saveButton" @click="saveUserRoleFlag()">确定</el-button>
  329. <el-button type="primary" @click="setUp.reviewFlag = false">取消</el-button>
  330. </div>
  331. </span>
  332. </el-dialog>
  333. <!-- 特殊权限 -->
  334. <el-dialog
  335. v-drag
  336. :title="'特殊性权限'"
  337. :visible.sync="specialVisible"
  338. width="820px"
  339. :append-to-body="true">
  340. <el-table
  341. :data="securityList"
  342. border
  343. :height="securityHeight"
  344. v-loading="dataListLoading"
  345. style="width: 100%;">
  346. <el-table-column
  347. v-for="(item,index) in columnList" :key="index"
  348. :sortable="item.columnSortable"
  349. :prop="item.columnProp"
  350. :header-align="item.headerAlign"
  351. :show-overflow-tooltip="item.showOverflowTooltip"
  352. :align="item.align"
  353. :fixed="item.fixed==''?false:item.fixed"
  354. :min-width="item.columnWidth"
  355. :label="item.columnLabel">
  356. <template slot-scope="scope">
  357. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  358. <span v-if="item.columnHidden">
  359. <el-checkbox v-model="scope.row[item.columnProp] "></el-checkbox>
  360. </span>
  361. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  362. style="width: 100px; height: 80px"/></span>
  363. </template>
  364. </el-table-column>
  365. </el-table>
  366. <span slot="footer" class="dialog-footer">
  367. <el-button type="primary" @click="saveUserSecurity()">确定</el-button>
  368. <el-button @click="specialVisible = false" type="primary">取消</el-button>
  369. </span>
  370. </el-dialog>
  371. <!-- 工厂授权 -->
  372. <el-dialog
  373. style="font-size: 12px"
  374. v-drag
  375. :title="'工厂授权'"
  376. :visible.sync="siteVisible"
  377. width="518px"
  378. :append-to-body="true"
  379. @close="closeDataDialog">
  380. <el-transfer class="rq" filterable v-model="selectSitList" :data="siteList" :titles="['未授权工厂', '已授权工厂']"></el-transfer>
  381. <span slot="footer" class="dialog-footer">
  382. <div style="margin-top: 5px">
  383. <el-button type="primary" @click="saveUserAssessSite()">确定</el-button>
  384. <el-button @click="siteVisible = false" type="primary">取消</el-button>
  385. </div>
  386. </span>
  387. </el-dialog>
  388. <!-- BU授权 -->
  389. <el-dialog
  390. style="font-size: 12px"
  391. v-drag
  392. :title="'BU授权'"
  393. :visible.sync="buVisible"
  394. width="518px"
  395. :append-to-body="true">
  396. <el-transfer class="rq" filterable v-model="selectBUList" :props="{
  397. key: 'buNo',
  398. label: 'buDesc'
  399. }" :data="buList" :titles="['未授权BU', '已授权BU']"></el-transfer>
  400. <span slot="footer" class="dialog-footer">
  401. <div style="margin-top: 5px">
  402. <el-button type="primary" @click="saveBuAssessSite()">确定</el-button>
  403. <el-button @click="buVisible = false" type="primary">取消</el-button>
  404. </div>
  405. </span>
  406. </el-dialog>
  407. <!-- 功能清单 -->
  408. <el-dialog
  409. width="600px"
  410. title="功能清单"
  411. :close-on-click-modal="false"
  412. :visible.sync="functionFlag">
  413. <el-form label-position="top" style="margin-top: 1px; margin-left: 0px;">
  414. 用户 <el-input v-model="selectUser.username" style="width: 130px" readonly></el-input>
  415. 名称 <el-input v-model="selectUser.userDisplay" style="width: 130px" readonly></el-input>
  416. </el-form>
  417. <el-table
  418. height="300"
  419. :data="functionList"
  420. border
  421. style="width: 100%">
  422. <el-table-column
  423. prop="functionName"
  424. header-align="center"
  425. align="left"
  426. min-width="80"
  427. label="功能名称">
  428. </el-table-column>
  429. <el-table-column
  430. prop="functionGroup"
  431. header-align="center"
  432. align="left"
  433. min-width="100"
  434. label="功能分组">
  435. </el-table-column>
  436. <el-table-column
  437. prop=""
  438. header-align="center"
  439. align="center"
  440. width="60"
  441. label="操作">
  442. <template slot-scope="scope" class="foo_container">
  443. <a type="text" size="small" @click="accessModel(scope.row)">授权</a>
  444. </template>
  445. </el-table-column>
  446. </el-table>
  447. <span slot="footer" class="dialog-footer">
  448. <el-button type="primary" @click="functionFlag = false">关闭</el-button>
  449. </span>
  450. </el-dialog>
  451. <!-- 字段授权 -->
  452. <el-dialog
  453. style="font-size: 12px"
  454. v-drag
  455. :title="'字段授权'"
  456. :visible.sync="fieldFlag"
  457. width="518px"
  458. :append-to-body="true">
  459. <el-transfer v-model="selectFieldList" class="rq" filterable :props="{
  460. key: 'fieldId',
  461. label: 'fieldDesc'
  462. }" :data="fieldList" :titles="['未选择', '已选择']"></el-transfer>
  463. <span slot="footer" class="dialog-footer">
  464. <div style="margin-top: 5px">
  465. <el-button type="primary" @click="saveAccessFieldListByUser()">确定</el-button>
  466. <el-button @click="fieldFlag = false" type="primary">取消</el-button>
  467. </div>
  468. </span>
  469. </el-dialog>
  470. <!-- 角色授权 -->
  471. <el-dialog
  472. style="font-size: 12px"
  473. v-drag
  474. :title="'角色授权'"
  475. :visible.sync="roleVisible"
  476. width="518px"
  477. :append-to-body="true">
  478. <el-transfer class="rq" filterable v-model="selectRoleList" :props="{
  479. key: 'roleNo',
  480. label: 'roleDesc'
  481. }" :data="roleList" :titles="['未授权角色', '已授权角色']"></el-transfer>
  482. <span slot="footer" class="dialog-footer">
  483. <div style="margin-top: 5px">
  484. <el-button type="primary" @click="saveRoleAssessSite()">确定</el-button>
  485. <el-button @click="roleVisible = false" type="primary">取消</el-button>
  486. </div>
  487. </span>
  488. </el-dialog>
  489. <el-dialog
  490. width="600px"
  491. title="项目权限"
  492. :close-on-click-modal="false"
  493. :visible.sync="projectRoleFlag">
  494. <el-table
  495. :data="projectRoleList"
  496. border
  497. :height="400"
  498. v-loading="false"
  499. style="width: 100%;">
  500. <el-table-column
  501. prop="projectId"
  502. header-align="center"
  503. align="center"
  504. min-width="50"
  505. label="项目号">
  506. </el-table-column>
  507. <el-table-column
  508. prop="projectName"
  509. header-align="center"
  510. align="center"
  511. min-width="50"
  512. label="项目名称">
  513. </el-table-column>
  514. <el-table-column
  515. prop="projectDesc"
  516. header-align="center"
  517. align="center"
  518. min-width="100"
  519. label="项目描述">
  520. </el-table-column>
  521. <el-table-column
  522. prop=""
  523. header-align="center"
  524. align="center"
  525. min-width="25"
  526. label="">
  527. <template slot-scope="scope">
  528. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  529. <el-checkbox v-model="scope.row.checkAll" @change="changeAll(scope.row)"></el-checkbox>
  530. </template>
  531. </el-table-column>
  532. <el-table-column
  533. prop=""
  534. header-align="center"
  535. align="center"
  536. min-width="25"
  537. label="查询">
  538. <template slot-scope="scope">
  539. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  540. <el-checkbox v-model="scope.row.searchCheck" @change="changeCheck(scope.row,1)"></el-checkbox>
  541. </template>
  542. </el-table-column>
  543. <el-table-column
  544. prop=""
  545. header-align="center"
  546. align="center"
  547. min-width="25"
  548. label="修改">
  549. <template slot-scope="scope">
  550. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  551. <el-checkbox v-model="scope.row.updateCheck" @change="changeCheck(scope.row,2)"></el-checkbox>
  552. </template>
  553. </el-table-column>
  554. <el-table-column
  555. prop=""
  556. header-align="center"
  557. align="center"
  558. min-width="25"
  559. label="下载">
  560. <template slot-scope="scope">
  561. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  562. <el-checkbox v-model="scope.row.downCheck" @change="changeCheck(scope.row,3)"></el-checkbox>
  563. </template>
  564. </el-table-column>
  565. <el-table-column
  566. prop=""
  567. header-align="center"
  568. align="center"
  569. min-width="25"
  570. label="删除">
  571. <template slot-scope="scope">
  572. <!-- 如果数据为Y显示勾选框否则不勾选 -->
  573. <el-checkbox v-model="scope.row.deleteCheck" @change="changeCheck(scope.row,4)"></el-checkbox>
  574. </template>
  575. </el-table-column>
  576. </el-table>
  577. <span slot="footer" class="dialog-footer">
  578. <div style="margin-top: 5px">
  579. <el-button type="primary" @click="saveAccessProject()">确定</el-button>
  580. <el-button @click="projectRoleFlag = false" type="primary">取消</el-button>
  581. </div>
  582. </span>
  583. </el-dialog>
  584. </div>
  585. </template>
  586. <script>
  587. import {getUserAccessSiteList, saveUserAccessSiteList} from '@/api/factory/accessSite.js'
  588. import {getSiteList} from '@/api/factory/site.js'
  589. import {searchAccessBuList,searchAccessRoleList,saveAccessBU,saveAccessRole,searchAccessProjectForUser,saveAccessProject, getUserAccessSiteInfoList, getUserAccessBUInfoList, getUserAccessRoleInfoList, getUserAccessProjectInfoList} from '@/api/base/site.js'
  590. import {
  591. searchFieldFunctionList,searchAccessFieldListByUser,saveAccessFieldListByUser,getUserAccessFieldFunctionInfoList
  592. } from "@/api/base/field.js"
  593. import AddOrUpdate from './user-add-or-update'
  594. import {getUserBusinessRoleList, saveUserBusinessRole} from '@/api/auditManagement/auditType.js'
  595. import {
  596. getUserSpecialSecurity,
  597. saveUserSpecialSecurity,
  598. updateUserSpecialSecurity,
  599. } from '@/api/factory/userSpecialSecurity.js'
  600. import {debounce, throttle} from "../../../utils/common";
  601. import {
  602. searchFunctionButtonList,
  603. } from "@/api/sysLanguage.js"
  604. import {
  605. getBUList,
  606. getDepartmentList,
  607. getPostList,
  608. saveAccessSiteForSite,
  609. searchAccessSiteListBySite
  610. } from '../../../api/base/site'
  611. export default {
  612. data() {
  613. return {
  614. accessSiteVisible: false,
  615. projectRoleFlag: false,
  616. projectRoleList: [],
  617. accessSiteList: [],
  618. showButton: true,
  619. height: 200,
  620. securityHeight: 300,
  621. specialVisible: false,
  622. siteVisible: false,
  623. buVisible: false,
  624. roleVisible: false,
  625. currentData: {},
  626. userId: this.$store.state.user.name,
  627. transferData: [],
  628. checked: [],
  629. selectBUList: [],
  630. buList: [],
  631. selectRoleList: [],
  632. roleList:[],
  633. userSiteList: [],
  634. userBUList:[],
  635. userRoleList:[],
  636. userProjectList:[],
  637. userFieldList:[],
  638. userData: [],
  639. inputSearch1: '审核权限',
  640. //设置
  641. setUp: {
  642. reviewFlag: false,
  643. saveButton: false,
  644. },
  645. dataForm: {
  646. id: 0,
  647. userName: '',
  648. password: '',
  649. comfirmPassword: '',
  650. languageDefault: '',
  651. salt: '',
  652. email: '',
  653. mobile: '',
  654. buNo: '',
  655. buDesc: '',
  656. roleNo: '',
  657. roleDesc: '',
  658. departmentNo:'',
  659. departmentName:'',
  660. postNo:'',
  661. postName:'',
  662. roleIdList: [],
  663. status: 1,
  664. site: '',
  665. siteID: '',
  666. siteName:'',
  667. userDisplay: ''
  668. },
  669. // 初始页签
  670. activeTable: 'factory_information',
  671. columnList: [
  672. {
  673. userId: this.$store.state.user.name,
  674. serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
  675. tableId: this.$route.meta.menuId + 'security',
  676. tableName: "securityTable",
  677. columnProp: "securitydesc",
  678. headerAlign: "center",
  679. align: "left",
  680. columnLabel: "参数描述",
  681. columnHidden: false,
  682. columnImage: false,
  683. columnWidth: 70,
  684. columnSortable: false,
  685. sortLv: 0,
  686. status: true,
  687. fixed: '',
  688. },
  689. {
  690. userId: this.$store.state.user.name,
  691. serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
  692. tableId: this.$route.meta.menuId + 'security',
  693. tableName: "securityTable",
  694. columnProp: "module",
  695. headerAlign: "center",
  696. align: "left",
  697. columnLabel: "模块",
  698. columnHidden: false,
  699. columnImage: false,
  700. columnSortable: false,
  701. columnWidth: 20,
  702. sortLv: 0,
  703. status: true,
  704. fixed: '',
  705. },
  706. {
  707. userId: this.$store.state.user.name,
  708. serialNumber: 'security' + this.$route.meta.menuId + 'securitydesc',
  709. tableId: this.$route.meta.menuId + 'security',
  710. tableName: "securityTable",
  711. columnProp: "itemvalue",
  712. headerAlign: "center",
  713. align: "center",
  714. columnLabel: "参数值",
  715. columnHidden: true,
  716. columnImage: false,
  717. columnSortable: false,
  718. columnWidth: 10,
  719. sortLv: 0,
  720. status: true,
  721. fixed: '',
  722. },
  723. ],
  724. buttons: {
  725. cz: '操作',
  726. search: '查询',
  727. add: '添加',
  728. permissionList: '权限清单',
  729. edit: '编辑',
  730. delete: '删除',
  731. specialCompetencies: '特殊权限',
  732. factoryAuthorization: '工厂授权',
  733. buAuthorization: 'BU授权',
  734. roleAuthorization: '角色授权',
  735. projectAuthorization: '项目授权',
  736. createTime: '创建时间',
  737. username: '用户账号',
  738. userDisplay: '用户名',
  739. email: '邮箱',
  740. mobile: '手机号',
  741. status: '状态',
  742. disable: '禁用',
  743. normal: '正常',
  744. auth: '审核',
  745. allAuth: '所有权限',
  746. currentAuth: '当前权限',
  747. fieldAuthorization:'字段授权',
  748. role:'授权',
  749. },
  750. dataList: [],
  751. securityList: [],
  752. selectSpecialList: [],
  753. siteList: [],
  754. selectSitList: [],
  755. selectUser: {},
  756. pageIndex: 1,
  757. pageSize: 20,
  758. totalPage: 0,
  759. dataListLoading: false,
  760. dataListSelections: [],
  761. addOrUpdateVisible: false,
  762. functionFlag:false,
  763. functionList:[],
  764. rowFunctionId:'',
  765. selectFieldList:[],
  766. fieldList:[],
  767. fieldFlag:false,
  768. permissionFlag:false,
  769. }
  770. },
  771. components: {
  772. AddOrUpdate
  773. },
  774. activated() {
  775. this.getDataList()
  776. },
  777. mounted() {
  778. this.$nextTick(() => {
  779. this.securityHeight = window.innerHeight - 300;
  780. this.height = window.innerHeight - 200;
  781. })
  782. },
  783. methods: {
  784. // 获取button的词典
  785. getFunctionButtonList() {
  786. let queryButton = {
  787. functionId: this.$route.meta.menuId,
  788. tableId: '*',
  789. languageCode: this.$i18n.locale,
  790. objectType: 'button'
  791. }
  792. searchFunctionButtonList(queryButton).then(({data}) => {
  793. if (data.code == 0 && data.data) {
  794. this.buttons = data.data
  795. }
  796. })
  797. },
  798. /**
  799. * 列表表格选择替换
  800. * @param tab
  801. * @param event
  802. */
  803. tabClick (tab, event) {
  804. // 刷新列表数据
  805. this.refreshCurrentTabTable()
  806. },
  807. refreshCurrentTabTable() {
  808. if (this.activeTable === 'factory_information') {
  809. this.getUserAccessSiteInfoList()
  810. }
  811. if (this.activeTable === 'BU_information') {
  812. this.getUserAccessBUInfoList()
  813. }
  814. if (this.activeTable === 'project_information'){
  815. this.getUserAccessProjectInfoList()
  816. }
  817. if (this.activeTable === 'field_function_information'){
  818. this.getUserAccessFieldFunctionInfoList()
  819. }
  820. if (this.activeTable === 'security_information'){
  821. this.getUserSpecialSecurity()
  822. }
  823. if (this.activeTable === 'role_information'){
  824. this.getUserAccessRoleInfoList()
  825. }
  826. },
  827. // 特殊权限
  828. specialAuthorize() {
  829. this.specialVisible = true
  830. this.searchUserSpecialSecurity()
  831. },
  832. // 获取特殊权限
  833. searchUserSpecialSecurity() {
  834. saveUserSpecialSecurity({userid: this.selectUser.username}).then(({data}) => {
  835. if (data.code === 0) {
  836. getUserSpecialSecurity(this.selectUser.username).then(({data}) => {
  837. if (data.code === 0) {
  838. this.securityList = data.dataList.map(item => {
  839. item.itemvalue = item.itemvalue == 'Y' ? true : false;
  840. return item;
  841. })
  842. }
  843. })
  844. }
  845. })
  846. },
  847. // 保存用户权限
  848. saveUserSecurity() {
  849. let securityList = JSON.parse(JSON.stringify(this.securityList)).map(item => {
  850. item.itemvalue = item.itemvalue === true ? 'Y' : 'N';
  851. return item;
  852. })
  853. updateUserSpecialSecurity(securityList).then(({data}) => {
  854. if (data.code === 0) {
  855. this.$message.success(data.msg)
  856. this.specialVisible = false
  857. } else {
  858. this.$message.success(data.msg)
  859. }
  860. })
  861. },
  862. // 授权工厂
  863. siteAuthorize() {
  864. this.siteVisible = true
  865. this.searchSiteList()
  866. },
  867. buAuthorize() {
  868. this.buVisible = true
  869. this.searchBuList()
  870. },
  871. roleAuthorize() {
  872. this.roleVisible = true
  873. this.searchRoleList()
  874. },
  875. //授权项目start
  876. projectModel(){
  877. let inData={
  878. site:this.$store.state.user.site,
  879. username:this.selectUser.username,
  880. }
  881. searchAccessProjectForUser(inData).then(({data}) => {
  882. this.projectRoleList=data.rows
  883. })
  884. this.projectRoleFlag=true
  885. },
  886. changeAll(row){
  887. if(row.checkAll){
  888. row.searchCheck=true;
  889. row.updateCheck=true;
  890. row.downCheck=true;
  891. row.deleteCheck=true;
  892. row.searchFlag='Y'
  893. row.updateFlag='Y'
  894. row.downFlag='Y'
  895. row.deleteFlag='Y'
  896. }else {
  897. row.searchCheck=false;
  898. row.updateCheck=false;
  899. row.downCheck=false;
  900. row.deleteCheck=false;
  901. row.searchFlag='N'
  902. row.updateFlag='N'
  903. row.downFlag='N'
  904. row.deleteFlag='N'
  905. }
  906. },
  907. changeCheck(row,type){
  908. if(type==1){
  909. if(row.searchCheck){
  910. row.searchFlag='Y'
  911. }else {
  912. row.searchFlag='N'
  913. }
  914. }
  915. if(type==2){
  916. if(row.updateCheck){
  917. row.updateFlag='Y'
  918. }else {
  919. row.updateFlag='N'
  920. }
  921. }
  922. if(type==3){
  923. if(row.downCheck){
  924. row.downFlag='Y'
  925. }else {
  926. row.downFlag='N'
  927. }
  928. }
  929. if(type==4){
  930. if(row.deleteCheck){
  931. row.deleteFlag='Y'
  932. }else {
  933. row.deleteFlag='N'
  934. }
  935. }
  936. if(row.searchCheck&&row.updateCheck&&row.downCheck&&row.deleteCheck){
  937. row.checkAll=true
  938. }else{
  939. row.checkAll=false
  940. }
  941. this.$forceUpdate();
  942. },
  943. saveAccessProject(){
  944. let inData={
  945. site:this.$store.state.user.site,
  946. username:this.selectUser.username,
  947. accessProjectList:this.projectRoleList
  948. }
  949. saveAccessProject(inData).then(({data}) => {
  950. if (data && data.code === 0) {
  951. this.$message.success( '操作成功')
  952. this.projectRoleFlag = false
  953. } else {
  954. this.$message.error(data.msg)
  955. }
  956. })
  957. },
  958. //授权项目end
  959. // 保存选中的授权工厂
  960. saveUserAssessSite() {
  961. let accessSiteList = this.selectSitList.map(item => {
  962. let itemSite = {
  963. userid: this.selectUser.username,
  964. site: item
  965. }
  966. return itemSite;
  967. })
  968. let accessSite = {
  969. userid: this.selectUser.username,
  970. accessSiteList: accessSiteList
  971. }
  972. saveUserAccessSiteList(accessSite).then(({data}) => {
  973. if (data.code === 0) {
  974. this.$message.success(data.msg)
  975. this.siteList = []
  976. this.selectSitList = []
  977. this.siteVisible = false
  978. } else {
  979. this.$message.warning(data.msg)
  980. }
  981. })
  982. },
  983. saveBuAssessSite(){
  984. if(this.selectBUList.length==0){
  985. this.$message.warning("请选择BU")
  986. return false;
  987. }
  988. let inList=[];
  989. for (let i = 0; i < this.selectBUList.length; i++) {
  990. let inData={
  991. site:this.$store.state.user.site,
  992. username:this.selectUser.username,
  993. buNo:this.selectBUList[i]
  994. }
  995. inList.push(inData)
  996. }
  997. saveAccessBU(inList).then(({data}) => {
  998. if (data && data.code === 0) {
  999. this.$message.success( '操作成功')
  1000. this.buVisible = false
  1001. } else {
  1002. this.$message.error(data.msg)
  1003. }
  1004. })
  1005. },
  1006. saveRoleAssessSite(){
  1007. if(this.selectRoleList.length==0){
  1008. this.$message.warning("请选择角色")
  1009. return false;
  1010. }
  1011. let inList=[];
  1012. for (let i = 0; i < this.selectRoleList.length; i++) {
  1013. let inData={
  1014. site:this.$store.state.user.site,
  1015. username:this.selectUser.username,
  1016. roleNo:this.selectRoleList[i]
  1017. }
  1018. inList.push(inData)
  1019. }
  1020. saveAccessRole(inList).then(({data}) => {
  1021. if (data && data.code === 0) {
  1022. this.$message.success( '操作成功')
  1023. this.roleVisible = false
  1024. } else {
  1025. this.$message.error(data.msg)
  1026. }
  1027. })
  1028. },
  1029. // 获取用户已授权的工厂列表
  1030. searchUserAccessSiteList() {
  1031. getUserAccessSiteList({userid: this.selectUser.username}).then(({data}) => {
  1032. this.selectSitList = data.dataList
  1033. })
  1034. },
  1035. // 获取所有可用工厂
  1036. searchSiteList() {
  1037. this.siteList=[]
  1038. getSiteList({active: 'Y'}).then(({data}) => {
  1039. if (data.code == 0) {
  1040. this.siteList = data.dataList
  1041. this.searchUserAccessSiteList()
  1042. }
  1043. })
  1044. },
  1045. searchBuList(){
  1046. searchAccessBuList({site:this.$store.state.user.site,
  1047. username: this.selectUser.username,
  1048. active:'Y'}).then(({data}) => {
  1049. this.selectBUList = data.selectBUList
  1050. this.buList=data.buList
  1051. })
  1052. },
  1053. searchRoleList(){
  1054. searchAccessRoleList({site:this.$store.state.user.site,
  1055. username: this.selectUser.username,
  1056. active:'Y'}).then(({data}) => {
  1057. this.selectRoleList = data.selectRoleList
  1058. this.roleList=data.roleList
  1059. })
  1060. },
  1061. // 选中行
  1062. handleCurrentChange(val) {
  1063. this.selectUser = val
  1064. this.showButton = false
  1065. },
  1066. saveUserRoleFlag() {
  1067. let saveList = []
  1068. let currentList = this.checked
  1069. // 当前未选择记录
  1070. if (currentList.length == 0) {
  1071. this.$confirm("当前未选择记录,是否继续?", '删除提示', {
  1072. confirmButtonText: '确定',
  1073. cancelButtonText: '取消',
  1074. }).then(() => {
  1075. let data = {
  1076. userId: this.currentData.userId,
  1077. }
  1078. saveList.push(data);
  1079. this.saveUserBusinessRole(saveList)
  1080. }).catch(() => {
  1081. return
  1082. })
  1083. } else {
  1084. for (let i = 0; i < currentList.length; i++) {
  1085. let data = {
  1086. userId: this.currentData.userId,
  1087. roleItemNo: currentList[i],
  1088. selectFlag: 'Y',
  1089. }
  1090. saveList.push(data);
  1091. }
  1092. this.saveUserBusinessRole(saveList)
  1093. }
  1094. },
  1095. saveUserBusinessRole(saveList) {
  1096. saveUserBusinessRole(saveList).then(({data}) => {
  1097. this.$alert(data.msg, '操作提示', {
  1098. confirmButtonText: '确定',
  1099. callback: action => {
  1100. if (data.code == 0) {
  1101. this.setUp.reviewFlag = false
  1102. }
  1103. this.setUp.saveButton = false
  1104. }
  1105. });
  1106. })
  1107. },
  1108. generateData(row) {
  1109. this.currentData = row
  1110. let queryData = {
  1111. active: 'Y',
  1112. userId: this.currentData.userId,
  1113. }
  1114. getUserBusinessRoleList(queryData).then(({data}) => {
  1115. let rows1Data = data.map.rows1
  1116. let rows2Data = data.map.rows2
  1117. let forData = []
  1118. let checkedList = []
  1119. for (let i = 0; i < rows1Data.length; i++) {
  1120. forData.push({
  1121. key: rows1Data[i].roleItemNo,
  1122. label: rows1Data[i].roleDesc,
  1123. });
  1124. }
  1125. for (let j = 0; j < rows2Data.length; j++) {
  1126. checkedList.push(rows2Data[j].roleItemNo)
  1127. }
  1128. this.transferData = forData;
  1129. this.checked = checkedList
  1130. this.setUp.reviewFlag = true
  1131. })
  1132. },
  1133. // 获取数据列表
  1134. getDataList: throttle(function () {
  1135. this.dataListLoading = true
  1136. this.$http({
  1137. url: this.$http.adornUrl('/sys/user/list'),
  1138. method: 'get',
  1139. params: this.$http.adornParams({
  1140. 'page': this.pageIndex,
  1141. 'limit': this.pageSize,
  1142. 'username': this.dataForm.userName
  1143. })
  1144. }).then(({data}) => {
  1145. if (data && data.code === 0) {
  1146. this.dataList = data.page.list
  1147. this.totalPage = data.page.totalCount
  1148. } else {
  1149. this.dataList = []
  1150. this.totalPage = 0
  1151. }
  1152. this.dataListLoading = false
  1153. })
  1154. }, 1000),
  1155. // 每页数
  1156. sizeChangeHandle(val) {
  1157. this.pageSize = val
  1158. this.pageIndex = 1
  1159. this.getDataList()
  1160. },
  1161. // 当前页
  1162. currentChangeHandle(val) {
  1163. this.pageIndex = val
  1164. this.getDataList()
  1165. },
  1166. // 多选
  1167. selectionChangeHandle(val) {
  1168. this.dataListSelections = val
  1169. },
  1170. // 权限清单模态框
  1171. permissionList(row) {
  1172. this.activeTable = 'factory_information'
  1173. this.userData = row
  1174. this.permissionFlag = true
  1175. },
  1176. // 获取用户工厂权限信息
  1177. getUserAccessSiteInfoList () {
  1178. getUserAccessSiteInfoList(this.userData).then(({data}) => {
  1179. if (data && data.code === 0) {
  1180. this.userSiteList = data.rows
  1181. } else {
  1182. this.$alert(data.msg, '错误', {
  1183. confirmButtonText: '确定'
  1184. })
  1185. }
  1186. })
  1187. },
  1188. // 获取用户BU权限信息
  1189. getUserAccessBUInfoList () {
  1190. getUserAccessBUInfoList(this.userData).then(({data}) => {
  1191. if (data && data.code === 0) {
  1192. this.userBUList = data.rows
  1193. } else {
  1194. this.$alert(data.msg, '错误', {
  1195. confirmButtonText: '确定'
  1196. })
  1197. }
  1198. })
  1199. },
  1200. // 获取用户角色权限信息
  1201. getUserAccessRoleInfoList () {
  1202. getUserAccessRoleInfoList(this.userData).then(({data}) => {
  1203. if (data && data.code === 0) {
  1204. this.userRoleList = data.rows
  1205. } else {
  1206. this.$alert(data.msg, '错误', {
  1207. confirmButtonText: '确定'
  1208. })
  1209. }
  1210. })
  1211. },
  1212. // 获取用户项目权限信息
  1213. getUserAccessProjectInfoList () {
  1214. getUserAccessProjectInfoList(this.userData).then(({data}) => {
  1215. if (data && data.code === 0) {
  1216. this.userProjectList = data.rows
  1217. } else {
  1218. this.$alert(data.msg, '错误', {
  1219. confirmButtonText: '确定'
  1220. })
  1221. }
  1222. })
  1223. },
  1224. // 获取用户字段权限信息
  1225. getUserAccessFieldFunctionInfoList () {
  1226. getUserAccessFieldFunctionInfoList(this.userData).then(({data}) => {
  1227. if (data && data.code === 0) {
  1228. this.userFieldList = data.rows
  1229. } else {
  1230. this.$alert(data.msg, '错误', {
  1231. confirmButtonText: '确定'
  1232. })
  1233. }
  1234. })
  1235. },
  1236. // 新增 / 修改
  1237. addOrUpdateHandle(id) {
  1238. this.addOrUpdateVisible = true
  1239. this.$nextTick(() => {
  1240. this.$refs.addOrUpdate.init(id)
  1241. })
  1242. },
  1243. // 删除
  1244. deleteHandle(row) {
  1245. this.$confirm(`确定要删除 [用户账号 : ${row.username} , 用户名 : ${row.userDisplay}] ?`, '提示', {
  1246. confirmButtonText: '确定',
  1247. cancelButtonText: '取消',
  1248. type: 'warning'
  1249. }).then(() => {
  1250. this.$http({
  1251. url: this.$http.adornUrl('/sys/user/delete'),
  1252. method: 'post',
  1253. data: this.$http.adornData([row.userId], false)
  1254. }).then(({data}) => {
  1255. if (data && data.code === 0) {
  1256. this.$message.success('操作成功')
  1257. this.getDataList()
  1258. } else {
  1259. this.$message.error(data.msg)
  1260. }
  1261. })
  1262. }).catch(() => {
  1263. })
  1264. },
  1265. FieldListModel(){
  1266. searchFieldFunctionList().then(({data}) => {
  1267. this.functionList=data.rows
  1268. });
  1269. this.functionFlag=true;
  1270. },
  1271. accessModel(row){
  1272. this.rowFunctionId=row.functionId;
  1273. searchAccessFieldListByUser({functionId:row.functionId,
  1274. username: this.selectUser.username,
  1275. }).then(({data}) => {
  1276. this.selectFieldList = data.accessFieldList
  1277. this.fieldList=data.fieldList
  1278. })
  1279. this.fieldFlag=true;
  1280. },
  1281. saveAccessFieldListByUser(){
  1282. let inList=[];
  1283. for (let i = 0; i < this.selectFieldList.length; i++) {
  1284. let inData={
  1285. username: this.selectUser.username,
  1286. fieldId:this.selectFieldList[i]
  1287. }
  1288. inList.push(inData)
  1289. }
  1290. let saveData={
  1291. username: this.selectUser.username,
  1292. functionId:this.rowFunctionId,
  1293. accessFieldList:inList,
  1294. }
  1295. saveAccessFieldListByUser(saveData).then(({data}) => {
  1296. if (data && data.code === 0) {
  1297. this.$message.success( '操作成功')
  1298. this.fieldFlag = false
  1299. } else {
  1300. this.$message.error(data.msg)
  1301. }
  1302. })
  1303. },
  1304. closeDataDialog() {
  1305. this.userSiteList=[];
  1306. this.userBUList=[];
  1307. this.userProjectList=[];
  1308. this.userFieldList=[];
  1309. this.siteList=[];
  1310. this.selectSitList=[];
  1311. this.userRoleList=[];
  1312. },
  1313. },
  1314. created() {
  1315. this.getFunctionButtonList()
  1316. }
  1317. }
  1318. </script>
  1319. <style>
  1320. .el-dialog__title {
  1321. line-height: 24px;
  1322. font-size: 16px;
  1323. color: #303133;
  1324. }
  1325. </style>