index.vue 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180
  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. </template>
  48. </el-table-column>
  49. <el-table-column label="姓名" align="center" prop="realName" v-if="columns[2].visible" :show-overflow-tooltip="true" width="120" />
  50. <el-table-column label="公司部门" align="center" prop="deptNames" v-if="columns[3].visible" :show-overflow-tooltip="true" width="160" />
  51. <el-table-column label="级别职务" align="center" prop="levelJobNames" v-if="columns[4].visible" :show-overflow-tooltip="true" width="160" />
  52. <el-table-column label="性质岗位" align="center" prop="naturePostNames" v-if="columns[5].visible" :show-overflow-tooltip="true" width="160" />
  53. <el-table-column label="角色权限" align="center" v-if="columns[6].visible" width="160">
  54. <template slot-scope="scope">
  55. <span>{{ scope.row.roleNames + '/' + scope.row.dataRoleNames }}</span>
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="手机号码" align="center" prop="phoneNumber" v-if="columns[7].visible" width="150" />
  59. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  60. <template slot-scope="scope" v-if="scope.row.userId !== 1">
  61. <el-button size="mini" type="text" icon="el-icon-edit" @click="getDutiesPowers(scope.row)" v-hasPermi="['system:user:edit']">职责权力</el-button>
  62. <el-button size="mini" type="text" icon="el-icon-edit" @click="getRolePermissions(scope.row)" v-hasPermi="['system:user:edit']">功能权限</el-button>
  63. <el-button size="mini" type="text" icon="el-icon-edit" @click="getDataRole(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-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">删除</el-button>
  66. </template>
  67. </el-table-column>
  68. </el-table>
  69. <!-- 分页 -->
  70. <pagination :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
  71. </div>
  72. </div>
  73. <!-- 添加或修改用户配置对话框 -->
  74. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  75. <div class="option">
  76. <div class="account"><a href="javascript:void(0);" @click="getAccountInfo">账号信息</a></div>
  77. <div class="basics"><a href="javascript:void(0);" @click="getBasicsInfo">基础信息</a></div>
  78. </div>
  79. <!-- 账号信息 -->
  80. <el-form ref="accountForm" :model="accountForm" :rules="accountFormRules" label-width="90px" v-show="accountShow">
  81. <el-row>
  82. <el-col :span="12">
  83. <el-form-item label="序号" prop="userId">
  84. <el-input v-model="accountForm.serialNumber" placeholder="请输入序号" maxlength="30" disabled />
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="12">
  88. <el-form-item label="编号" prop="userNumber">
  89. <el-input v-model="accountForm.userNumber" placeholder="请输入编号" maxlength="30" />
  90. </el-form-item>
  91. </el-col>
  92. </el-row>
  93. <el-row>
  94. <el-col :span="12">
  95. <el-form-item label="姓名" prop="realName">
  96. <el-input v-model="accountForm.realName" placeholder="请输入姓名" maxlength="11" />
  97. </el-form-item>
  98. </el-col>
  99. <el-col :span="12">
  100. <el-form-item label="手机号" prop="phoneNumber">
  101. <el-input v-model="accountForm.phoneNumber" placeholder="请输入手机号" />
  102. </el-form-item>
  103. </el-col>
  104. </el-row>
  105. <el-row>
  106. <el-col :span="12">
  107. <el-form-item label="账号状态" prop="status">
  108. <el-radio v-model="accountForm.status" v-for="dict in dict.type.sys_account_status" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
  109. </el-form-item>
  110. </el-col>
  111. <el-col :span="12">
  112. <el-form-item label="性别" prop="sex">
  113. <el-radio v-model="accountForm.sex" v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
  114. </el-form-item>
  115. </el-col>
  116. </el-row>
  117. <el-row>
  118. <el-col :span="24">
  119. <el-form-item label="身份证号" prop="idNumber">
  120. <el-input v-model="accountForm.idNumber" placeholder="请输入身份证号" />
  121. </el-form-item>
  122. </el-col>
  123. </el-row>
  124. <el-row>
  125. <el-col :span="24">
  126. <el-form-item label="公司部门" prop="deptIds">
  127. <Treeselect
  128. v-model="accountForm.deptIds"
  129. noChildrenText="无数据"
  130. :disable-branch-nodes="true"
  131. search-nested
  132. :options="deptOptions"
  133. :multiple="true"
  134. placeholder="选择公司部门"
  135. />
  136. </el-form-item>
  137. </el-col>
  138. </el-row>
  139. <el-row>
  140. <el-col :span="24">
  141. <el-form-item label="职称级别" prop="levelJobIds">
  142. <Treeselect
  143. v-model="accountForm.levelJobIds"
  144. noChildrenText="无数据"
  145. :disable-branch-nodes="true"
  146. search-nested
  147. :options="levelList"
  148. :multiple="true"
  149. placeholder="选择职称级别"
  150. />
  151. </el-form-item>
  152. </el-col>
  153. </el-row>
  154. <el-row>
  155. <el-col :span="24">
  156. <el-form-item label="性质岗位" prop="naturePostIds">
  157. <Treeselect
  158. v-model="accountForm.naturePostIds"
  159. noChildrenText="无数据"
  160. :disable-branch-nodes="true"
  161. search-nested
  162. :options="natureList"
  163. :multiple="true"
  164. placeholder="选择性质岗位"
  165. />
  166. </el-form-item>
  167. </el-col>
  168. </el-row>
  169. </el-form>
  170. <!-- 基础信息 -->
  171. <el-form ref="basicsForm" :model="basicsForm" :rules="basicsRules" label-width="90px" v-show="basicsShow" class="basics_form">
  172. <el-row>
  173. <el-col :span="12">
  174. <el-form-item label="年龄" prop="age">
  175. <el-input placeholder="请填写年龄" disabled :value="ageInfo.age" maxlength="30" />
  176. </el-form-item>
  177. </el-col>
  178. <el-col :span="12">
  179. <el-form-item label="出生日期" prop="dateOfBirth">
  180. <el-input placeholder="请填写出生日期" disabled :value="ageInfo.birthday" maxlength="30" />
  181. </el-form-item>
  182. </el-col>
  183. </el-row>
  184. <el-row>
  185. <el-col :span="12">
  186. <el-form-item label="QQ号">
  187. <el-input placeholder="请输入QQ号" v-model="basicsForm.qqNumber" maxlength="11" />
  188. </el-form-item>
  189. </el-col>
  190. <el-col :span="12">
  191. <el-form-item label="企业微信号">
  192. <el-input placeholder="请输入企业微信号" v-model="basicsForm.wxUserId" />
  193. </el-form-item>
  194. </el-col>
  195. </el-row>
  196. <el-row>
  197. <el-col :span="12">
  198. <el-form-item label="学历" prop="education">
  199. <el-select placeholder="请选择" v-model="basicsForm.education" style="width: 100%">
  200. <el-option v-for="dict in dict.type.sys_employee_education" :key="dict.value" :value="dict.value" :label="dict.value">{{ dict.label }}</el-option>
  201. </el-select>
  202. </el-form-item>
  203. </el-col>
  204. <el-col :span="12">
  205. <el-form-item label="原籍" prop="origin">
  206. <el-input placeholder="请输入原籍" v-model="basicsForm.origin" />
  207. </el-form-item>
  208. </el-col>
  209. </el-row>
  210. <el-row>
  211. <el-col :span="12">
  212. <el-form-item label="现住址" prop="currentAddress">
  213. <el-input placeholder="请输入现住址" v-model="basicsForm.currentAddress" />
  214. </el-form-item>
  215. </el-col>
  216. <el-col :span="12">
  217. <el-form-item label="家庭成员">
  218. <el-input placeholder="请输入家庭成员" v-model="basicsForm.memberOfFamily" />
  219. </el-form-item>
  220. </el-col>
  221. </el-row>
  222. <el-row>
  223. <el-col :span="12">
  224. <el-form-item label="婚姻状况" prop="maritalStatus">
  225. <el-select placeholder="请选择" v-model="basicsForm.maritalStatus" style="width: 100%">
  226. <el-option v-for="dict in dict.type.sys_marital_status" :key="dict.value" :value="dict.value" :label="dict.label">{{ dict.label }}</el-option>
  227. </el-select>
  228. </el-form-item>
  229. </el-col>
  230. <el-col :span="12">
  231. <el-form-item label="家庭收入">
  232. <el-input placeholder="请输入家庭收入" v-model="basicsForm.householdIncome" />
  233. </el-form-item>
  234. </el-col>
  235. </el-row>
  236. <el-row>
  237. <el-col :span="24">
  238. <el-form-item label="性格">
  239. <el-row>
  240. <el-col :span="6" v-for="dict in dict.type.sys_employee_personality" :key="dict.value">
  241. <el-radio v-model="basicsForm.character" :label="dict.value">{{ dict.label }}</el-radio>
  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-checkbox-group v-model="basicsForm.specialty">
  252. <el-col :span="6" v-for="dict in dict.type.sys_staff_adept" :key="dict.value">
  253. <el-checkbox :label="dict.label"></el-checkbox>
  254. </el-col>
  255. </el-checkbox-group> -->
  256. <el-checkbox-group v-model="basicsForm.specialty">
  257. <el-col :span="6" v-for="dict in dict.type.sys_staff_adept" :key="dict.value">
  258. <el-checkbox :label="dict.value">{{ dict.label }}</el-checkbox>
  259. </el-col>
  260. </el-checkbox-group>
  261. </el-row>
  262. </el-form-item>
  263. </el-col>
  264. </el-row>
  265. <el-row class="description" v-for="item in basicsForm.descriptionJson" :key="item.id">
  266. <el-row>
  267. <el-col :span="8">
  268. <el-form-item label="原工作单位">
  269. <el-input placeholder="请输入原单位" v-model="item.name" />
  270. </el-form-item>
  271. </el-col>
  272. <el-col :span="8">
  273. <el-form-item label="职务">
  274. <el-input placeholder="请输入职务" v-model="item.duty" />
  275. </el-form-item>
  276. </el-col>
  277. <el-col :span="8">
  278. <el-form-item label="收入">
  279. <el-input placeholder="请输入收入" v-model="item.inCome" />
  280. </el-form-item>
  281. </el-col>
  282. </el-row>
  283. <el-row>
  284. <el-col :span="8">
  285. <el-form-item label="开始时间">
  286. <el-input placeholder="请输入开始时间" v-model="item.startDate" />
  287. </el-form-item>
  288. </el-col>
  289. <el-col :span="8">
  290. <el-form-item label="结束时间">
  291. <el-input placeholder="请输入结束时间" v-model="item.endDate" />
  292. </el-form-item>
  293. </el-col>
  294. <el-col :span="8">
  295. <div style="margin-left: 40px">
  296. <el-button class="addInfo" size="mini" type="primary" icon="el-icon-plus" @click="addDescription(item.id)" v-if="isLast(item.id)" :disabled="!isClick(item.id)"
  297. >添加一条</el-button
  298. >
  299. <el-button class="addInfo" size="mini" type="primary" icon="el-icon-plus" @click="delDescription(item.id)" v-if="item.id != 1">删除本条</el-button>
  300. </div>
  301. </el-col>
  302. </el-row>
  303. </el-row>
  304. <el-row class="description">
  305. <el-col :span="24">
  306. <el-form-item label="工作特长" prop="workExpertise">
  307. <el-input placeholder="请输入工作特长" v-model="basicsForm.workExpertise" />
  308. </el-form-item>
  309. </el-col>
  310. </el-row>
  311. <el-row>
  312. <el-col :span="24">
  313. <el-form-item label="期望职位" prop="workDesire">
  314. <el-input placeholder="请输入期望职位" v-model="basicsForm.workDesire" />
  315. </el-form-item>
  316. </el-col>
  317. </el-row>
  318. <el-row>
  319. <el-col :span="24">
  320. <el-form-item label="期望收入" prop="incomeDesire">
  321. <el-input placeholder="请输入期望收入" v-model="basicsForm.incomeDesire" />
  322. </el-form-item>
  323. </el-col>
  324. </el-row>
  325. <el-row>
  326. <el-form-item label="生活">
  327. <el-row>
  328. <el-col :span="6" v-for="dict in dict.type.sys_income_life" :key="dict.value">
  329. <el-radio v-model="basicsForm.life" :label="dict.value">{{ dict.label }}</el-radio>
  330. </el-col>
  331. </el-row>
  332. </el-form-item>
  333. </el-row>
  334. <el-row>
  335. <el-col :span="24">
  336. <el-form-item label="梦想">
  337. <el-input placeholder="请输入梦想" v-model="basicsForm.dream" />
  338. </el-form-item>
  339. </el-col>
  340. </el-row>
  341. <el-row>
  342. <el-col :span="24">
  343. <el-form-item label="喜爱">
  344. <el-row>
  345. <!-- <el-checkbox-group v-model="basicsForm.favorite">
  346. <el-col :span="6" v-for="dict in dict.type.sys_staff_hobby" :key="dict.value">
  347. <el-checkbox :label="dict.label" :value="dict.value"></el-checkbox>
  348. </el-col>
  349. </el-checkbox-group> -->
  350. <el-checkbox-group v-model="basicsForm.favorite">
  351. <el-col :span="6" v-for="dict in dict.type.sys_staff_hobby" :key="dict.value">
  352. <el-checkbox :label="dict.value">{{ dict.label }}</el-checkbox>
  353. </el-col>
  354. </el-checkbox-group>
  355. </el-row>
  356. </el-form-item>
  357. </el-col>
  358. </el-row>
  359. <el-row>
  360. <el-form-item label="身高">
  361. <el-row>
  362. <el-col :span="6" v-for="dict in dict.type.sys_staff_height" :key="dict.value">
  363. <el-radio v-model="basicsForm.height" :label="dict.value">{{ dict.label }}</el-radio>
  364. </el-col>
  365. </el-row>
  366. </el-form-item>
  367. </el-row>
  368. <el-row>
  369. <el-form-item label="颜值">
  370. <el-row>
  371. <el-col :span="6" v-for="dict in dict.type.sys_staff_appearance" :key="dict.value">
  372. <el-radio v-model="basicsForm.appearance" :label="dict.value">{{ dict.label }}</el-radio>
  373. </el-col>
  374. </el-row>
  375. </el-form-item>
  376. </el-row>
  377. <el-row>
  378. <el-col :span="12">
  379. <el-form-item label="体质">
  380. <el-select placeholder="请选择" style="width: 100%" v-model="basicsForm.constitution">
  381. <el-option v-for="dict in dict.type.sys_staff_constitution" :key="dict.value" :value="dict.value" :label="dict.label">{{ dict.label }}</el-option>
  382. </el-select>
  383. </el-form-item>
  384. </el-col>
  385. <el-col :span="12">
  386. <el-form-item label="病史">
  387. <el-select placeholder="请选择" style="width: 100%" v-model="basicsForm.medicalHistory">
  388. <el-option v-for="dict in dict.type.sys_staff_medicalHistory" :key="dict.value" :value="dict.value" :label="dict.label">{{ dict.label }}</el-option>
  389. </el-select>
  390. </el-form-item>
  391. </el-col>
  392. </el-row>
  393. <el-row>
  394. <el-form-item label="刑法">
  395. <el-row>
  396. <el-col :span="6" v-for="dict in dict.type.sys_staff_criminalLaw" :key="dict.value">
  397. <el-radio v-model="basicsForm.criminalLaw" :label="dict.value">{{ dict.label }}</el-radio>
  398. </el-col>
  399. </el-row>
  400. </el-form-item>
  401. </el-row>
  402. <el-row>
  403. <el-col :span="12">
  404. <el-form-item label="备用联系人">
  405. <el-input placeholder="请输入备用联系人" v-model="basicsForm.contactName" />
  406. </el-form-item>
  407. </el-col>
  408. <el-col :span="12">
  409. <el-form-item label="性别">
  410. <el-select placeholder="请选择" style="width: 100%" v-model="basicsForm.contactSex">
  411. <el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :value="dict.value" :label="dict.label">{{ dict.label }}</el-option>
  412. </el-select>
  413. </el-form-item>
  414. </el-col>
  415. </el-row>
  416. <el-row>
  417. <el-col :span="24">
  418. <el-form-item label="与之关系">
  419. <el-row>
  420. <el-col :span="6" v-for="dict in dict.type.sys_spare_relationship" :key="dict.value">
  421. <el-radio v-model="basicsForm.contactRelation" :label="dict.value">{{ dict.label }}</el-radio>
  422. </el-col>
  423. </el-row>
  424. </el-form-item>
  425. </el-col>
  426. </el-row>
  427. <el-row>
  428. <el-col :span="12">
  429. <el-form-item label="联系电话">
  430. <el-input placeholder="请输入联系电话" v-model="basicsForm.contactPhoneNumber" />
  431. </el-form-item>
  432. </el-col>
  433. <el-col :span="12">
  434. <el-form-item label="工作单位">
  435. <el-input placeholder="请输入工作单位" v-model="basicsForm.contactEmployer" />
  436. </el-form-item>
  437. </el-col>
  438. </el-row>
  439. </el-form>
  440. <div slot="footer" class="dialog-footer">
  441. <el-button size="small" @click="cancel">取 消</el-button>
  442. <el-button size="small" type="primary" @click="submitForm">保 存</el-button>
  443. </div>
  444. </el-dialog>
  445. <!-- 用户导入对话框 -->
  446. <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  447. <el-upload
  448. ref="upload"
  449. :limit="1"
  450. accept=".xlsx, .xls"
  451. :headers="upload.headers"
  452. :action="upload.url + '?updateSupport=' + upload.updateSupport"
  453. :disabled="upload.isUploading"
  454. :on-progress="handleFileUploadProgress"
  455. :on-success="handleFileSuccess"
  456. :auto-upload="false"
  457. drag
  458. >
  459. <i class="el-icon-upload"></i>
  460. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  461. <div class="el-upload__tip text-center" slot="tip">
  462. <div class="el-upload__tip" slot="tip"> <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据 </div>
  463. <span>仅允许导入xls、xlsx格式文件。</span>
  464. <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
  465. </div>
  466. </el-upload>
  467. <div slot="footer" class="dialog-footer">
  468. <el-button size="small" type="primary" @click="submitFileForm">确 定</el-button>
  469. <el-button size="small" @click="upload.open = false">取 消</el-button>
  470. </div>
  471. </el-dialog>
  472. <!-- 功能权限对话框 -->
  473. <el-dialog title="功能权限" :visible.sync="dialogTableRolePermissions">
  474. <el-table v-loading="loading" border :data="roleList">
  475. <el-table-column label="名称" align="left" width="180">
  476. <template slot-scope="scope">
  477. <input type="checkbox" :checked="scope.row.flag" @change="roleChange(scope.row)" />
  478. <span class="role_">{{ scope.row.roleName }}</span>
  479. </template>
  480. </el-table-column>
  481. <el-table-column label="描述" align="center">
  482. <template slot-scope="scpoe">
  483. <span>{{ scpoe.row.remark }}</span>
  484. </template>
  485. </el-table-column>
  486. </el-table>
  487. <div slot="footer" class="dialog-footer">
  488. <el-button size="small" @click="cancalRolePermissions">取 消</el-button>
  489. <el-button size="small" type="primary" @click="saveRolePermissions">保 存</el-button>
  490. </div>
  491. </el-dialog>
  492. <!-- 责权信息对话框 -->
  493. <el-dialog title="责权信息" :visible.sync="dialogPower" width="30%" :before-close="handleClose">
  494. <div class="">
  495. <span>级别职务:</span>
  496. <el-select v-model="jodId" placeholder="请选择" @change="changeJob">
  497. <el-option v-for="item in levelJobs" :key="item.jobId" :label="item.jobName" :value="item"> </el-option>
  498. </el-select>
  499. </div>
  500. <div class="responsibility">
  501. <span>责任</span>
  502. </div>
  503. <el-input type="textarea" :rows="3" v-model="responsibility" readonly placeholder="请输入内容"> </el-input>
  504. <div class="responsibility">
  505. <span>权利</span>
  506. </div>
  507. <el-input type="textarea" :rows="3" v-model="right" readonly placeholder="请输入内容"> </el-input>
  508. </el-dialog>
  509. <!-- 数据权限对话框 -->
  510. <el-dialog title="数据权限" :visible.sync="dialogTableDataRole">
  511. <el-table v-loading="loading" border :data="dataRoleList">
  512. <el-table-column label="名称" align="left" width="180">
  513. <template slot-scope="scope">
  514. <input type="checkbox" :checked="scope.row.flag" @change="dataRoleChange(scope.row)" />
  515. <span class="role_">{{ scope.row.dataRoleName }}</span>
  516. </template>
  517. </el-table-column>
  518. <el-table-column label="描述" align="center">
  519. <template slot-scope="scpoe">
  520. <span>{{ scpoe.row.remark }}</span>
  521. </template>
  522. </el-table-column>
  523. </el-table>
  524. <div slot="footer" class="dialog-footer">
  525. <el-button size="small" @click="cancalDataRole">取 消</el-button>
  526. <el-button size="small" type="primary" @click="saveDataRole">保 存</el-button>
  527. </div>
  528. </el-dialog>
  529. <!-- 修改头像对话框 -->
  530. <userAvatar ref="userAvatar" />
  531. </div>
  532. </template>
  533. <script>
  534. import {
  535. delUser,
  536. addUser,
  537. updateUser,
  538. getStaffList,
  539. getLevelTreeSelect,
  540. getNatureTreeSelect,
  541. getAuthRole,
  542. updateAuthRole,
  543. getDataRole,
  544. updateDataRole,
  545. getAccountInfo,
  546. getPersonnel
  547. } from '@/api/system/employeenInfo'
  548. import { getToken } from '@/utils/auth'
  549. import { treeselect } from '@/api/system/dept'
  550. import userAvatar from './profile/userAvatar.vue'
  551. import Treeselect from '@riophae/vue-treeselect'
  552. import TreeChoice from '@/components/treeChoice/index.vue'
  553. import '@riophae/vue-treeselect/dist/vue-treeselect.css'
  554. import { deepClone } from '@/utils/index.js'
  555. export default {
  556. name: 'employeenInfo',
  557. dicts: [
  558. 'sys_normal_disable',
  559. 'sys_user_sex',
  560. 'sys_account_status',
  561. 'sys_employee_education',
  562. 'sys_marital_status',
  563. 'sys_employee_personality',
  564. 'sys_staff_adept',
  565. 'sys_income_life',
  566. 'sys_staff_hobby',
  567. 'sys_staff_height',
  568. 'sys_staff_appearance',
  569. 'sys_staff_constitution',
  570. 'sys_staff_medicalHistory',
  571. 'sys_staff_criminalLaw',
  572. 'sys_spare_relationship'
  573. ],
  574. components: { Treeselect, TreeChoice, userAvatar },
  575. data() {
  576. return {
  577. // 遮罩层
  578. loading: true,
  579. // 显示搜索条件
  580. showSearch: true,
  581. // 总条数
  582. total: 0,
  583. // 用户表格数据
  584. userList: null,
  585. // 弹出层标题
  586. title: '',
  587. // 部门树选项
  588. deptOptions: undefined,
  589. // 是否显示弹出层
  590. open: false,
  591. // 岗位选项
  592. postOptions: [],
  593. // 角色选项
  594. roleOptions: [],
  595. // 账号表单参数
  596. accountForm: {
  597. serialNumber: 0,
  598. userNumber: '',
  599. realName: '',
  600. phoneNumber: '',
  601. status: '',
  602. sex: '',
  603. idNumber: '',
  604. deptIds: [],
  605. levelJobIds: [],
  606. naturePostIds: []
  607. },
  608. // 基础表单参数
  609. basicsForm: {},
  610. defaultProps: {
  611. children: 'children',
  612. label: 'label'
  613. },
  614. // 用户导入参数
  615. upload: {
  616. // 是否显示弹出层(用户导入)
  617. open: false,
  618. // 弹出层标题(用户导入)
  619. title: '',
  620. // 是否禁用上传
  621. isUploading: false,
  622. // 是否更新已经存在的用户数据
  623. updateSupport: 0,
  624. // 设置上传的请求头部
  625. headers: { Authorization: 'Bearer ' + getToken() },
  626. // 上传的地址
  627. url: process.env.VUE_APP_BASE_API + '/system/user/importData'
  628. },
  629. // 查询参数
  630. queryParams: {
  631. pageNum: 1,
  632. pageSize: 10,
  633. realName: undefined,
  634. phonenumber: undefined
  635. },
  636. // 列信息
  637. columns: [
  638. { key: 0, label: `序号`, visible: true },
  639. { key: 1, label: `头像`, visible: true },
  640. { key: 2, label: `姓名`, visible: true },
  641. { key: 3, label: `公司部门`, visible: true },
  642. { key: 4, label: `级别职务`, visible: true },
  643. { key: 5, label: `性质岗位`, visible: true },
  644. { key: 6, label: `角色权限`, visible: true },
  645. { key: 7, label: `手机号码`, visible: true }
  646. ],
  647. // 表单校验
  648. accountFormRules: {
  649. realName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
  650. phoneNumber: [
  651. { required: true, message: '手机号不能为空', trigger: 'blur' },
  652. {
  653. pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  654. message: '请输入正确的手机号码',
  655. trigger: 'blur'
  656. }
  657. ],
  658. idNumber: [
  659. { required: true, message: '身份证号不能为空', trigger: 'blur' },
  660. {
  661. pattern: /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
  662. message: '请输入正确的身份证号码',
  663. trigger: 'blur'
  664. }
  665. ],
  666. deptIds: [{ required: true, message: '请选择公司部门', trigger: 'submit' }],
  667. levelJobIds: [{ required: true, message: '请选择职称级别', trigger: 'submit' }],
  668. naturePostIds: [{ required: true, message: '请选择性质岗位', trigger: 'submit' }]
  669. },
  670. basicsRules: {
  671. education: [{ required: true, message: '请选择学历', trigger: 'submit' }],
  672. origin: [{ required: true, message: '请输入原籍', trigger: 'submit' }],
  673. currentAddress: [{ required: true, message: '请输入现住址', trigger: 'submit' }],
  674. maritalStatus: [{ required: true, message: '请选择婚姻状况', trigger: 'submit' }],
  675. workExpertise: [{ required: true, message: '请输入工作特长', trigger: 'submit' }],
  676. workDesire: [{ required: true, message: '请输入期望职位', trigger: 'submit' }],
  677. incomeDesire: [{ required: true, message: '请输入收入愿望', trigger: 'submit' }]
  678. },
  679. dialogTableRolePermissions: false, // 角色权限弹出层
  680. dialogPower: false, // 责权信息弹出层
  681. accountShow: true, // 账号信息
  682. basicsShow: false, // 基础信息
  683. dialogTableDataRole: false, // 数据权限
  684. props: { multiple: true }, // 联级多选
  685. levelList: [], // 级别列表
  686. natureList: [], // 性质岗位列表
  687. levelJobs: [], // 责权信息列表
  688. jodId: '', // 职位id
  689. responsibility: '', // 职责
  690. right: '', // 权力
  691. roleList: [], // 员工角色列表
  692. dateRange: [], // 日期范围
  693. basicsForm: {
  694. age: '', //年龄
  695. appearance: '', //颜值
  696. character: '', //性格
  697. constitution: '', //体质
  698. contactEmployer: '', //工作单位
  699. contactName: '', //备用联系人姓名
  700. contactPhoneNumber: '', //备用联系人电话
  701. contactRelation: '', //与之关系
  702. contactSex: '', //备用联系人性别
  703. criminalLaw: '', //刑法
  704. currentAddress: '', //现住址
  705. dateOfBirth: '', //出生日期
  706. // descriptionJson: '',
  707. descriptionJson: [{ name: '', startDate: '', endDate: '', duty: '', inCome: '', id: 1 }], //原工作单位json串
  708. dream: '', //梦想
  709. education: '', //学历
  710. favorite: [], //喜爱
  711. height: '', //身高
  712. householdIncome: '', //家庭收入
  713. incomeDesire: '', //收入愿望
  714. life: '', //生活
  715. maritalStatus: '', //婚姻状况
  716. medicalHistory: '', //病史
  717. memberOfFamily: '', //家庭成员
  718. origin: '', //原籍
  719. personnelType: 0, //人员类型
  720. qqNumber: '', //qq号
  721. specialty: [], //擅长
  722. workDesire: '', //期望职位
  723. workExpertise: '', //工作特长
  724. wxUserId: '' //企业微信号
  725. },
  726. rolesParams: {
  727. roleName: undefined,
  728. roleKey: undefined,
  729. roleSort: undefined
  730. },
  731. DataRoleParams: {
  732. pageNum: 1,
  733. pageSize: 10
  734. },
  735. dataRoleListAll: [], // 所有数据权限列表
  736. dataRoleList: [] // 员工数据权限
  737. }
  738. },
  739. created() {
  740. this.getList()
  741. this.getTreeselect()
  742. },
  743. methods: {
  744. /** 查询用户列表 */
  745. getList() {
  746. this.loading = true
  747. getStaffList(this.queryParams).then((response) => {
  748. this.userList = response.rows
  749. this.total = response.total
  750. this.loading = false
  751. })
  752. },
  753. /** 查询部门下拉树结构 */
  754. getTreeselect() {
  755. treeselect().then((response) => {
  756. this.deptOptions = response.data
  757. this.deptOptions.map((item) => item.id.toString())
  758. })
  759. },
  760. // 节点单击事件
  761. handleNodeClick(data) {
  762. this.queryParams.deptId = data.id
  763. this.getList()
  764. },
  765. // 取消按钮
  766. cancel() {
  767. this.open = false
  768. this.reset()
  769. },
  770. // 表单重置
  771. reset() {
  772. this.form = {
  773. userId: undefined,
  774. deptId: undefined,
  775. // userName: undefined,
  776. nickName: undefined,
  777. password: undefined,
  778. phonenumber: undefined,
  779. email: undefined,
  780. sex: undefined,
  781. status: '0',
  782. remark: undefined,
  783. postIds: [],
  784. roleIds: []
  785. }
  786. this.resetForm('form')
  787. },
  788. /** 搜索按钮操作 */
  789. handleQuery() {
  790. this.queryParams.pageNum = 1
  791. this.getList()
  792. },
  793. /** 重置按钮操作 */
  794. resetQuery() {
  795. this.resetForm('queryForm')
  796. this.handleQuery()
  797. },
  798. /** 新增按钮操作 */
  799. handleAdd() {
  800. this.reset()
  801. this.getTreeselect()
  802. this.open = true
  803. this.title = '添加用户'
  804. this.getLevelList()
  805. this.getNatureList()
  806. // this.userList.map((item, index, c) => item.serialNumber)
  807. this.accountForm.serialNumber = this.total + 1
  808. console.log(this.accountForm.serialNumber)
  809. },
  810. // 修改角色权限
  811. getRolePermissions(row) {
  812. this.userId = row.userId
  813. getAuthRole(row.userId).then((res) => {
  814. if (res.code === 200) {
  815. this.roleList = res.roles
  816. console.log(this.roleList)
  817. this.dialogTableRolePermissions = true
  818. }
  819. })
  820. },
  821. // 修改数据权限
  822. getDataRole(row) {
  823. this.userId = row.userId
  824. getDataRole(row.userId).then((res) => {
  825. console.log(res)
  826. if (res.code === 200) {
  827. this.dataRoleList = res.dataRoles
  828. console.log(this.dataRoleList)
  829. this.dialogTableDataRole = true
  830. }
  831. })
  832. },
  833. // 保存数据权限修改
  834. saveDataRole() {
  835. let newArr = this.dataRoleList.filter((item, index, c) => item.flag == true)
  836. let dataRoleIds = newArr.map((item, index, c) => item.dataRoleId)
  837. // let dataRoleIdsStr = dataRoleIds.join(',')
  838. updateDataRole({ userId: this.userId, roleIds: dataRoleIds }).then((res) => {
  839. console.log(res)
  840. if (res.code === 200) {
  841. this.dialogTableDataRole = false
  842. this.$msg({ message: '修改成功' })
  843. }
  844. })
  845. },
  846. // 取消数据权限修改
  847. cancalDataRole() {
  848. this.dialogTableDataRole = false
  849. },
  850. // 切换角色选中状态
  851. roleChange(row, index) {
  852. row.flag = !row.flag
  853. },
  854. // 切换数据角色选中状态
  855. dataRoleChange(row, index) {
  856. row.flag = !row.flag
  857. },
  858. // 保存角色权限修改
  859. saveRolePermissions() {
  860. console.log(this.roleList)
  861. let newArr = this.roleList.filter((item, index, c) => item.flag == true)
  862. let roleIds = newArr.map((item, index, c) => item.roleId)
  863. // let roleIdsStr = roleIds.join(',')
  864. updateAuthRole({ userId: this.userId, roleIds: roleIds }).then((res) => {
  865. if (res.code === 200) {
  866. this.dialogTableRolePermissions = false
  867. this.$msg({ message: '修改成功' })
  868. }
  869. })
  870. },
  871. // 取消角色权限修改
  872. cancalRolePermissions() {
  873. this.dialogTableRolePermissions = false
  874. },
  875. // 职责权限
  876. getDutiesPowers(row) {
  877. let staff = this.userList.find((item, index, c) => item.userId === row.userId)
  878. this.levelJobs = staff.levelJobs
  879. // this.jodId = this.levelJobs[0].jobId
  880. console.log(this.levelJobs)
  881. this.dialogPower = true
  882. },
  883. // 选择职责权限
  884. changeJob(val) {
  885. console.log(val)
  886. this.responsibility = val.responsibility
  887. this.right = val.right
  888. },
  889. // 账号信息
  890. getAccountInfo() {
  891. this.accountShow = true
  892. this.basicsShow = false
  893. },
  894. // 基础信息
  895. getBasicsInfo() {
  896. this.accountShow = false
  897. this.basicsShow = true
  898. },
  899. // 修改头像
  900. modifyAvatar(row) {
  901. this.$refs.userAvatar.editCropper()
  902. },
  903. // 关闭责权信息
  904. handleClose() {
  905. this.dialogPower = false
  906. },
  907. //获取级别数据
  908. getLevelList() {
  909. getLevelTreeSelect().then((res) => {
  910. if (res.code == 200) {
  911. this.levelList = res.data
  912. this.levelList.map((item) => item.id.toString())
  913. } else {
  914. this.$msg({ type: 'error', message: res.msg })
  915. }
  916. })
  917. },
  918. // 获取性质岗位数据
  919. getNatureList() {
  920. getNatureTreeSelect().then((res) => {
  921. if (res.code == 200) {
  922. this.natureList = res.data
  923. this.natureList.map((item) => item.id.toString())
  924. } else {
  925. this.$msg({ type: 'error', message: res.msg })
  926. }
  927. })
  928. },
  929. /** 修改按钮操作 */
  930. handleUpdate(row) {
  931. // debugger
  932. this.userId = row.userId
  933. this.getTreeselect()
  934. this.getLevelList()
  935. this.getNatureList()
  936. // 查询账号信息
  937. getAccountInfo(row.userId).then((response) => {
  938. console.log(response)
  939. this.open = true
  940. this.title = '修改用户'
  941. this.accountForm = response.data
  942. this.accountForm.deptIds = response.data.deptIds.split(',')
  943. this.accountForm.levelJobIds = response.data.levelJobIds.split(',')
  944. this.accountForm.naturePostIds = response.data.naturePostIds.split(',')
  945. })
  946. // 查询基础信息
  947. getPersonnel(row.userId).then((res) => {
  948. console.log(res)
  949. this.basicsForm = res.data
  950. this.basicsForm.descriptionJson = JSON.parse(res.data.descriptionJson)
  951. this.basicsForm.favorite = res.data.favorite.split(',')
  952. this.basicsForm.specialty = res.data.specialty.split(',')
  953. })
  954. },
  955. /** 提交按钮 */
  956. submitForm: function () {
  957. let accountStr = deepClone(this.accountForm)
  958. accountStr.deptIds = accountStr.deptIds.join(',')
  959. accountStr.levelJobIds = accountStr.levelJobIds.join(',')
  960. accountStr.naturePostIds = accountStr.naturePostIds.join(',')
  961. let str = deepClone(this.basicsForm)
  962. str.dateOfBirth = this.ageInfo.birthday
  963. str.age = this.ageInfo.age
  964. str.favorite = str.favorite.join(',')
  965. str.specialty = str.specialty.join(',')
  966. str.descriptionJson = JSON.stringify(str.descriptionJson)
  967. let params = { ...accountStr, ...str }
  968. params.userId = this.userId
  969. console.log(params)
  970. this.$refs['accountForm'].validate((valid) => {
  971. if (valid) {
  972. if (params.userId != null) {
  973. console.log(1231231312)
  974. updateUser(params).then((response) => {
  975. this.$modal.msgSuccess('修改成功')
  976. this.open = false
  977. this.getList()
  978. })
  979. } else {
  980. addUser(params).then((response) => {
  981. this.$modal.msgSuccess('新增成功')
  982. this.open = false
  983. this.getList()
  984. })
  985. }
  986. }
  987. })
  988. },
  989. /** 删除按钮操作 */
  990. handleDelete(row) {
  991. // const userIds = row.userId
  992. this.$modal
  993. .confirm('是否确认删除用户编号为"' + row.userId + '"的数据项?')
  994. .then(function () {
  995. return delUser(row.userId)
  996. })
  997. .then(() => {
  998. this.getList()
  999. this.$modal.msgSuccess('删除成功')
  1000. })
  1001. .catch(() => {})
  1002. },
  1003. /** 导出按钮操作 */
  1004. handleExport() {
  1005. this.download(
  1006. 'system/user/export',
  1007. {
  1008. ...this.queryParams
  1009. },
  1010. `user_${new Date().getTime()}.xlsx`
  1011. )
  1012. },
  1013. /** 导入按钮操作 */
  1014. handleImport() {
  1015. this.upload.title = '用户导入'
  1016. this.upload.open = true
  1017. },
  1018. /** 下载模板操作 */
  1019. importTemplate() {
  1020. this.download('system/user/importTemplate', {}, `user_template_${new Date().getTime()}.xlsx`)
  1021. },
  1022. // 文件上传中处理
  1023. handleFileUploadProgress(event, file, fileList) {
  1024. this.upload.isUploading = true
  1025. },
  1026. // 文件上传成功处理
  1027. handleFileSuccess(response, file, fileList) {
  1028. this.upload.open = false
  1029. this.upload.isUploading = false
  1030. this.$refs.upload.clearFiles()
  1031. this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true })
  1032. this.getList()
  1033. },
  1034. // 提交上传文件
  1035. submitFileForm() {
  1036. this.$refs.upload.submit()
  1037. },
  1038. addDescription(id) {
  1039. this.basicsForm.descriptionJson.push({ name: '', startDate: '', endDate: '', duty: '', inCome: '', id: id + 1 })
  1040. },
  1041. //删除原单位
  1042. delDescription(id) {
  1043. this.basicsForm.descriptionJson = this.basicsForm.descriptionJson.filter((item) => item.id != id)
  1044. }
  1045. },
  1046. computed: {
  1047. //获取主题颜色
  1048. theme() {
  1049. return this.$store.state.settings.theme
  1050. },
  1051. //根据身份证号获取年龄和生日
  1052. ageInfo() {
  1053. let num = this.accountForm.idNumber
  1054. if (/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(num)) {
  1055. let birthday = num.substring(6, 10) + '-' + num.substring(10, 12) + '-' + num.substring(12, 14)
  1056. var birthdays = new Date(birthday.replace(/-/g, '/'))
  1057. let d = new Date()
  1058. let age = d.getFullYear() - birthdays.getFullYear() - (d.getMonth() < birthdays.getMonth() || (d.getMonth() == birthdays.getMonth() && d.getDate() < birthdays.getDate()) ? 1 : 0)
  1059. return {
  1060. age,
  1061. birthday
  1062. }
  1063. }
  1064. return {
  1065. age: '',
  1066. birthday: ''
  1067. }
  1068. },
  1069. isClick() {
  1070. return function (id) {
  1071. let obj = this.basicsForm.descriptionJson.find((item) => item.id == id)
  1072. let values = Object.values(obj).filter((item) => typeof item == 'string')
  1073. return values.every((item) => item != '')
  1074. }
  1075. },
  1076. //判断是不是最后一条
  1077. isLast() {
  1078. return function (id) {
  1079. let obj = this.basicsForm.descriptionJson.some((item) => item.id > id)
  1080. return !obj
  1081. }
  1082. }
  1083. }
  1084. }
  1085. </script>
  1086. <style scoped>
  1087. .responsibility {
  1088. width: 108px;
  1089. height: 32px;
  1090. margin-top: 20px;
  1091. font-weight: bold;
  1092. }
  1093. .option {
  1094. display: flex;
  1095. margin-bottom: 10px;
  1096. border-bottom: 1px solid #dfe6ec;
  1097. }
  1098. .account {
  1099. width: 90px;
  1100. height: 40px;
  1101. text-align: center;
  1102. line-height: 40px;
  1103. font-size: 14px;
  1104. border: 1px solid #dfe6ec;
  1105. border-top-left-radius: 5px;
  1106. border-right: none;
  1107. border-bottom: none;
  1108. }
  1109. .basics {
  1110. width: 90px;
  1111. height: 40px;
  1112. text-align: center;
  1113. line-height: 40px;
  1114. font-size: 14px;
  1115. border: 1px solid #dfe6ec;
  1116. border-bottom: none;
  1117. }
  1118. .basics_form {
  1119. overflow: auto;
  1120. height: 600px;
  1121. }
  1122. .img_height {
  1123. height: 32px;
  1124. width: 32px;
  1125. vertical-align: middle;
  1126. cursor: pointer;
  1127. }
  1128. .el-col-lg-4-8 {
  1129. width: 20%;
  1130. }
  1131. .search_form {
  1132. display: flex;
  1133. justify-content: space-between;
  1134. }
  1135. .search_form .el-form-item {
  1136. margin-bottom: 0;
  1137. }
  1138. .role_ {
  1139. margin-left: 5px;
  1140. }
  1141. ::v-deep .el-radio__inner {
  1142. border-radius: 0;
  1143. position: relative;
  1144. }
  1145. ::v-deep .el-radio__input.is-checked .el-radio__inner::after {
  1146. background: none;
  1147. border-radius: 0;
  1148. -webkit-box-sizing: content-box;
  1149. box-sizing: content-box;
  1150. content: '';
  1151. border: 1px solid #ffffff;
  1152. border-left: 0;
  1153. border-top: 0;
  1154. height: 7px;
  1155. left: 4px;
  1156. position: absolute;
  1157. top: 1px;
  1158. -webkit-transform: rotate(45deg);
  1159. transform: rotate(45deg);
  1160. width: 3px;
  1161. -webkit-transition: -webkit-transform 0.15s ease-in 0.05s;
  1162. transition: -webkit-transform 0.15s ease-in 0.05s;
  1163. transition: transform 0.15s ease-in 0.05s;
  1164. transition: transform 0.15s ease-in 0.05s, -webkit-transform 0.15s ease-in 0.05s;
  1165. -webkit-transform-origin: center;
  1166. transform-origin: center;
  1167. }
  1168. .description {
  1169. border-top: 1px solid #dedede;
  1170. padding-top: 10px;
  1171. margin-top: 10px;
  1172. }
  1173. </style>