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.

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