index.vue 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010
  1. <template>
  2. <div class="page-container">
  3. <div class="search-container" v-show="showSearch">
  4. <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="search_form">
  5. <div class="search_input">
  6. <el-form-item label="姓名">
  7. <el-input v-model="queryParams.realName" placeholder="请输入姓名" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" />
  8. </el-form-item>
  9. <el-form-item label="电话号码">
  10. <el-input v-model="queryParams.phonenumber" placeholder="请输入电话号码" clearable size="small" style="width: 240px" @keyup.enter.native="handleQuery" />
  11. </el-form-item>
  12. </div>
  13. <div class="search_btn">
  14. <el-form-item>
  15. <el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery">搜索</el-button>
  16. <el-button icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
  17. </el-form-item>
  18. </div>
  19. </el-form>
  20. </div>
  21. <div class="content-container">
  22. <!-- 公司部门 -->
  23. <TreeChoice :dataList="deptOptions" nodeKey="id" nodeVal="label" @itemClick="handleNodeClick" />
  24. <div class="main">
  25. <div class="table-nav">
  26. <div class="tags">
  27. <div class="tag">员工</div>
  28. </div>
  29. <!-- 操作 -->
  30. <div class="actions">
  31. <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:user:add']">添加</el-button>
  32. <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['system:user:export']">导出</el-button>
  33. <el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['system:user:import']" style="margin-right: 10px">导入</el-button>
  34. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
  35. </div>
  36. </div>
  37. <!-- 员工列表 -->
  38. <el-table v-loading="loading" border :data="userList">
  39. <el-table-column label="序号" align="center" prop="userId" v-if="columns[0].visible" width="60">
  40. <template slot-scope="scope">
  41. <span>{{ scope.$index + 1 }}</span>
  42. </template>
  43. </el-table-column>
  44. <el-table-column label="头像" align="center" v-if="columns[1].visible" width="60">
  45. <template slot-scope="scope">
  46. <img v-bind:src="scope.row.avatar" class="img-circle img_height" @click="modifyAvatar(scope.row)" />
  47. <!-- <el-image v-else >
  48. <div slot="error" class="image-slot">
  49. <i class="el-icon-picture-outline"></i>
  50. </div>
  51. </el-image> -->
  52. </template>
  53. </el-table-column>
  54. <el-table-column label="姓名" align="center" prop="realName" v-if="columns[2].visible" :show-overflow-tooltip="true" width="120" />
  55. <el-table-column label="公司部门" align="center" prop="deptNames" v-if="columns[3].visible" :show-overflow-tooltip="true" width="160" />
  56. <el-table-column label="级别职务" align="center" prop="levelJobNames" v-if="columns[4].visible" width="160" />
  57. <el-table-column label="性质岗位" align="center" prop="naturePostNames" v-if="columns[5].visible" width="160" />
  58. <el-table-column label="角色权限" align="center" prop="roleJurisdictionNames" v-if="columns[6].visible" width="160" />
  59. <el-table-column label="手机号码" align="center" prop="phonenumber" v-if="columns[7].visible" width="150" />
  60. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  61. <template slot-scope="scope" v-if="scope.row.userId !== 1">
  62. <el-button size="mini" type="text" icon="el-icon-edit" @click="getDutiesPowers(scope.row)" v-hasPermi="['system:user:edit']">职责权力</el-button>
  63. <el-button size="mini" type="text" icon="el-icon-edit" @click="getRolePermissions(scope.row)" v-hasPermi="['system:user:edit']">功能权限</el-button>
  64. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:edit']">数据权限</el-button>
  65. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:edit']">修改</el-button>
  66. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">删除</el-button>
  67. </template>
  68. </el-table-column>
  69. </el-table>
  70. <!-- 分页 -->
  71. <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
  72. </div>
  73. </div>
  74. <!-- 添加或修改用户配置对话框 -->
  75. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  76. <div class="option">
  77. <div class="account"><a href="javascript:void(0);" @click="getAccountInfo">账号信息</a></div>
  78. <div class="basics"><a href="javascript:void(0);" @click="getBasicsInfo">基础信息</a></div>
  79. </div>
  80. <!-- 账号信息 -->
  81. <el-form ref="accountForm" :model="accountForm" :rules="rules" label-width="90px" v-show="accountShow">
  82. <el-row>
  83. <el-col :span="12">
  84. <el-form-item label="序号" prop="userId">
  85. <el-input v-model="accountForm.userId" placeholder="请输入序号" maxlength="30" disabled />
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="12">
  89. <el-form-item label="编号" prop="userNumber">
  90. <el-input v-model="accountForm.userNumber" placeholder="请输入编号" maxlength="30" />
  91. </el-form-item>
  92. </el-col>
  93. </el-row>
  94. <el-row>
  95. <el-col :span="12">
  96. <el-form-item label="姓名" prop="realName">
  97. <el-input v-model="accountForm.realName" placeholder="请输入姓名" maxlength="11" />
  98. </el-form-item>
  99. </el-col>
  100. <el-col :span="12">
  101. <el-form-item label="手机号" prop="phonenumber">
  102. <el-input v-model="accountForm.phonenumber" placeholder="请输入手机号" />
  103. </el-form-item>
  104. </el-col>
  105. </el-row>
  106. <el-row>
  107. <el-col :span="12">
  108. <el-form-item label="账号状态" prop="status">
  109. <el-radio v-model="accountForm.status" label="0">正常</el-radio>
  110. <el-radio v-model="accountForm.status" label="1">停用</el-radio>
  111. </el-form-item>
  112. </el-col>
  113. <el-col :span="12">
  114. <el-form-item label="性别" prop="sex">
  115. <el-radio v-model="accountForm.sex" label="0"></el-radio>
  116. <el-radio v-model="accountForm.sex" label="1"></el-radio>
  117. </el-form-item>
  118. </el-col>
  119. </el-row>
  120. <el-row>
  121. <el-col :span="24">
  122. <el-form-item label="身份证号" prop="idNumber">
  123. <el-input v-model="accountForm.idNumber" placeholder="请输入身份证号" />
  124. </el-form-item>
  125. </el-col>
  126. </el-row>
  127. <el-row>
  128. <el-col :span="24">
  129. <el-form-item label="公司部门" prop="deptIds">
  130. <el-cascader ref="deptCascader" :options="deptOptions" :props="props" clearable style="width: 100%" @change="deptCascaderChange"></el-cascader>
  131. </el-form-item>
  132. </el-col>
  133. </el-row>
  134. <el-row>
  135. <el-col :span="24">
  136. <el-form-item label="职称级别" prop="levelJobIds">
  137. <el-cascader ref="levelCascader" :options="levelList" :props="props" clearable style="width: 100%" @change="levelCascaderChange"></el-cascader>
  138. </el-form-item>
  139. </el-col>
  140. </el-row>
  141. <el-row>
  142. <el-col :span="24">
  143. <el-form-item label="性质岗位" prop="naturePostIds">
  144. <el-cascader ref="natureCascader" :options="natureList" :props="props" clearable style="width: 100%" @change="natureCascaderChange"></el-cascader>
  145. </el-form-item>
  146. </el-col>
  147. </el-row>
  148. </el-form>
  149. <!-- 基础信息 -->
  150. <el-form ref="basicsForm" :model="basicsForm" :rules="rules" label-width="90px" v-show="basicsShow" class="basics_form">
  151. <el-row>
  152. <el-col :span="12">
  153. <el-form-item label="年龄">
  154. <el-input placeholder="请输入年龄" maxlength="30" />
  155. </el-form-item>
  156. </el-col>
  157. <el-col :span="12">
  158. <el-form-item label="出生日期">
  159. <el-input placeholder="请输入出生日期" maxlength="30" />
  160. </el-form-item>
  161. </el-col>
  162. </el-row>
  163. <el-row>
  164. <el-col :span="12">
  165. <el-form-item label="QQ号">
  166. <el-input placeholder="请输入QQ号" maxlength="11" />
  167. </el-form-item>
  168. </el-col>
  169. <el-col :span="12">
  170. <el-form-item label="企业微信号">
  171. <el-input placeholder="请输入企业微信号" />
  172. </el-form-item>
  173. </el-col>
  174. </el-row>
  175. <el-row>
  176. <el-col :span="12">
  177. <el-form-item label="学历">
  178. <el-select placeholder="请选择" style="width: 100%">
  179. <el-optio></el-optio>
  180. </el-select>
  181. </el-form-item>
  182. </el-col>
  183. <el-col :span="12">
  184. <el-form-item label="原籍">
  185. <el-input placeholder="请输入原籍" />
  186. </el-form-item>
  187. </el-col>
  188. </el-row>
  189. <el-row>
  190. <el-col :span="12">
  191. <el-form-item label="现住址">
  192. <el-input placeholder="请输入现住址" />
  193. </el-form-item>
  194. </el-col>
  195. <el-col :span="12">
  196. <el-form-item label="家庭成员">
  197. <el-input placeholder="请输入家庭成员" />
  198. </el-form-item>
  199. </el-col>
  200. </el-row>
  201. <el-row>
  202. <el-col :span="12">
  203. <el-form-item label="婚姻状况">
  204. <el-select placeholder="请选择" style="width: 100%">
  205. <el-optio></el-optio>
  206. </el-select>
  207. </el-form-item>
  208. </el-col>
  209. <el-col :span="12">
  210. <el-form-item label="家庭收入">
  211. <el-input placeholder="请输入家庭收入" />
  212. </el-form-item>
  213. </el-col>
  214. </el-row>
  215. <el-row>
  216. <el-col :span="24">
  217. <el-form-item label="性格">
  218. <el-row>
  219. <el-col :span="6">
  220. <el-checkbox>内向</el-checkbox>
  221. </el-col>
  222. <el-col :span="6">
  223. <el-checkbox>外向</el-checkbox>
  224. </el-col>
  225. <el-col :span="6">
  226. <el-checkbox>中性</el-checkbox>
  227. </el-col>
  228. <el-col :span="6">
  229. <el-checkbox>偏外向</el-checkbox>
  230. </el-col>
  231. <el-col :span="6">
  232. <el-checkbox>保守</el-checkbox>
  233. </el-col>
  234. <el-col :span="6">
  235. <el-checkbox>开放</el-checkbox>
  236. </el-col>
  237. <el-col :span="6">
  238. <el-checkbox>依偎</el-checkbox>
  239. </el-col>
  240. <el-col :span="6">
  241. <el-checkbox>独立</el-checkbox>
  242. </el-col>
  243. </el-row>
  244. </el-form-item>
  245. </el-col>
  246. </el-row>
  247. <el-row>
  248. <el-col :span="24">
  249. <el-form-item label="擅长">
  250. <el-row>
  251. <el-col :span="6">
  252. <el-checkbox>公关</el-checkbox>
  253. </el-col>
  254. <el-col :span="6">
  255. <el-checkbox>销售</el-checkbox>
  256. </el-col>
  257. <el-col :span="6">
  258. <el-checkbox>技术</el-checkbox>
  259. </el-col>
  260. <el-col :span="6">
  261. <el-checkbox>交际</el-checkbox>
  262. </el-col>
  263. <el-col :span="6">
  264. <el-checkbox>管理</el-checkbox>
  265. </el-col>
  266. <el-col :span="6">
  267. <el-checkbox>沟通</el-checkbox>
  268. </el-col>
  269. <el-col :span="6">
  270. <el-checkbox>培训</el-checkbox>
  271. </el-col>
  272. <el-col :span="6">
  273. <el-checkbox>电脑</el-checkbox>
  274. </el-col>
  275. </el-row>
  276. </el-form-item>
  277. </el-col>
  278. </el-row>
  279. <el-row>
  280. <el-col :span="8">
  281. <el-form-item label="原工作单位">
  282. <el-input placeholder="请输入原单位" />
  283. </el-form-item>
  284. </el-col>
  285. <el-col :span="8">
  286. <el-form-item label="职务">
  287. <el-input placeholder="请输入职务" />
  288. </el-form-item>
  289. </el-col>
  290. <el-col :span="8">
  291. <el-form-item label="收入">
  292. <el-input placeholder="请输入收入" />
  293. </el-form-item>
  294. </el-col>
  295. </el-row>
  296. <el-row>
  297. <el-col :span="8">
  298. <el-form-item label="开始时间">
  299. <el-input placeholder="请输入开始时间" />
  300. </el-form-item>
  301. </el-col>
  302. <el-col :span="8">
  303. <el-form-item label="结束时间">
  304. <el-input placeholder="请输入结束时间" />
  305. </el-form-item>
  306. </el-col>
  307. <el-col :span="8">
  308. <el-form-item>
  309. <el-button class="addInfo" type="primary" icon="el-icon-plus">添加一条</el-button>
  310. </el-form-item>
  311. </el-col>
  312. </el-row>
  313. <el-row>
  314. <el-col :span="24">
  315. <el-form-item label="工作特长">
  316. <el-input placeholder="请输入工作特长" />
  317. </el-form-item>
  318. </el-col>
  319. </el-row>
  320. <el-row>
  321. <el-col :span="24">
  322. <el-form-item label="期望职位">
  323. <el-input placeholder="请输入期望职位" />
  324. </el-form-item>
  325. </el-col>
  326. </el-row>
  327. <el-row>
  328. <el-col :span="24">
  329. <el-form-item label="期望收入">
  330. <el-input placeholder="请输入期望收入" />
  331. </el-form-item>
  332. </el-col>
  333. </el-row>
  334. <el-row>
  335. <el-form-item label="性格">
  336. <el-row>
  337. <el-col :span="6">
  338. <el-checkbox>靠父母</el-checkbox>
  339. </el-col>
  340. <el-col :span="6">
  341. <el-checkbox>依偎另一半</el-checkbox>
  342. </el-col>
  343. <el-col :span="6">
  344. <el-checkbox>独立</el-checkbox>
  345. </el-col>
  346. <el-col :span="6">
  347. <el-checkbox>自强</el-checkbox>
  348. </el-col>
  349. </el-row>
  350. </el-form-item>
  351. </el-row>
  352. <el-row>
  353. <el-col :span="24">
  354. <el-form-item label="梦想">
  355. <el-input placeholder="请输入梦想" />
  356. </el-form-item>
  357. </el-col>
  358. </el-row>
  359. <el-row>
  360. <el-col :span="24">
  361. <el-form-item label="喜爱">
  362. <el-row>
  363. <el-col :span="6">
  364. <el-checkbox>爬山</el-checkbox>
  365. </el-col>
  366. <el-col :span="6">
  367. <el-checkbox>看海</el-checkbox>
  368. </el-col>
  369. <el-col :span="6">
  370. <el-checkbox>旅游</el-checkbox>
  371. </el-col>
  372. <el-col :span="6">
  373. <el-checkbox>逛街</el-checkbox>
  374. </el-col>
  375. <el-col :span="6">
  376. <el-checkbox>看电视</el-checkbox>
  377. </el-col>
  378. <el-col :span="6">
  379. <el-checkbox>玩游戏</el-checkbox>
  380. </el-col>
  381. <el-col :span="6">
  382. <el-checkbox>锻炼</el-checkbox>
  383. </el-col>
  384. </el-row>
  385. </el-form-item>
  386. </el-col>
  387. </el-row>
  388. <el-row>
  389. <el-form-item label="身高">
  390. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  391. <el-checkbox>大高个</el-checkbox>
  392. </el-col>
  393. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  394. <el-checkbox>高个</el-checkbox>
  395. </el-col>
  396. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  397. <el-checkbox>正常</el-checkbox>
  398. </el-col>
  399. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  400. <el-checkbox>偏矮</el-checkbox>
  401. </el-col>
  402. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  403. <el-checkbox>矮个</el-checkbox>
  404. </el-col>
  405. </el-form-item>
  406. </el-row>
  407. <el-row>
  408. <el-form-item label="颜值">
  409. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  410. <el-checkbox>很好</el-checkbox>
  411. </el-col>
  412. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  413. <el-checkbox>较好</el-checkbox>
  414. </el-col>
  415. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  416. <el-checkbox>正常</el-checkbox>
  417. </el-col>
  418. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  419. <el-checkbox>偏弱</el-checkbox>
  420. </el-col>
  421. <el-col :xs="12" :sm="12" :lg="{ span: '4-8' }" class="card-panel-col">
  422. <el-checkbox>很弱</el-checkbox>
  423. </el-col>
  424. </el-form-item>
  425. </el-row>
  426. <el-row>
  427. <el-col :span="12">
  428. <el-form-item label="体质">
  429. <el-select placeholder="请选择" style="width: 100%">
  430. <el-optio></el-optio>
  431. </el-select>
  432. </el-form-item>
  433. </el-col>
  434. <el-col :span="12">
  435. <el-form-item label="病史">
  436. <el-select placeholder="请选择" style="width: 100%">
  437. <el-optio></el-optio>
  438. </el-select>
  439. </el-form-item>
  440. </el-col>
  441. </el-row>
  442. <el-row>
  443. <el-form-item label="刑法">
  444. <el-row>
  445. <el-col :span="6">
  446. <el-checkbox></el-checkbox>
  447. </el-col>
  448. <el-col :span="6">
  449. <el-checkbox>拘留</el-checkbox>
  450. </el-col>
  451. <el-col :span="6">
  452. <el-checkbox>取保</el-checkbox>
  453. </el-col>
  454. <el-col :span="6">
  455. <el-checkbox>实刑</el-checkbox>
  456. </el-col>
  457. </el-row>
  458. </el-form-item>
  459. </el-row>
  460. <el-row>
  461. <el-col :span="12">
  462. <el-form-item label="备用联系人">
  463. <el-select placeholder="请选择" style="width: 100%">
  464. <el-optio></el-optio>
  465. </el-select>
  466. </el-form-item>
  467. </el-col>
  468. <el-col :span="12">
  469. <el-form-item label="性别">
  470. <el-select placeholder="请选择" style="width: 100%">
  471. <el-optio></el-optio>
  472. </el-select>
  473. </el-form-item>
  474. </el-col>
  475. </el-row>
  476. <el-row>
  477. <el-col :span="24">
  478. <el-form-item label="与之关系">
  479. <el-row>
  480. <el-col :span="6">
  481. <el-checkbox>夫妻</el-checkbox>
  482. </el-col>
  483. <el-col :span="6">
  484. <el-checkbox>父母</el-checkbox>
  485. </el-col>
  486. <el-col :span="6">
  487. <el-checkbox>兄弟</el-checkbox>
  488. </el-col>
  489. <el-col :span="6">
  490. <el-checkbox>姐妹</el-checkbox>
  491. </el-col>
  492. <el-col :span="6">
  493. <el-checkbox>朋友</el-checkbox>
  494. </el-col>
  495. <el-col :span="6">
  496. <el-checkbox>同学</el-checkbox>
  497. </el-col>
  498. <el-col :span="6">
  499. <el-checkbox>战友</el-checkbox>
  500. </el-col>
  501. </el-row>
  502. </el-form-item>
  503. </el-col>
  504. </el-row>
  505. <el-row>
  506. <el-col :span="12">
  507. <el-form-item label="联系电话">
  508. <el-input placeholder="请输入联系电话" />
  509. </el-form-item>
  510. </el-col>
  511. <el-col :span="12">
  512. <el-form-item label="工作单位">
  513. <el-input placeholder="请输入工作单位" />
  514. </el-form-item>
  515. </el-col>
  516. </el-row>
  517. </el-form>
  518. <div slot="footer" class="dialog-footer">
  519. <el-button size="small" @click="cancel">取 消</el-button>
  520. <el-button size="small" type="primary" @click="submitForm">确 定</el-button>
  521. </div>
  522. </el-dialog>
  523. <!-- 用户导入对话框 -->
  524. <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  525. <el-upload
  526. ref="upload"
  527. :limit="1"
  528. accept=".xlsx, .xls"
  529. :headers="upload.headers"
  530. :action="upload.url + '?updateSupport=' + upload.updateSupport"
  531. :disabled="upload.isUploading"
  532. :on-progress="handleFileUploadProgress"
  533. :on-success="handleFileSuccess"
  534. :auto-upload="false"
  535. drag
  536. >
  537. <i class="el-icon-upload"></i>
  538. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  539. <div class="el-upload__tip text-center" slot="tip">
  540. <div class="el-upload__tip" slot="tip"> <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据 </div>
  541. <span>仅允许导入xls、xlsx格式文件。</span>
  542. <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
  543. </div>
  544. </el-upload>
  545. <div slot="footer" class="dialog-footer">
  546. <el-button size="small" type="primary" @click="submitFileForm">确 定</el-button>
  547. <el-button size="small" @click="upload.open = false">取 消</el-button>
  548. </div>
  549. </el-dialog>
  550. <!-- 修改角色权限对话框 -->
  551. <el-dialog title="功能权限" :visible.sync="dialogTableRolePermissions">
  552. <el-table border>
  553. <el-table-column label="名称" align="center" width="180"></el-table-column>
  554. <el-table-column label="描述" align="center"></el-table-column>
  555. </el-table>
  556. <div slot="footer" class="dialog-footer">
  557. <el-button size="small" @click="cancalRolePermissions">取 消</el-button>
  558. <el-button size="small" type="primary" @click="saveRolePermissions">保 存</el-button>
  559. </div>
  560. </el-dialog>
  561. <!-- 责权信息对话框 -->
  562. <el-dialog title="责权信息" :visible.sync="dialogPower" width="30%" :before-close="handleClose">
  563. <div class="">
  564. <span>级别职务:</span>
  565. <el-select v-model="jodId" placeholder="请选择" @change="changeJob()">
  566. <el-option v-for="item in levelJobs" :key="item.jobId" :label="item.jobName" :value="item.jobId"> </el-option>
  567. </el-select>
  568. </div>
  569. <div class="responsibility">
  570. <span>责任</span>
  571. </div>
  572. <el-input type="textarea" :rows="3" v-model="responsibility" :disabled="true" placeholder="请输入内容"> </el-input>
  573. <div class="responsibility">
  574. <span>权利</span>
  575. </div>
  576. <el-input type="textarea" :rows="3" v-model="right" :disabled="true" placeholder="请输入内容"> </el-input>
  577. </el-dialog>
  578. <!-- 修改头像对话框 -->
  579. <userAvatar ref="userAvatar" />
  580. </div>
  581. </template>
  582. <script>
  583. import { getUser, delUser, addUser, updateUser, getStaffList, getLevelTreeSelect, getResponsibilityRight, getNatureTreeSelect, getAuthRole } from '@/api/system/employeenInfo'
  584. import { getToken } from '@/utils/auth'
  585. import { treeselect } from '@/api/system/dept'
  586. import userAvatar from './profile/userAvatar.vue'
  587. import Treeselect from '@riophae/vue-treeselect'
  588. import TreeChoice from '@/components/treeChoice/index.vue'
  589. import '@riophae/vue-treeselect/dist/vue-treeselect.css'
  590. export default {
  591. name: 'employeenInfo',
  592. dicts: ['sys_normal_disable', 'sys_user_sex'],
  593. components: { Treeselect, TreeChoice, userAvatar },
  594. data() {
  595. return {
  596. // 遮罩层
  597. loading: true,
  598. // 显示搜索条件
  599. showSearch: true,
  600. // 总条数
  601. total: 0,
  602. // 用户表格数据
  603. userList: null,
  604. // 弹出层标题
  605. title: '',
  606. // 部门树选项
  607. deptOptions: undefined,
  608. // 是否显示弹出层
  609. open: false,
  610. // 岗位选项
  611. postOptions: [],
  612. // 角色选项
  613. roleOptions: [],
  614. // 账号表单参数
  615. accountForm: {
  616. userId: null
  617. },
  618. // 基础表单参数
  619. basicsForm: {},
  620. defaultProps: {
  621. children: 'children',
  622. label: 'label'
  623. },
  624. // 用户导入参数
  625. upload: {
  626. // 是否显示弹出层(用户导入)
  627. open: false,
  628. // 弹出层标题(用户导入)
  629. title: '',
  630. // 是否禁用上传
  631. isUploading: false,
  632. // 是否更新已经存在的用户数据
  633. updateSupport: 0,
  634. // 设置上传的请求头部
  635. headers: { Authorization: 'Bearer ' + getToken() },
  636. // 上传的地址
  637. url: process.env.VUE_APP_BASE_API + '/system/user/importData'
  638. },
  639. // 查询参数
  640. queryParams: {
  641. pageNum: 1,
  642. pageSize: 10,
  643. realName: undefined,
  644. phonenumber: undefined
  645. },
  646. // 列信息
  647. columns: [
  648. { key: 0, label: `序号`, visible: true },
  649. { key: 1, label: `头像`, visible: true },
  650. { key: 2, label: `姓名`, visible: true },
  651. { key: 3, label: `公司部门`, visible: true },
  652. { key: 4, label: `级别职务`, visible: true },
  653. { key: 5, label: `性质岗位`, visible: true },
  654. { key: 6, label: `角色权限`, visible: true },
  655. { key: 7, label: `手机号码`, visible: true }
  656. ],
  657. // 表单校验
  658. rules: {
  659. // userName: [
  660. // { required: true, message: '用户名称不能为空', trigger: 'blur' },
  661. // { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
  662. // ],
  663. // nickName: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
  664. // password: [
  665. // { required: true, message: '用户密码不能为空', trigger: 'blur' },
  666. // { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
  667. // ],
  668. // email: [
  669. // {
  670. // type: 'email',
  671. // message: "'请输入正确的邮箱地址",
  672. // trigger: ['blur', 'change']
  673. // }
  674. // ],
  675. // phonenumber: [
  676. // {
  677. // pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  678. // message: '请输入正确的手机号码',
  679. // trigger: 'blur'
  680. // }
  681. // ]
  682. },
  683. dialogTableRolePermissions: false, // 角色权限弹出层
  684. dialogPower: false, // 责权信息弹出层
  685. accountShow: true, // 账号信息
  686. basicsShow: false, // 基础信息
  687. props: { multiple: true }, // 联级多选
  688. // propsLevel: { multiple: true },
  689. levelList: [], // 级别列表
  690. natureList: [], // 性质岗位列表
  691. levelJobs: [], // 责权信息列表
  692. jodId: '', // 职位id
  693. responsibility: '', // 职责
  694. right: '', // 权力
  695. }
  696. },
  697. created() {
  698. this.getList()
  699. this.getTreeselect()
  700. },
  701. methods: {
  702. /** 查询用户列表 */
  703. getList() {
  704. this.loading = true
  705. getStaffList(this.queryParams).then((response) => {
  706. this.userList = response.rows
  707. this.total = response.total
  708. this.loading = false
  709. })
  710. },
  711. /** 查询部门下拉树结构 */
  712. getTreeselect() {
  713. treeselect().then((response) => {
  714. this.deptOptions = response.data
  715. })
  716. },
  717. // 节点单击事件
  718. handleNodeClick(data) {
  719. this.queryParams.deptId = data.id
  720. this.getList()
  721. },
  722. // 取消按钮
  723. cancel() {
  724. this.open = false
  725. this.reset()
  726. },
  727. // 表单重置
  728. reset() {
  729. this.form = {
  730. userId: undefined,
  731. deptId: undefined,
  732. // userName: undefined,
  733. nickName: undefined,
  734. password: undefined,
  735. phonenumber: undefined,
  736. email: undefined,
  737. sex: undefined,
  738. status: '0',
  739. remark: undefined,
  740. postIds: [],
  741. roleIds: []
  742. }
  743. this.resetForm('form')
  744. },
  745. /** 搜索按钮操作 */
  746. handleQuery() {
  747. this.queryParams.pageNum = 1
  748. this.getList()
  749. },
  750. /** 重置按钮操作 */
  751. resetQuery() {
  752. this.resetForm('queryForm')
  753. this.handleQuery()
  754. },
  755. /** 新增按钮操作 */
  756. handleAdd() {
  757. this.reset()
  758. this.getTreeselect()
  759. this.open = true
  760. this.title = '添加用户'
  761. this.getLevelList()
  762. this.getNatureList()
  763. this.accountForm.userId =
  764. Math.max.apply(
  765. Math,
  766. this.userList.map(function (item) {
  767. return item.userId
  768. })
  769. ) + 1
  770. // getUser().then((response) => {
  771. // // this.postOptions = response.posts
  772. // // this.roleOptions = response.roles
  773. // // this.form.password = this.initPassword
  774. // })
  775. },
  776. // 修改角色权限
  777. getRolePermissions(row) {
  778. getAuthRole(row.userId).then((res) => {
  779. console.log(res)
  780. })
  781. this.dialogTableRolePermissions = true
  782. },
  783. // 保存角色权限修改
  784. saveRolePermissions() {
  785. this.dialogTableRolePermissions = false
  786. },
  787. // 取消角色权限修改
  788. cancalRolePermissions() {
  789. this.dialogTableRolePermissions = false
  790. },
  791. // 职责权限
  792. getDutiesPowers(row) {
  793. let staff = this.userList.find((item, index, c) => item.userId === row.userId)
  794. this.levelJobs = staff.levelJobs
  795. this.jodId = this.levelJobs[0].jobId
  796. console.log(this.levelJobs)
  797. this.dialogPower = true
  798. },
  799. // 选择职责权限
  800. changeJob(val) {
  801. // console.log(val)
  802. console.log(123)
  803. },
  804. // 账号信息
  805. getAccountInfo() {
  806. this.accountShow = true
  807. this.basicsShow = false
  808. },
  809. // 基础信息
  810. getBasicsInfo() {
  811. this.accountShow = false
  812. this.basicsShow = true
  813. },
  814. // 修改头像
  815. modifyAvatar(row) {
  816. this.$refs.userAvatar.editCropper()
  817. },
  818. // 关闭责权信息
  819. handleClose() {
  820. this.dialogPower = false
  821. },
  822. //获取级别数据
  823. getLevelList() {
  824. getLevelTreeSelect().then((res) => {
  825. if (res.code == 200) {
  826. this.levelList = res.data
  827. } else {
  828. this.$msg({ type: 'error', message: res.msg })
  829. }
  830. })
  831. },
  832. // 获取性质岗位数据
  833. getNatureList() {
  834. getNatureTreeSelect().then((res) => {
  835. if (res.code == 200) {
  836. this.natureList = res.data
  837. } else {
  838. this.$msg({ type: 'error', message: res.msg })
  839. }
  840. })
  841. },
  842. // 部门级联选择
  843. deptCascaderChange(val) {
  844. let getCheckedNodes = this.$refs.deptCascader.getCheckedNodes()
  845. const newArr = getCheckedNodes.map((item, index, c) => item.data.id)
  846. this.accountForm.deptIds = newArr.join(',')
  847. console.log(this.accountForm.deptIds)
  848. },
  849. // 职称级别级联选择
  850. levelCascaderChange(val) {
  851. let getCheckedNodes = this.$refs.levelCascader.getCheckedNodes()
  852. const newArr = getCheckedNodes.map((item, index, c) => item.data.id)
  853. this.accountForm.levelJobIds = newArr.join(',')
  854. console.log(this.accountForm.levelJobIds)
  855. },
  856. // 性质岗位级联选择
  857. natureCascaderChange(val) {
  858. let getCheckedNodes = this.$refs.natureCascader.getCheckedNodes()
  859. const newArr = getCheckedNodes.map((item, index, c) => item.data.id)
  860. this.accountForm.naturePostIds = newArr.join(',')
  861. console.log(this.accountForm.naturePostIds)
  862. },
  863. /** 修改按钮操作 */
  864. handleUpdate(row) {
  865. this.reset()
  866. this.getTreeselect()
  867. const userId = row.userId || this.ids
  868. getUser(userId).then((response) => {
  869. this.form = response.data
  870. this.postOptions = response.posts
  871. this.roleOptions = response.roles
  872. this.form.postIds = response.postIds
  873. this.form.roleIds = response.roleIds
  874. this.open = true
  875. this.title = '修改用户'
  876. this.form.password = ''
  877. })
  878. },
  879. /** 提交按钮 */
  880. submitForm: function () {
  881. console.log(this.accountForm)
  882. this.$refs['accountForm'].validate((valid) => {
  883. if (valid) {
  884. if (this.form.userId != undefined) {
  885. updateUser(this.form).then((response) => {
  886. this.$modal.msgSuccess('修改成功')
  887. this.open = false
  888. this.getList()
  889. })
  890. } else {
  891. addUser(this.accountForm).then((response) => {
  892. this.$modal.msgSuccess('新增成功')
  893. this.open = false
  894. this.getList()
  895. })
  896. }
  897. }
  898. })
  899. },
  900. /** 删除按钮操作 */
  901. handleDelete(row) {
  902. // const userIds = row.userId
  903. this.$modal
  904. .confirm('是否确认删除用户编号为"' + row.userId + '"的数据项?')
  905. .then(function () {
  906. return delUser(row.userId)
  907. })
  908. .then(() => {
  909. this.getList()
  910. this.$modal.msgSuccess('删除成功')
  911. })
  912. .catch(() => {})
  913. },
  914. /** 导出按钮操作 */
  915. handleExport() {
  916. this.download(
  917. 'system/user/export',
  918. {
  919. ...this.queryParams
  920. },
  921. `user_${new Date().getTime()}.xlsx`
  922. )
  923. },
  924. /** 导入按钮操作 */
  925. handleImport() {
  926. this.upload.title = '用户导入'
  927. this.upload.open = true
  928. },
  929. /** 下载模板操作 */
  930. importTemplate() {
  931. this.download('system/user/importTemplate', {}, `user_template_${new Date().getTime()}.xlsx`)
  932. },
  933. // 文件上传中处理
  934. handleFileUploadProgress(event, file, fileList) {
  935. this.upload.isUploading = true
  936. },
  937. // 文件上传成功处理
  938. handleFileSuccess(response, file, fileList) {
  939. this.upload.open = false
  940. this.upload.isUploading = false
  941. this.$refs.upload.clearFiles()
  942. this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true })
  943. this.getList()
  944. },
  945. // 提交上传文件
  946. submitFileForm() {
  947. this.$refs.upload.submit()
  948. }
  949. }
  950. }
  951. </script>
  952. <style scoped>
  953. .responsibility {
  954. width: 108px;
  955. height: 32px;
  956. margin-top: 20px;
  957. font-weight: bold;
  958. }
  959. .option {
  960. display: flex;
  961. margin-bottom: 10px;
  962. border-bottom: 1px solid #dfe6ec;
  963. }
  964. .account {
  965. width: 90px;
  966. height: 40px;
  967. text-align: center;
  968. line-height: 40px;
  969. font-size: 14px;
  970. border: 1px solid #dfe6ec;
  971. border-top-left-radius: 5px;
  972. border-right: none;
  973. border-bottom: none;
  974. }
  975. .basics {
  976. width: 90px;
  977. height: 40px;
  978. text-align: center;
  979. line-height: 40px;
  980. font-size: 14px;
  981. border: 1px solid #dfe6ec;
  982. border-bottom: none;
  983. }
  984. .basics_form {
  985. overflow: auto;
  986. height: 600px;
  987. }
  988. .img_height {
  989. height: 32px;
  990. width: 32px;
  991. vertical-align: middle;
  992. cursor: pointer;
  993. }
  994. .el-col-lg-4-8 {
  995. width: 20%;
  996. }
  997. .search_form {
  998. display: flex;
  999. justify-content: space-between;
  1000. }
  1001. .search_form .el-form-item {
  1002. margin-bottom: 0;
  1003. }
  1004. </style>