1
0

index.vue 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178
  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 v-model="queryParams.deptIds" @click="deptClick" />
  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" :show-overflow-tooltip="true" 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/deptTreeChoice/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. deptIds: []
  636. },
  637. // 列信息
  638. columns: [
  639. { key: 0, label: `序号`, visible: true },
  640. { key: 1, label: `头像`, visible: true },
  641. { key: 2, label: `姓名`, visible: true },
  642. { key: 3, label: `公司部门`, visible: true },
  643. { key: 4, label: `级别职务`, visible: true },
  644. { key: 5, label: `性质岗位`, visible: true },
  645. { key: 6, label: `角色权限`, visible: true },
  646. { key: 7, label: `手机号码`, visible: true }
  647. ],
  648. // 表单校验
  649. accountFormRules: {
  650. realName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
  651. phoneNumber: [
  652. { required: true, message: '手机号不能为空', trigger: 'blur' },
  653. {
  654. pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
  655. message: '请输入正确的手机号码',
  656. trigger: 'blur'
  657. }
  658. ],
  659. idNumber: [
  660. { required: true, message: '身份证号不能为空', trigger: 'blur' },
  661. {
  662. 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]$/,
  663. message: '请输入正确的身份证号码',
  664. trigger: 'blur'
  665. }
  666. ],
  667. deptIds: [{ required: true, message: '请选择公司部门', trigger: 'submit' }],
  668. levelJobIds: [{ required: true, message: '请选择职称级别', trigger: 'submit' }],
  669. naturePostIds: [{ required: true, message: '请选择性质岗位', trigger: 'submit' }]
  670. },
  671. basicsRules: {
  672. education: [{ required: true, message: '请选择学历', trigger: 'submit' }],
  673. origin: [{ required: true, message: '请输入原籍', trigger: 'submit' }],
  674. currentAddress: [{ required: true, message: '请输入现住址', trigger: 'submit' }],
  675. maritalStatus: [{ required: true, message: '请选择婚姻状况', trigger: 'submit' }],
  676. workExpertise: [{ required: true, message: '请输入工作特长', trigger: 'submit' }],
  677. workDesire: [{ required: true, message: '请输入期望职位', trigger: 'submit' }],
  678. incomeDesire: [{ required: true, message: '请输入收入愿望', trigger: 'submit' }]
  679. },
  680. dialogTableRolePermissions: false, // 角色权限弹出层
  681. dialogPower: false, // 责权信息弹出层
  682. accountShow: true, // 账号信息
  683. basicsShow: false, // 基础信息
  684. dialogTableDataRole: false, // 数据权限
  685. props: { multiple: true }, // 联级多选
  686. levelList: [], // 级别列表
  687. natureList: [], // 性质岗位列表
  688. levelJobs: [], // 责权信息列表
  689. jodId: '', // 职位id
  690. responsibility: '', // 职责
  691. right: '', // 权力
  692. roleList: [], // 员工角色列表
  693. dateRange: [], // 日期范围
  694. basicsForm: {
  695. age: '', //年龄
  696. appearance: '', //颜值
  697. character: '', //性格
  698. constitution: '', //体质
  699. contactEmployer: '', //工作单位
  700. contactName: '', //备用联系人姓名
  701. contactPhoneNumber: '', //备用联系人电话
  702. contactRelation: '', //与之关系
  703. contactSex: '', //备用联系人性别
  704. criminalLaw: '', //刑法
  705. currentAddress: '', //现住址
  706. dateOfBirth: '', //出生日期
  707. // descriptionJson: '',
  708. descriptionJson: [{ name: '', startDate: '', endDate: '', duty: '', inCome: '', id: 1 }], //原工作单位json串
  709. dream: '', //梦想
  710. education: '', //学历
  711. favorite: [], //喜爱
  712. height: '', //身高
  713. householdIncome: '', //家庭收入
  714. incomeDesire: '', //收入愿望
  715. life: '', //生活
  716. maritalStatus: '', //婚姻状况
  717. medicalHistory: '', //病史
  718. memberOfFamily: '', //家庭成员
  719. origin: '', //原籍
  720. personnelType: 0, //人员类型
  721. qqNumber: '', //qq号
  722. specialty: [], //擅长
  723. workDesire: '', //期望职位
  724. workExpertise: '', //工作特长
  725. wxUserId: '' //企业微信号
  726. },
  727. rolesParams: {
  728. roleName: undefined,
  729. roleKey: undefined,
  730. roleSort: undefined
  731. },
  732. DataRoleParams: {
  733. pageNum: 1,
  734. pageSize: 10
  735. },
  736. dataRoleListAll: [], // 所有数据权限列表
  737. dataRoleList: [] // 员工数据权限
  738. }
  739. },
  740. created() {
  741. this.getList()
  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. })
  758. },
  759. // 节点单击事件
  760. handleNodeClick(data) {
  761. this.queryParams.deptId = data.id
  762. this.getList()
  763. },
  764. // 取消按钮
  765. cancel() {
  766. this.open = false
  767. this.reset()
  768. },
  769. // 表单重置
  770. reset() {
  771. this.form = {
  772. userId: undefined,
  773. deptId: undefined,
  774. // userName: undefined,
  775. nickName: undefined,
  776. password: undefined,
  777. phonenumber: undefined,
  778. email: undefined,
  779. sex: undefined,
  780. status: '0',
  781. remark: undefined,
  782. postIds: [],
  783. roleIds: []
  784. }
  785. this.resetForm('form')
  786. },
  787. /** 搜索按钮操作 */
  788. handleQuery() {
  789. this.queryParams.pageNum = 1
  790. this.getList()
  791. },
  792. deptClick() {
  793. // this.queryParams.pageNum = 1
  794. if (this.queryParams.deptIds == []) {
  795. return
  796. } else {
  797. this.getList()
  798. }
  799. },
  800. /** 重置按钮操作 */
  801. resetQuery() {
  802. this.resetForm('queryForm')
  803. this.handleQuery()
  804. },
  805. /** 新增按钮操作 */
  806. handleAdd() {
  807. this.reset()
  808. this.getTreeselect()
  809. this.open = true
  810. this.title = '添加用户'
  811. this.getLevelList()
  812. this.getNatureList()
  813. // this.userList.map((item, index, c) => item.serialNumber)
  814. this.accountForm.serialNumber = this.total + 1
  815. },
  816. // 修改角色权限
  817. getRolePermissions(row) {
  818. this.userId = row.userId
  819. getAuthRole(row.userId).then((res) => {
  820. if (res.code === 200) {
  821. this.roleList = res.roles
  822. this.dialogTableRolePermissions = true
  823. }
  824. })
  825. },
  826. // 修改数据权限
  827. getDataRole(row) {
  828. this.userId = row.userId
  829. getDataRole(row.userId).then((res) => {
  830. if (res.code === 200) {
  831. this.dataRoleList = res.dataRoles
  832. this.dialogTableDataRole = true
  833. }
  834. })
  835. },
  836. // 保存数据权限修改
  837. saveDataRole() {
  838. let newArr = this.dataRoleList.filter((item, index, c) => item.flag == true)
  839. let dataRoleIds = newArr.map((item, index, c) => item.dataRoleId)
  840. // let dataRoleIdsStr = dataRoleIds.join(',')
  841. updateDataRole({ userId: this.userId, roleIds: dataRoleIds }).then((res) => {
  842. if (res.code === 200) {
  843. this.dialogTableDataRole = false
  844. this.$msg({ message: '修改成功' })
  845. this.getList()
  846. }
  847. })
  848. },
  849. // 取消数据权限修改
  850. cancalDataRole() {
  851. this.dialogTableDataRole = false
  852. },
  853. // 切换角色选中状态
  854. roleChange(row, index) {
  855. row.flag = !row.flag
  856. },
  857. // 切换数据角色选中状态
  858. dataRoleChange(row, index) {
  859. row.flag = !row.flag
  860. },
  861. // 保存角色权限修改
  862. saveRolePermissions() {
  863. let newArr = this.roleList.filter((item, index, c) => item.flag == true)
  864. let roleIds = newArr.map((item, index, c) => item.roleId)
  865. // let roleIdsStr = roleIds.join(',')
  866. updateAuthRole({ userId: this.userId, roleIds: roleIds }).then((res) => {
  867. if (res.code === 200) {
  868. this.dialogTableRolePermissions = false
  869. this.$msg({ message: '修改成功' })
  870. this.getList()
  871. }
  872. })
  873. },
  874. // 取消角色权限修改
  875. cancalRolePermissions() {
  876. this.dialogTableRolePermissions = false
  877. },
  878. // 职责权限
  879. getDutiesPowers(row) {
  880. let staff = this.userList.find((item, index, c) => item.userId === row.userId)
  881. this.levelJobs = staff.levelJobs
  882. // this.jodId = this.levelJobs[0].jobId
  883. this.dialogPower = true
  884. },
  885. // 选择职责权限
  886. changeJob(val) {
  887. this.responsibility = val.responsibility
  888. this.right = val.right
  889. },
  890. // 账号信息
  891. getAccountInfo() {
  892. this.accountShow = true
  893. this.basicsShow = false
  894. },
  895. // 基础信息
  896. getBasicsInfo() {
  897. this.accountShow = false
  898. this.basicsShow = true
  899. },
  900. // 修改头像
  901. modifyAvatar(row) {
  902. this.$refs.userAvatar.editCropper()
  903. },
  904. // 关闭责权信息
  905. handleClose() {
  906. this.dialogPower = false
  907. },
  908. //获取级别数据
  909. getLevelList() {
  910. getLevelTreeSelect().then((res) => {
  911. if (res.code == 200) {
  912. this.levelList = res.data
  913. // this.levelList.map((item) => item.id.toString())
  914. } else {
  915. this.$msg({ type: 'error', message: res.msg })
  916. }
  917. })
  918. },
  919. // 获取性质岗位数据
  920. getNatureList() {
  921. getNatureTreeSelect().then((res) => {
  922. if (res.code == 200) {
  923. this.natureList = res.data
  924. // this.natureList.map((item) => item.id.toString())
  925. } else {
  926. this.$msg({ type: 'error', message: res.msg })
  927. }
  928. })
  929. },
  930. /** 修改按钮操作 */
  931. handleUpdate(row) {
  932. // debugger
  933. this.userId = row.userId
  934. // this.getTreeselect()
  935. this.getLevelList()
  936. this.getNatureList()
  937. // 查询账号信息
  938. getAccountInfo(row.userId).then((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. this.basicsForm = res.data
  949. this.basicsForm.descriptionJson = JSON.parse(res.data.descriptionJson)
  950. this.basicsForm.favorite = res.data.favorite.split(',')
  951. this.basicsForm.specialty = res.data.specialty.split(',')
  952. })
  953. },
  954. /** 提交按钮 */
  955. submitForm: function () {
  956. let accountStr = deepClone(this.accountForm)
  957. accountStr.deptIds = accountStr.deptIds.join(',')
  958. accountStr.naturePostIds = accountStr.naturePostIds.join(',')
  959. accountStr.levelJobIds = accountStr.levelJobIds.join(',')
  960. let str = deepClone(this.basicsForm)
  961. str.dateOfBirth = this.ageInfo.birthday
  962. str.age = this.ageInfo.age
  963. str.favorite = str.favorite.join(',')
  964. str.specialty = str.specialty.join(',')
  965. str.descriptionJson = JSON.stringify(str.descriptionJson)
  966. let params = { ...accountStr, ...str }
  967. params.userId = this.userId
  968. console.log(params)
  969. this.$refs['accountForm'].validate((valid) => {
  970. if (valid) {
  971. if (params.userId != null) {
  972. updateUser(params).then((response) => {
  973. this.$modal.msgSuccess('修改成功')
  974. this.open = false
  975. this.getList()
  976. })
  977. } else {
  978. addUser(params).then((response) => {
  979. this.$modal.msgSuccess('新增成功')
  980. this.open = false
  981. this.getList()
  982. })
  983. }
  984. }
  985. })
  986. },
  987. /** 删除按钮操作 */
  988. handleDelete(row) {
  989. // const userIds = row.userId
  990. this.$modal
  991. .confirm('是否确认删除用户编号为"' + row.userId + '"的数据项?')
  992. .then(function () {
  993. return delUser(row.userId)
  994. })
  995. .then(() => {
  996. this.getList()
  997. this.$modal.msgSuccess('删除成功')
  998. })
  999. .catch(() => {})
  1000. },
  1001. /** 导出按钮操作 */
  1002. handleExport() {
  1003. this.download(
  1004. 'system/user/export',
  1005. {
  1006. ...this.queryParams
  1007. },
  1008. `user_${new Date().getTime()}.xlsx`
  1009. )
  1010. },
  1011. /** 导入按钮操作 */
  1012. handleImport() {
  1013. this.upload.title = '用户导入'
  1014. this.upload.open = true
  1015. },
  1016. /** 下载模板操作 */
  1017. importTemplate() {
  1018. this.download('system/user/importTemplate', {}, `user_template_${new Date().getTime()}.xlsx`)
  1019. },
  1020. // 文件上传中处理
  1021. handleFileUploadProgress(event, file, fileList) {
  1022. this.upload.isUploading = true
  1023. },
  1024. // 文件上传成功处理
  1025. handleFileSuccess(response, file, fileList) {
  1026. this.upload.open = false
  1027. this.upload.isUploading = false
  1028. this.$refs.upload.clearFiles()
  1029. this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true })
  1030. this.getList()
  1031. },
  1032. // 提交上传文件
  1033. submitFileForm() {
  1034. this.$refs.upload.submit()
  1035. },
  1036. addDescription(id) {
  1037. this.basicsForm.descriptionJson.push({ name: '', startDate: '', endDate: '', duty: '', inCome: '', id: id + 1 })
  1038. },
  1039. //删除原单位
  1040. delDescription(id) {
  1041. this.basicsForm.descriptionJson = this.basicsForm.descriptionJson.filter((item) => item.id != id)
  1042. }
  1043. },
  1044. computed: {
  1045. //获取主题颜色
  1046. theme() {
  1047. return this.$store.state.settings.theme
  1048. },
  1049. //根据身份证号获取年龄和生日
  1050. ageInfo() {
  1051. let num = this.accountForm.idNumber
  1052. 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)) {
  1053. let birthday = num.substring(6, 10) + '-' + num.substring(10, 12) + '-' + num.substring(12, 14)
  1054. var birthdays = new Date(birthday.replace(/-/g, '/'))
  1055. let d = new Date()
  1056. let age = d.getFullYear() - birthdays.getFullYear() - (d.getMonth() < birthdays.getMonth() || (d.getMonth() == birthdays.getMonth() && d.getDate() < birthdays.getDate()) ? 1 : 0)
  1057. return {
  1058. age,
  1059. birthday
  1060. }
  1061. }
  1062. return {
  1063. age: '',
  1064. birthday: ''
  1065. }
  1066. },
  1067. isClick() {
  1068. return function (id) {
  1069. let obj = this.basicsForm.descriptionJson.find((item) => item.id == id)
  1070. let values = Object.values(obj).filter((item) => typeof item == 'string')
  1071. return values.every((item) => item != '')
  1072. }
  1073. },
  1074. //判断是不是最后一条
  1075. isLast() {
  1076. return function (id) {
  1077. let obj = this.basicsForm.descriptionJson.some((item) => item.id > id)
  1078. return !obj
  1079. }
  1080. }
  1081. }
  1082. }
  1083. </script>
  1084. <style scoped>
  1085. .responsibility {
  1086. width: 108px;
  1087. height: 32px;
  1088. margin-top: 20px;
  1089. font-weight: bold;
  1090. }
  1091. .option {
  1092. display: flex;
  1093. margin-bottom: 10px;
  1094. border-bottom: 1px solid #dfe6ec;
  1095. }
  1096. .account {
  1097. width: 90px;
  1098. height: 40px;
  1099. text-align: center;
  1100. line-height: 40px;
  1101. font-size: 14px;
  1102. border: 1px solid #dfe6ec;
  1103. border-top-left-radius: 5px;
  1104. border-right: none;
  1105. border-bottom: none;
  1106. }
  1107. .basics {
  1108. width: 90px;
  1109. height: 40px;
  1110. text-align: center;
  1111. line-height: 40px;
  1112. font-size: 14px;
  1113. border: 1px solid #dfe6ec;
  1114. border-bottom: none;
  1115. }
  1116. .basics_form {
  1117. overflow: auto;
  1118. height: 600px;
  1119. }
  1120. .img_height {
  1121. height: 32px;
  1122. width: 32px;
  1123. vertical-align: middle;
  1124. cursor: pointer;
  1125. }
  1126. .el-col-lg-4-8 {
  1127. width: 20%;
  1128. }
  1129. .search_form {
  1130. display: flex;
  1131. justify-content: space-between;
  1132. }
  1133. .search_form .el-form-item {
  1134. margin-bottom: 0;
  1135. }
  1136. .role_ {
  1137. margin-left: 5px;
  1138. }
  1139. ::v-deep .el-radio__inner {
  1140. border-radius: 0;
  1141. position: relative;
  1142. }
  1143. ::v-deep .el-radio__input.is-checked .el-radio__inner::after {
  1144. background: none;
  1145. border-radius: 0;
  1146. -webkit-box-sizing: content-box;
  1147. box-sizing: content-box;
  1148. content: '';
  1149. border: 1px solid #ffffff;
  1150. border-left: 0;
  1151. border-top: 0;
  1152. height: 7px;
  1153. left: 4px;
  1154. position: absolute;
  1155. top: 1px;
  1156. -webkit-transform: rotate(45deg);
  1157. transform: rotate(45deg);
  1158. width: 3px;
  1159. -webkit-transition: -webkit-transform 0.15s ease-in 0.05s;
  1160. transition: -webkit-transform 0.15s ease-in 0.05s;
  1161. transition: transform 0.15s ease-in 0.05s;
  1162. transition: transform 0.15s ease-in 0.05s, -webkit-transform 0.15s ease-in 0.05s;
  1163. -webkit-transform-origin: center;
  1164. transform-origin: center;
  1165. }
  1166. .description {
  1167. border-top: 1px solid #dedede;
  1168. padding-top: 10px;
  1169. margin-top: 10px;
  1170. }
  1171. </style>