index.vue 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191
  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" 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. this.getTreeselect()
  743. },
  744. methods: {
  745. /** 查询用户列表 */
  746. getList() {
  747. this.loading = true
  748. getStaffList(this.queryParams).then((response) => {
  749. this.userList = response.rows
  750. this.total = response.total
  751. this.loading = false
  752. })
  753. },
  754. /** 查询部门下拉树结构 */
  755. getTreeselect() {
  756. treeselect().then((response) => {
  757. this.deptOptions = response.data
  758. // this.deptOptions.map((item) => item.id.toString())
  759. })
  760. },
  761. // 节点单击事件
  762. handleNodeClick(data) {
  763. this.queryParams.deptId = data.id
  764. this.getList()
  765. },
  766. // 取消按钮
  767. cancel() {
  768. this.open = false
  769. this.reset()
  770. },
  771. // 表单重置
  772. reset() {
  773. this.form = {
  774. userId: undefined,
  775. deptId: undefined,
  776. // userName: undefined,
  777. nickName: undefined,
  778. password: undefined,
  779. phonenumber: undefined,
  780. email: undefined,
  781. sex: undefined,
  782. status: '0',
  783. remark: undefined,
  784. postIds: [],
  785. roleIds: []
  786. }
  787. this.resetForm('form')
  788. },
  789. /** 搜索按钮操作 */
  790. handleQuery() {
  791. this.queryParams.pageNum = 1
  792. this.getList()
  793. },
  794. deptClick() {
  795. // this.queryParams.pageNum = 1
  796. if (this.queryParams.deptIds == []) {
  797. return
  798. } else {
  799. this.getList()
  800. }
  801. },
  802. /** 重置按钮操作 */
  803. resetQuery() {
  804. this.resetForm('queryForm')
  805. this.handleQuery()
  806. },
  807. /** 新增按钮操作 */
  808. handleAdd() {
  809. this.reset()
  810. this.getTreeselect()
  811. this.open = true
  812. this.title = '添加用户'
  813. this.getLevelList()
  814. this.getNatureList()
  815. // this.userList.map((item, index, c) => item.serialNumber)
  816. this.accountForm.serialNumber = this.total + 1
  817. console.log(this.accountForm.serialNumber)
  818. },
  819. // 修改角色权限
  820. getRolePermissions(row) {
  821. this.userId = row.userId
  822. getAuthRole(row.userId).then((res) => {
  823. if (res.code === 200) {
  824. this.roleList = res.roles
  825. console.log(this.roleList)
  826. this.dialogTableRolePermissions = true
  827. }
  828. })
  829. },
  830. // 修改数据权限
  831. getDataRole(row) {
  832. this.userId = row.userId
  833. getDataRole(row.userId).then((res) => {
  834. console.log(res)
  835. if (res.code === 200) {
  836. this.dataRoleList = res.dataRoles
  837. console.log(this.dataRoleList)
  838. this.dialogTableDataRole = true
  839. }
  840. })
  841. },
  842. // 保存数据权限修改
  843. saveDataRole() {
  844. let newArr = this.dataRoleList.filter((item, index, c) => item.flag == true)
  845. let dataRoleIds = newArr.map((item, index, c) => item.dataRoleId)
  846. // let dataRoleIdsStr = dataRoleIds.join(',')
  847. updateDataRole({ userId: this.userId, roleIds: dataRoleIds }).then((res) => {
  848. console.log(res)
  849. if (res.code === 200) {
  850. this.dialogTableDataRole = false
  851. this.$msg({ message: '修改成功' })
  852. this.getList()
  853. }
  854. })
  855. },
  856. // 取消数据权限修改
  857. cancalDataRole() {
  858. this.dialogTableDataRole = false
  859. },
  860. // 切换角色选中状态
  861. roleChange(row, index) {
  862. row.flag = !row.flag
  863. },
  864. // 切换数据角色选中状态
  865. dataRoleChange(row, index) {
  866. row.flag = !row.flag
  867. },
  868. // 保存角色权限修改
  869. saveRolePermissions() {
  870. console.log(this.roleList)
  871. let newArr = this.roleList.filter((item, index, c) => item.flag == true)
  872. let roleIds = newArr.map((item, index, c) => item.roleId)
  873. // let roleIdsStr = roleIds.join(',')
  874. updateAuthRole({ userId: this.userId, roleIds: roleIds }).then((res) => {
  875. if (res.code === 200) {
  876. this.dialogTableRolePermissions = false
  877. this.$msg({ message: '修改成功' })
  878. this.getList()
  879. }
  880. })
  881. },
  882. // 取消角色权限修改
  883. cancalRolePermissions() {
  884. this.dialogTableRolePermissions = false
  885. },
  886. // 职责权限
  887. getDutiesPowers(row) {
  888. let staff = this.userList.find((item, index, c) => item.userId === row.userId)
  889. this.levelJobs = staff.levelJobs
  890. // this.jodId = this.levelJobs[0].jobId
  891. console.log(this.levelJobs)
  892. this.dialogPower = true
  893. },
  894. // 选择职责权限
  895. changeJob(val) {
  896. console.log(val)
  897. this.responsibility = val.responsibility
  898. this.right = val.right
  899. },
  900. // 账号信息
  901. getAccountInfo() {
  902. this.accountShow = true
  903. this.basicsShow = false
  904. },
  905. // 基础信息
  906. getBasicsInfo() {
  907. this.accountShow = false
  908. this.basicsShow = true
  909. },
  910. // 修改头像
  911. modifyAvatar(row) {
  912. this.$refs.userAvatar.editCropper()
  913. },
  914. // 关闭责权信息
  915. handleClose() {
  916. this.dialogPower = false
  917. },
  918. //获取级别数据
  919. getLevelList() {
  920. getLevelTreeSelect().then((res) => {
  921. if (res.code == 200) {
  922. this.levelList = res.data
  923. // this.levelList.map((item) => item.id.toString())
  924. } else {
  925. this.$msg({ type: 'error', message: res.msg })
  926. }
  927. })
  928. },
  929. // 获取性质岗位数据
  930. getNatureList() {
  931. getNatureTreeSelect().then((res) => {
  932. if (res.code == 200) {
  933. this.natureList = res.data
  934. // this.natureList.map((item) => item.id.toString())
  935. } else {
  936. this.$msg({ type: 'error', message: res.msg })
  937. }
  938. })
  939. },
  940. /** 修改按钮操作 */
  941. handleUpdate(row) {
  942. // debugger
  943. this.userId = row.userId
  944. this.getTreeselect()
  945. this.getLevelList()
  946. this.getNatureList()
  947. // 查询账号信息
  948. getAccountInfo(row.userId).then((response) => {
  949. console.log(response)
  950. this.open = true
  951. this.title = '修改用户'
  952. this.accountForm = response.data
  953. this.accountForm.deptIds = response.data.deptIds.split(',')
  954. this.accountForm.levelJobIds = response.data.levelJobIds.split(',')
  955. this.accountForm.naturePostIds = response.data.naturePostIds.split(',')
  956. })
  957. // 查询基础信息
  958. getPersonnel(row.userId).then((res) => {
  959. console.log(res)
  960. this.basicsForm = res.data
  961. this.basicsForm.descriptionJson = JSON.parse(res.data.descriptionJson)
  962. this.basicsForm.favorite = res.data.favorite.split(',')
  963. this.basicsForm.specialty = res.data.specialty.split(',')
  964. })
  965. },
  966. /** 提交按钮 */
  967. submitForm: function () {
  968. let accountStr = deepClone(this.accountForm)
  969. accountStr.deptIds = accountStr.deptIds.join(',')
  970. accountStr.levelJobIds = accountStr.levelJobIds.join(',')
  971. accountStr.naturePostIds = accountStr.naturePostIds.join(',')
  972. let str = deepClone(this.basicsForm)
  973. str.dateOfBirth = this.ageInfo.birthday
  974. str.age = this.ageInfo.age
  975. str.favorite = str.favorite.join(',')
  976. str.specialty = str.specialty.join(',')
  977. str.descriptionJson = JSON.stringify(str.descriptionJson)
  978. let params = { ...accountStr, ...str }
  979. params.userId = this.userId
  980. console.log(params)
  981. this.$refs['accountForm'].validate((valid) => {
  982. if (valid) {
  983. if (params.userId != null) {
  984. console.log(1231231312)
  985. updateUser(params).then((response) => {
  986. this.$modal.msgSuccess('修改成功')
  987. this.open = false
  988. this.getList()
  989. })
  990. } else {
  991. addUser(params).then((response) => {
  992. this.$modal.msgSuccess('新增成功')
  993. this.open = false
  994. this.getList()
  995. })
  996. }
  997. }
  998. })
  999. },
  1000. /** 删除按钮操作 */
  1001. handleDelete(row) {
  1002. // const userIds = row.userId
  1003. this.$modal
  1004. .confirm('是否确认删除用户编号为"' + row.userId + '"的数据项?')
  1005. .then(function () {
  1006. return delUser(row.userId)
  1007. })
  1008. .then(() => {
  1009. this.getList()
  1010. this.$modal.msgSuccess('删除成功')
  1011. })
  1012. .catch(() => {})
  1013. },
  1014. /** 导出按钮操作 */
  1015. handleExport() {
  1016. this.download(
  1017. 'system/user/export',
  1018. {
  1019. ...this.queryParams
  1020. },
  1021. `user_${new Date().getTime()}.xlsx`
  1022. )
  1023. },
  1024. /** 导入按钮操作 */
  1025. handleImport() {
  1026. this.upload.title = '用户导入'
  1027. this.upload.open = true
  1028. },
  1029. /** 下载模板操作 */
  1030. importTemplate() {
  1031. this.download('system/user/importTemplate', {}, `user_template_${new Date().getTime()}.xlsx`)
  1032. },
  1033. // 文件上传中处理
  1034. handleFileUploadProgress(event, file, fileList) {
  1035. this.upload.isUploading = true
  1036. },
  1037. // 文件上传成功处理
  1038. handleFileSuccess(response, file, fileList) {
  1039. this.upload.open = false
  1040. this.upload.isUploading = false
  1041. this.$refs.upload.clearFiles()
  1042. this.$alert(response.msg, '导入结果', { dangerouslyUseHTMLString: true })
  1043. this.getList()
  1044. },
  1045. // 提交上传文件
  1046. submitFileForm() {
  1047. this.$refs.upload.submit()
  1048. },
  1049. addDescription(id) {
  1050. this.basicsForm.descriptionJson.push({ name: '', startDate: '', endDate: '', duty: '', inCome: '', id: id + 1 })
  1051. },
  1052. //删除原单位
  1053. delDescription(id) {
  1054. this.basicsForm.descriptionJson = this.basicsForm.descriptionJson.filter((item) => item.id != id)
  1055. }
  1056. },
  1057. computed: {
  1058. //获取主题颜色
  1059. theme() {
  1060. return this.$store.state.settings.theme
  1061. },
  1062. //根据身份证号获取年龄和生日
  1063. ageInfo() {
  1064. let num = this.accountForm.idNumber
  1065. 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)) {
  1066. let birthday = num.substring(6, 10) + '-' + num.substring(10, 12) + '-' + num.substring(12, 14)
  1067. var birthdays = new Date(birthday.replace(/-/g, '/'))
  1068. let d = new Date()
  1069. let age = d.getFullYear() - birthdays.getFullYear() - (d.getMonth() < birthdays.getMonth() || (d.getMonth() == birthdays.getMonth() && d.getDate() < birthdays.getDate()) ? 1 : 0)
  1070. return {
  1071. age,
  1072. birthday
  1073. }
  1074. }
  1075. return {
  1076. age: '',
  1077. birthday: ''
  1078. }
  1079. },
  1080. isClick() {
  1081. return function (id) {
  1082. let obj = this.basicsForm.descriptionJson.find((item) => item.id == id)
  1083. let values = Object.values(obj).filter((item) => typeof item == 'string')
  1084. return values.every((item) => item != '')
  1085. }
  1086. },
  1087. //判断是不是最后一条
  1088. isLast() {
  1089. return function (id) {
  1090. let obj = this.basicsForm.descriptionJson.some((item) => item.id > id)
  1091. return !obj
  1092. }
  1093. }
  1094. }
  1095. }
  1096. </script>
  1097. <style scoped>
  1098. .responsibility {
  1099. width: 108px;
  1100. height: 32px;
  1101. margin-top: 20px;
  1102. font-weight: bold;
  1103. }
  1104. .option {
  1105. display: flex;
  1106. margin-bottom: 10px;
  1107. border-bottom: 1px solid #dfe6ec;
  1108. }
  1109. .account {
  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-top-left-radius: 5px;
  1117. border-right: none;
  1118. border-bottom: none;
  1119. }
  1120. .basics {
  1121. width: 90px;
  1122. height: 40px;
  1123. text-align: center;
  1124. line-height: 40px;
  1125. font-size: 14px;
  1126. border: 1px solid #dfe6ec;
  1127. border-bottom: none;
  1128. }
  1129. .basics_form {
  1130. overflow: auto;
  1131. height: 600px;
  1132. }
  1133. .img_height {
  1134. height: 32px;
  1135. width: 32px;
  1136. vertical-align: middle;
  1137. cursor: pointer;
  1138. }
  1139. .el-col-lg-4-8 {
  1140. width: 20%;
  1141. }
  1142. .search_form {
  1143. display: flex;
  1144. justify-content: space-between;
  1145. }
  1146. .search_form .el-form-item {
  1147. margin-bottom: 0;
  1148. }
  1149. .role_ {
  1150. margin-left: 5px;
  1151. }
  1152. ::v-deep .el-radio__inner {
  1153. border-radius: 0;
  1154. position: relative;
  1155. }
  1156. ::v-deep .el-radio__input.is-checked .el-radio__inner::after {
  1157. background: none;
  1158. border-radius: 0;
  1159. -webkit-box-sizing: content-box;
  1160. box-sizing: content-box;
  1161. content: '';
  1162. border: 1px solid #ffffff;
  1163. border-left: 0;
  1164. border-top: 0;
  1165. height: 7px;
  1166. left: 4px;
  1167. position: absolute;
  1168. top: 1px;
  1169. -webkit-transform: rotate(45deg);
  1170. transform: rotate(45deg);
  1171. width: 3px;
  1172. -webkit-transition: -webkit-transform 0.15s ease-in 0.05s;
  1173. transition: -webkit-transform 0.15s ease-in 0.05s;
  1174. transition: transform 0.15s ease-in 0.05s;
  1175. transition: transform 0.15s ease-in 0.05s, -webkit-transform 0.15s ease-in 0.05s;
  1176. -webkit-transform-origin: center;
  1177. transform-origin: center;
  1178. }
  1179. .description {
  1180. border-top: 1px solid #dedede;
  1181. padding-top: 10px;
  1182. margin-top: 10px;
  1183. }
  1184. </style>