index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item label="入职人" prop="entryName">
  5. <el-input v-model="queryParams.entryName" placeholder="请输入入职人" clearable style="width: 250px"
  6. @keyup.enter.native="handleQuery" />
  7. </el-form-item>
  8. <el-form-item label="部门" prop="deptId">
  9. <treeselect style="width: 250px" :default-expand-level="1" v-model="queryParams.deptId" :options="deptOptions"
  10. :normalizer="normalizer" placeholder="选择部门" />
  11. </el-form-item>
  12. <el-form-item label="职位" prop="postId">
  13. <el-select v-model="queryParams.postId" placeholder="请选择" style="width: 250px">
  14. <el-option v-for="item in postOptions" :key="item.id" :label="item.name" :value="item.id">
  15. </el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="员工类型" prop="employeeType">
  19. <el-select v-model="queryParams.employeeType" placeholder="员工类型" clearable style="width: 250px">
  20. <el-option v-for="dict in employeeTypeListAll" :key="parseInt(dict.value)"
  21. :label="dict.label" :value="parseInt(dict.value)" />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="性别" prop="gender">
  25. <el-select v-model="queryParams.gender" placeholder="性别" clearable style="width: 250px">
  26. <el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYSTEM_USER_SEX)" :key="parseInt(dict.value)"
  27. :label="dict.label" :value="parseInt(dict.value)" />
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item label="联系电话" prop="contactNumber">
  31. <el-input v-model="queryParams.contactNumber" placeholder="联系电话" clearable style="width: 250px"
  32. @keyup.enter.native="handleQuery" />
  33. </el-form-item>
  34. <el-form-item label="入职日期" prop="entryDate">
  35. <el-date-picker style="width: 250px" value-format="yyyy-MM-dd" v-model="queryParams.entryDate" type="date"
  36. placeholder="入职日期">
  37. </el-date-picker>
  38. </el-form-item>
  39. <el-form-item label="创建人" prop="creatorEmployeeName">
  40. <el-input v-model="queryParams.creatorEmployeeName" placeholder="创建人" clearable style="width: 250px"
  41. @keyup.enter.native="handleQuery" />
  42. </el-form-item>
  43. <el-form-item label="创建时间" prop="createTime">
  44. <el-date-picker v-model="queryParams.createTime" style="width: 250px" value-format="yyyy-MM-dd HH:mm:ss"
  45. type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
  46. :default-time="['00:00:00', '23:59:59']" />
  47. </el-form-item>
  48. <el-form-item label="状态" prop="status">
  49. <el-select v-model="queryParams.status" placeholder="审批状态" clearable style="width: 250px">
  50. <el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" :key="parseInt(dict.value)"
  51. :label="dict.label" :value="parseInt(dict.value)" />
  52. </el-select>
  53. </el-form-item>
  54. <el-form-item>
  55. <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
  56. <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
  57. </el-form-item>
  58. </el-form>
  59. <el-row :gutter="10" class="mb8">
  60. <el-col :span="1.5">
  61. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
  62. v-hasPermi="['relations:entry:create']">新增</el-button>
  63. </el-col>
  64. <el-col :span="1.5">
  65. <el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
  66. v-hasPermi="['relations:entry:export']">导出</el-button>
  67. </el-col>
  68. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  69. </el-row>
  70. <el-table v-loading="loading" :data="typeList">
  71. <el-table-column label="入职人" align="center" prop="entryName" min-width="100" />
  72. <el-table-column label="部门" align="center" prop="deptName" min-width="100" />
  73. <el-table-column label="职位" align="center" prop="position" min-width="100" />
  74. <el-table-column label="员工类型" align="center" prop="employeeTypeDesc" min-width="100"/>
  75. <el-table-column label="性别" align="center" prop="gender" min-width="100">
  76. <template v-slot="scope">
  77. <dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.gender" />
  78. </template>
  79. </el-table-column>
  80. <el-table-column label="联系电话" align="center" prop="contactNumber" min-width="100" />
  81. <el-table-column label="入职日期" align="center" prop="entryDate" min-width="100" />
  82. <el-table-column label="创建人" align="center" prop="creatorEmployeeName" min-width="80" />
  83. <el-table-column label="创建时间" align="center" prop="createTime" min-width="150">
  84. <template v-slot="scope">
  85. <span>{{ parseTime(scope.row.createTime) }}</span>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="状态" align="center" prop="status" min-width="100">
  89. <template v-slot="scope">
  90. <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
  91. </template>
  92. </el-table-column>
  93. <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="150">
  94. <template v-slot="scope">
  95. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
  96. v-hasPermi="['relations:entry:update']">修改</el-button>
  97. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
  98. v-hasPermi="['relations:entry:delete']">删除</el-button>
  99. <el-button size="mini" type="text" icon="el-icon-detail" @click="handleDetail(scope.row)">详情</el-button>
  100. </template>
  101. </el-table-column>
  102. </el-table>
  103. <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
  104. @pagination="getList" />
  105. <!-- 添加或修改对话框 -->
  106. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
  107. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  108. <el-row>
  109. <el-col :span="12">
  110. <el-form-item label="入职人" prop="entryName">
  111. <el-input v-model="form.entryName" placeholder='请输入入职人'></el-input>
  112. </el-form-item>
  113. </el-col>
  114. <el-col :span="12">
  115. <el-form-item label="部门">
  116. <treeselect :default-expand-level="1" v-model="form.deptId" :options="deptOptions"
  117. :normalizer="normalizer" placeholder="请选选择部门" />
  118. </el-form-item>
  119. </el-col>
  120. <el-col :span="12">
  121. <el-form-item label="职位">
  122. <!-- <el-select v-model="form.postId" filterable allow-create default-first-option placeholder="请选择" style="width: 100%;">
  123. <el-option v-for="item in postOptions" :key="item.id" :label="item.name" :value="item.id">
  124. </el-option>
  125. </el-select> -->
  126. <el-select v-model="form.postId" placeholder="请选择" style="width: 100%;">
  127. <el-option v-for="item in postOptions" :key="item.id" :label="item.name" :value="item.id">
  128. </el-option>
  129. </el-select>
  130. </el-form-item>
  131. </el-col>
  132. <el-col :span="12">
  133. <el-form-item label="员工类型" prop="employeeType">
  134. <el-select v-model="form.employeeType" placeholder="请选择" style="width: 100%;">
  135. <el-option v-for="item in employeeTypeListOpen" :key="item.value"
  136. :label="item.label" :value="item.value">
  137. </el-option>
  138. </el-select>
  139. </el-form-item>
  140. </el-col>
  141. <el-col :span="12">
  142. <el-form-item label="性别" prop="gender">
  143. <el-select v-model="form.gender" placeholder="请选择" style="width: 100%;">
  144. <el-option v-for="item in this.getDictDatas(DICT_TYPE.SYSTEM_USER_SEX)" :key="item.value"
  145. :label="item.label" :value="item.value">
  146. </el-option>
  147. </el-select>
  148. </el-form-item>
  149. </el-col>
  150. <el-col :span="12">
  151. <el-form-item label="出生日期" prop="birthday">
  152. <el-date-picker value-format="yyyy-MM-dd" v-model="form.birthday" type="date" placeholder="选择日期"
  153. style="width: 100%;">
  154. </el-date-picker>
  155. </el-form-item>
  156. </el-col>
  157. <el-col :span="12">
  158. <el-form-item label="联系电话" prop="contactNumber">
  159. <el-input v-model="form.contactNumber" placeholder='请输入'></el-input>
  160. </el-form-item>
  161. </el-col>
  162. <el-col :span="12">
  163. <el-form-item label="电子邮箱" prop="email">
  164. <el-input v-model="form.email" placeholder='请输入'></el-input>
  165. </el-form-item>
  166. </el-col>
  167. <el-col :span="24">
  168. <el-form-item label="入职日期" prop="entryDate">
  169. <el-date-picker value-format="yyyy-MM-dd" v-model="form.entryDate" type="date" placeholder="选择日期"
  170. style="width: 100%;">
  171. </el-date-picker>
  172. </el-form-item>
  173. </el-col>
  174. <el-col :span="24">
  175. <el-form-item label="教育背景">
  176. <el-input maxlength="50" show-word-limit type="textarea" v-model="form.education"
  177. placeholder='请输入'></el-input>
  178. </el-form-item>
  179. </el-col>
  180. <el-col :span="24">
  181. <el-form-item label="工作经验">
  182. <el-input maxlength="200" rows="4" show-word-limit type="textarea" v-model="form.workExperience"
  183. placeholder='请输入'></el-input>
  184. </el-form-item>
  185. </el-col>
  186. <el-col :span="24">
  187. <el-form-item label="附件">
  188. <el-upload :action="fileUrl" :headers="headers" :file-list="files" :on-success="handleFileSuccessCite"
  189. :before-upload="beforeUploadFile" :on-remove="handleRemove">
  190. <el-button size="small" type="primary">点击上传</el-button>
  191. </el-upload>
  192. </el-form-item>
  193. </el-col>
  194. <el-col :span="24">
  195. <el-form-item label="备注">
  196. <el-input maxlength="200" rows="4" show-word-limit type="textarea" v-model="form.remarks"
  197. placeholder="请输入" />
  198. </el-form-item>
  199. </el-col>
  200. </el-row>
  201. </el-form>
  202. <div slot="footer" class="dialog-footer">
  203. <el-button type="primary" @click="submitForm">确 定</el-button>
  204. <el-button @click="cancel">取 消</el-button>
  205. </div>
  206. </el-dialog>
  207. <!-- 详情对话框 -->
  208. <el-dialog :title="title" :visible.sync="openDetail" width="800px" append-to-body>
  209. <div class="widget-wrapper">
  210. <div class="widget-list">
  211. <div class="fx-field x-grid-col-12">
  212. <div class="field-label">
  213. <span class="field-required">*</span>
  214. <div class="field-name">入职人</div>
  215. </div>
  216. <div class="field-component">
  217. <span :title="form.loginName">{{ form.entryName }}</span>
  218. </div>
  219. </div>
  220. <div class="fx-field x-grid-col-12">
  221. <div class="field-label">
  222. <div class="field-name">部门</div>
  223. </div>
  224. <div class="field-component">
  225. <span :title="form.deptName">{{ form.deptName }}</span>
  226. </div>
  227. </div>
  228. <div class="fx-field x-grid-col-12">
  229. <div class="field-label">
  230. <div class="field-name">职位</div>
  231. </div>
  232. <div class="field-component">
  233. <span :title="form.position">{{ form.position }}</span>
  234. </div>
  235. </div>
  236. <div class="fx-field x-grid-col-12">
  237. <div class="field-label">
  238. <span class="field-required">*</span>
  239. <div class="field-name">员工类型</div>
  240. </div>
  241. <div class="field-component">
  242. <span :title="form.employeeTypeDesc">{{ form.employeeTypeDesc }}</span>
  243. </div>
  244. </div>
  245. <div class="fx-field x-grid-col-12">
  246. <div class="field-label">
  247. <span class="field-required">*</span>
  248. <div class="field-name">性别</div>
  249. </div>
  250. <div class="field-component">
  251. <span :title="form.gender">
  252. <dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="form.gender"/>
  253. </span>
  254. </div>
  255. </div>
  256. <div class="fx-field x-grid-col-12">
  257. <div class="field-label">
  258. <span class="field-required">*</span>
  259. <div class="field-name">出生日期</div>
  260. </div>
  261. <div class="field-component">
  262. <span :title="form.birthday">{{ form.birthday }}</span>
  263. </div>
  264. </div>
  265. <div class="fx-field x-grid-col-12">
  266. <div class="field-label">
  267. <span class="field-required">*</span>
  268. <div class="field-name">联系电话</div>
  269. </div>
  270. <div class="field-component">
  271. <span :title="form.contactNumber">{{ form.contactNumber }}</span>
  272. </div>
  273. </div>
  274. <div class="fx-field x-grid-col-12">
  275. <div class="field-label">
  276. <span class="field-required">*</span>
  277. <div class="field-name">电子邮箱</div>
  278. </div>
  279. <div class="field-component">
  280. <span :title="form.email">{{ form.email }}</span>
  281. </div>
  282. </div>
  283. <div class="fx-field x-grid-col-12">
  284. <div class="field-label">
  285. <span class="field-required">*</span>
  286. <div class="field-name">入职日期</div>
  287. </div>
  288. <div class="field-component">
  289. <span :title="form.entryDate">{{ form.entryDate }}</span>
  290. </div>
  291. </div>
  292. <div class="fx-field x-grid-col-12">
  293. <div class="field-label">
  294. <div class="field-name">教育背景</div>
  295. </div>
  296. <div class="field-component">
  297. <span :title="form.education">{{ form.education }}</span>
  298. </div>
  299. </div>
  300. <div class="fx-field x-grid-col-12">
  301. <div class="field-label">
  302. <div class="field-name">工作经验</div>
  303. </div>
  304. <div class="field-component">
  305. <span :title="form.workExperience">{{ form.workExperience }}</span>
  306. </div>
  307. </div>
  308. <div class="fx-field x-grid-col-12">
  309. <div class="field-label">
  310. <div class="field-name">附件</div>
  311. </div>
  312. <div class="field-component">
  313. <div v-for="(item, index) in form.fileList" :key="index">
  314. <a :href="item.url" target="_blank" :title="item.name" style="color: #5094d5;">{{ item.name }}</a>
  315. </div>
  316. </div>
  317. </div>
  318. <div class="fx-field x-grid-col-12">
  319. <div class="field-label">
  320. <div class="field-name">备注</div>
  321. </div>
  322. <div class="field-component">
  323. <span :title="form.remarks">{{ form.remarks }}</span>
  324. </div>
  325. </div>
  326. </div>
  327. </div>
  328. </el-dialog>
  329. </div>
  330. </template>
  331. <script>
  332. import { getAllDicts,getOpenDicts } from "@/api/system/tenantDict/data";
  333. import { listSimplePosts } from "@/api/system/post";
  334. import { listEntry, getEntry, delEntry, addEntry, updateEntry, exportEntry } from "@/api/personnel/relations/entry/index";
  335. import Treeselect from "@riophae/vue-treeselect";
  336. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  337. import { listDept } from "@/api/system/dept";
  338. import { DICT_TYPE } from '@/utils/dict'
  339. import { getBaseHeader } from "@/utils/request";
  340. export default {
  341. name: "SystemDictType",
  342. components: {
  343. Treeselect,
  344. },
  345. data() {
  346. return {
  347. employeeTypeListAll:[],
  348. employeeTypeListOpen:[],
  349. files: [],
  350. // 设置上传的请求头部
  351. headers: getBaseHeader(),
  352. // 上传的地址
  353. fileUrl: process.env.VUE_APP_BASE_API + '/admin-api/infra/file/uploaData',
  354. postOptions: [],
  355. // 部门列表
  356. deptOptions: [], // 部门属性结构
  357. // 遮罩层
  358. loading: true,
  359. // 导出遮罩层
  360. exportLoading: false,
  361. // 显示搜索条件
  362. showSearch: true,
  363. // 总条数
  364. total: 0,
  365. // 字典表格数据
  366. typeList: [],
  367. // 弹出层标题
  368. title: "",
  369. // 是否显示弹出层
  370. open: false,
  371. openDetail: false,
  372. // 查询参数
  373. queryParams: {
  374. pageNo: 1,
  375. pageSize: 10,
  376. entryName: undefined,
  377. deptId: undefined,
  378. postId: undefined,
  379. employeeType: undefined,
  380. gender: undefined,
  381. contactNumber: undefined,
  382. entryDate: undefined,
  383. creatorEmployeeName: undefined,
  384. createTime: [],
  385. status: undefined,
  386. },
  387. // 表单参数
  388. form: {},
  389. // 表单校验
  390. rules: {
  391. entryName: [
  392. { required: true, message: '请输入入职人姓名', trigger: 'blur' },
  393. // { min: 3, max: 5, message: '长度在 2 到 5 个字符', trigger: 'blur' }
  394. ],
  395. employeeType: [
  396. { required: true, message: '请选择', trigger: 'change' }
  397. ],
  398. gender: [
  399. { required: true, message: '请选择', trigger: 'change' }
  400. ],
  401. birthday: [
  402. { required: true, message: '请选择日期', trigger: 'change' }
  403. ],
  404. contactNumber: [
  405. { required: true, trigger: "blur", message: "联系电话不能为空" },
  406. {
  407. validator: function (rule, value, callback) {
  408. if (/^1[0-9]\d{9}$|^0\d{2,3}-\d{7,8}$/.test(value) === false) {
  409. callback(new Error("联系电话格式错误"));
  410. } else {
  411. callback();
  412. }
  413. }, trigger: "blur"
  414. }
  415. ],
  416. email: [
  417. {
  418. required: true,
  419. type: "email",
  420. message: "'请输入正确的邮箱地址",
  421. trigger: ["blur", "change"]
  422. }
  423. ],
  424. entryDate: [
  425. { required: true, message: '请选择日期', trigger: 'change' }
  426. ],
  427. },
  428. };
  429. },
  430. created() {
  431. this.getList();
  432. this.getListDept();
  433. },
  434. methods: {
  435. handleRemove(file, fileList) {
  436. console.log(file, fileList);
  437. let fileIds = [];
  438. for (let i in fileList) {
  439. let id = fileList[i].response.data.id;
  440. fileIds.push(id);
  441. }
  442. this.form.fileIdList = fileIds;
  443. },
  444. beforeUploadFile(file) {
  445. console.log(file);
  446. const size = file.size / 1024 / 1024;
  447. console.log(size);
  448. if (size > 5) {
  449. this.$message.error("文件大小不能超过5MB!");
  450. return false;
  451. }
  452. },
  453. handleFileSuccessCite(res, file, fileList) {
  454. console.log(file, fileList);
  455. console.log("------", "==========");
  456. console.log("res = ", res);
  457. let fileIds = [];
  458. for (let i in fileList) {
  459. let response = fileList[i].response;
  460. if (response.errno && response.errno != "0") {
  461. this.$message.error("该文件上传失败,已被移除,请重新上传!");
  462. // 上传失败移除该 file 对象
  463. fileList.splice(i, 1);
  464. } else {
  465. let id = fileList[i].response.data.id;
  466. fileIds.push(id);
  467. }
  468. }
  469. this.form.fileIdList = fileIds;
  470. },
  471. /** 查询部门列表 */
  472. getListDept() {
  473. listDept().then(response => {
  474. this.deptOptions = this.handleTree(response.data, "id");
  475. });
  476. listSimplePosts().then(response => {
  477. // 处理 postOptions 参数
  478. this.postOptions = [];
  479. this.postOptions.push(...response.data);
  480. });
  481. getOpenDicts('tenant_employee_type').then(response => {
  482. this.employeeTypeListOpen = response.data;
  483. })
  484. getAllDicts('tenant_employee_type').then(response => {
  485. this.employeeTypeListAll = response.data;
  486. })
  487. },
  488. /** 转换部门数据结构 */
  489. normalizer(node) {
  490. if (node.children && !node.children.length) {
  491. delete node.children;
  492. }
  493. return {
  494. id: node.id,
  495. label: node.name,
  496. children: node.children
  497. };
  498. },
  499. /** 查询列表 */
  500. getList() {
  501. this.loading = true;
  502. // 执行查询
  503. listEntry(this.queryParams).then(response => {
  504. this.typeList = response.data.list;
  505. this.total = response.data.total;
  506. this.loading = false;
  507. });
  508. },
  509. // 取消按钮
  510. cancel() {
  511. this.open = false;
  512. this.reset();
  513. },
  514. // 表单重置
  515. reset() {
  516. this.files = [],
  517. this.form = {
  518. entryName: undefined,
  519. deptId: undefined,
  520. postId: undefined,
  521. employeeType: undefined,
  522. gender: undefined,
  523. birthday: undefined,
  524. contactNumber: undefined,
  525. email: undefined,
  526. education: undefined,
  527. workExperience: undefined,
  528. startDate: undefined,
  529. fileIdList: undefined,
  530. remarks: undefined,
  531. };
  532. this.resetForm("form");
  533. },
  534. /** 搜索按钮操作 */
  535. handleQuery() {
  536. this.queryParams.pageNo = 1;
  537. this.getList();
  538. },
  539. /** 重置按钮操作 */
  540. resetQuery() {
  541. this.resetForm("queryForm");
  542. this.handleQuery();
  543. },
  544. /** 新增按钮操作 */
  545. handleAdd() {
  546. this.reset();
  547. this.open = true;
  548. this.title = "添加";
  549. },
  550. /** 详情按钮操作 */
  551. handleDetail(row) {
  552. this.reset();
  553. const id = row.id;
  554. getEntry(id).then(response => {
  555. this.form = response.data;
  556. this.openDetail = true;
  557. this.title = "详情";
  558. });
  559. },
  560. /** 修改按钮操作 */
  561. handleUpdate(row) {
  562. this.reset();
  563. const id = row.id;
  564. getEntry(id).then(response => {
  565. let files = response.data.fileList;
  566. if (files) {
  567. this.files = [];
  568. for (let i in files) {
  569. let url = files[i].url;
  570. let name = files[i].name;
  571. let id = files[i].id;
  572. this.files.push({
  573. name: name,
  574. url: url,
  575. response: { error: "0", data: { url: url, id: id } },
  576. });
  577. }
  578. }
  579. this.form = response.data;
  580. this.open = true;
  581. this.title = "修改";
  582. });
  583. },
  584. /** 提交按钮 */
  585. submitForm: function () {
  586. this.$refs["form"].validate(valid => {
  587. if (valid) {
  588. if (this.form.id !== undefined) {
  589. updateEntry(this.form).then(response => {
  590. this.$modal.msgSuccess("修改成功");
  591. this.open = false;
  592. this.getList();
  593. });
  594. } else {
  595. addEntry(this.form).then(response => {
  596. this.$modal.msgSuccess("新增成功");
  597. this.open = false;
  598. this.getList();
  599. });
  600. }
  601. }
  602. });
  603. },
  604. /** 删除按钮操作 */
  605. handleDelete(row) {
  606. const ids = row.id || this.ids;
  607. this.$modal.confirm('是否确认删除数据项?').then(function () {
  608. return delEntry(ids);
  609. }).then(() => {
  610. this.getList();
  611. this.$modal.msgSuccess("删除成功");
  612. }).catch(() => { });
  613. },
  614. /** 导出按钮操作 */
  615. handleExport() {
  616. // 处理查询参数
  617. let params = { ...this.queryParams };
  618. params.pageNo = undefined;
  619. params.pageSize = undefined;
  620. // 执行导出
  621. this.$modal.confirm('是否确认导出所有数据项?').then(() => {
  622. this.exportLoading = true;
  623. return exportEntry(params);
  624. }).then(response => {
  625. this.$download.excel(response, '入职信息.xls');
  626. this.exportLoading = false;
  627. }).catch(() => { });
  628. }
  629. }
  630. };
  631. </script>
  632. <style lang="scss" scoped>
  633. .widget-wrapper>.widget-list {
  634. display: flex;
  635. flex-wrap: wrap;
  636. }
  637. .x-grid-col-6 {
  638. width: 50%;
  639. }
  640. .x-grid-col-12 {
  641. width: 100%;
  642. }
  643. .fx-field {
  644. line-height: 20px;
  645. padding: 7px 12px 12px;
  646. position: relative;
  647. }
  648. .fx-field .field-label {
  649. word-wrap: break-word;
  650. color: #141e31;
  651. display: flex;
  652. font-weight: 600;
  653. line-height: 20px;
  654. padding: 5px 0;
  655. position: relative;
  656. word-break: break-word;
  657. }
  658. .fx-field .field-label .field-required {
  659. color: #eb5050;
  660. margin-left: -6px;
  661. position: relative;
  662. }
  663. .fx-field .field-label .field-name {
  664. overflow: hidden;
  665. }
  666. .field-component {
  667. word-wrap: break-word;
  668. background: #f5f6f8;
  669. border-radius: 2px;
  670. color: #141e31;
  671. font-size: 14px;
  672. line-height: 20px;
  673. min-height: 32px;
  674. padding: 6px 8px;
  675. white-space: pre-wrap;
  676. word-break: break-word;
  677. }
  678. ul {
  679. padding-left: 0px !important;
  680. }
  681. .el-tag+.el-tag {
  682. margin-left: 10px;
  683. }
  684. </style>