index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  1. <template>
  2. <!-- 会议申请 -->
  3. <div class="content-container">
  4. <div class="right-box">
  5. <div class="top">
  6. <el-form
  7. ref="form"
  8. :inline="true"
  9. :model="form"
  10. style="float: left; height: 45px"
  11. >
  12. <el-form-item label="关键字:">
  13. <el-input
  14. v-model="form.content"
  15. size="small"
  16. placeholder="请输入会议单号、会议名称"
  17. style="width: 220px"
  18. ></el-input>
  19. </el-form-item>
  20. <el-form-item label="申请部门:">
  21. <el-select
  22. v-model="form.registerDept"
  23. filterable
  24. clearable
  25. collapse-tags
  26. placeholder="请选择申请部门"
  27. size="small"
  28. >
  29. <el-option
  30. v-for="item in allDept"
  31. :key="item.id"
  32. :label="item.name"
  33. :value="item.id"
  34. />
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item label="申请时间:">
  38. <el-date-picker
  39. v-model="form.purchaseTime"
  40. type="daterange"
  41. align="right"
  42. value-format="yyyy-MM-dd"
  43. unlink-panels
  44. range-separator="至"
  45. start-placeholder="开始日期"
  46. end-placeholder="结束日期"
  47. :picker-options="pickerOptions"
  48. size="small"
  49. style="width: 240px"
  50. />
  51. </el-form-item>
  52. <el-button
  53. type="primary"
  54. icon="el-icon-search"
  55. size="small"
  56. @click="queryProcess"
  57. style="margin-top: 4px"
  58. >查询</el-button
  59. >
  60. </el-form>
  61. <el-button
  62. type="primary"
  63. @click="orderRegister"
  64. icon="el-icon-plus"
  65. size="small"
  66. >会议申请</el-button
  67. >
  68. </div>
  69. <div class="table-div">
  70. <el-table
  71. :data="tableData"
  72. style="width: 100%"
  73. :style="{ width: '100%' }"
  74. height="100%"
  75. :header-cell-style="{
  76. background: 'rgba(250,250,250)',
  77. color: 'rgb(50,59,65)',
  78. height: '38px',
  79. textAlign: 'center',
  80. }"
  81. >
  82. <template slot="empty">
  83. <img src="@/assets/icon/null.png" alt="" />
  84. <p class="empty-p">暂无数据</p>
  85. </template>
  86. <el-table-column type="selection" align="center"></el-table-column>
  87. <el-table-column
  88. type="index"
  89. label="序号"
  90. align="center"
  91. width="60px"
  92. ></el-table-column>
  93. <el-table-column
  94. prop="processNumber"
  95. label="会议单号"
  96. align="center"
  97. ></el-table-column>
  98. <el-table-column
  99. prop="name"
  100. label="会议名称"
  101. align="center"
  102. ></el-table-column>
  103. <el-table-column
  104. prop="roomName"
  105. label="地点"
  106. align="center"
  107. ></el-table-column>
  108. <el-table-column
  109. prop="startTime"
  110. label="开始时间"
  111. align="center"
  112. ></el-table-column>
  113. <el-table-column
  114. prop="endTime"
  115. label="结束时间"
  116. align="center"
  117. ></el-table-column>
  118. <el-table-column
  119. prop="registerDeptName"
  120. label="申请部门"
  121. align="center"
  122. >
  123. <template slot-scope="{ row }">
  124. <span>{{ getDeptName(row.registerDept) }}</span>
  125. </template>
  126. </el-table-column>
  127. <el-table-column
  128. prop="registerStaffName"
  129. label="申请人"
  130. align="center"
  131. >
  132. <template slot-scope="{ row }">
  133. <span>{{
  134. getUserName(row.registerDept, row.registerStaff)
  135. }}</span>
  136. </template>
  137. </el-table-column>
  138. <el-table-column
  139. prop="registerTime"
  140. label="申请时间"
  141. align="center"
  142. ></el-table-column>
  143. <el-table-column prop="processState" label="流程状态" align="center">
  144. <template slot-scope="{ row }">
  145. <span>{{ getOrderStateNameById(row.processState) }}</span>
  146. </template>
  147. </el-table-column>
  148. <el-table-column label="操作" align="center">
  149. <template slot-scope="scope">
  150. <el-button
  151. @click="queryOrderProcessById(scope.row, false)"
  152. icon="el-icon-tickets"
  153. title="查看"
  154. type="text"
  155. size="small"
  156. style="font-size: 16px"
  157. ></el-button>
  158. <el-button
  159. v-if="scope.row.processState == 1"
  160. @click="queryOrderProcessById(scope.row, true)"
  161. icon="el-icon-edit"
  162. title="修改"
  163. type="text"
  164. size="small"
  165. style="font-size: 16px"
  166. ></el-button>
  167. <el-button
  168. v-if="scope.row.processState == 1"
  169. @click="delOrderProcessById(scope.row)"
  170. icon="el-icon-delete"
  171. title="删除"
  172. type="text"
  173. size="small"
  174. style="font-size: 16px; color: red"
  175. ></el-button>
  176. </template>
  177. </el-table-column>
  178. </el-table>
  179. </div>
  180. <el-pagination
  181. :current-page="pagination.current"
  182. :page-sizes="[20, 30, 50, 100, 200]"
  183. :page-size="pagination.size"
  184. :total="pagination.total"
  185. @size-change="changePaginationSize"
  186. @current-change="changePaginationCurrent"
  187. layout="total, sizes, prev, pager, next, jumper"
  188. />
  189. </div>
  190. <!-- 详情 -->
  191. <el-dialog
  192. class="tf-dialog"
  193. :title="title"
  194. :visible.sync="dialogFormVisible"
  195. width="1200px"
  196. top="60px"
  197. style="padding: 10px"
  198. >
  199. <process-order
  200. v-if="dialogFormVisible"
  201. ref="merge"
  202. :orderName="orderName"
  203. :orderCode="orderCode"
  204. :businessType="businessType"
  205. :proId="processId"
  206. :optionType="optionType"
  207. :editData="editData"
  208. :comps="compts"
  209. @remind="remind"
  210. ></process-order>
  211. <div slot="footer" class="dialog-footer">
  212. <el-button @click="dialogFormVisible = false" size="small"
  213. >取 消</el-button
  214. >
  215. <el-button
  216. v-if="optionType != 0"
  217. @click="preserveHandler(0)"
  218. size="small"
  219. >保 存</el-button
  220. >
  221. <el-button
  222. v-if="optionType != 0"
  223. type="primary"
  224. @click="preserveHandler(1)"
  225. size="small"
  226. >提 交</el-button
  227. >
  228. </div>
  229. </el-dialog>
  230. </div>
  231. </template>
  232. <script>
  233. import { getAllUserInfo } from "@/api/base";
  234. import {
  235. getTypetree,
  236. getProcessPageList,
  237. queryProcessPage,
  238. getProcessList2,
  239. qOrderProcessById,
  240. addOrderProcess,
  241. delOrderProcess,
  242. querySupervisePage,
  243. } from "@/api/process/process";
  244. import { config } from "../../../components/cfgOrderProcess";
  245. import processOrder from "@/views/mbsys/publicOrder/orderProcess/detail";
  246. import { publicComponents } from "../processForm/config";
  247. export default {
  248. components: { processOrder },
  249. data() {
  250. return {
  251. // form
  252. config: config,
  253. pickerOptions: {
  254. shortcuts: [
  255. {
  256. text: "最近一周",
  257. onClick(picker) {
  258. const end = new Date();
  259. const start = new Date();
  260. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  261. picker.$emit("pick", [start, end]);
  262. },
  263. },
  264. {
  265. text: "最近一个月",
  266. onClick(picker) {
  267. const end = new Date();
  268. const start = new Date();
  269. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  270. picker.$emit("pick", [start, end]);
  271. },
  272. },
  273. {
  274. text: "最近三个月",
  275. onClick(picker) {
  276. const end = new Date();
  277. const start = new Date();
  278. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  279. picker.$emit("pick", [start, end]);
  280. },
  281. },
  282. ],
  283. },
  284. allDept: [], //所有部门
  285. curUser: null, //当前登录人
  286. orderName: "会议申请单", //工单名称
  287. orderCode: "", //工单编号
  288. form: {
  289. content: "", //关键字
  290. supplierId: "", //供应商
  291. },
  292. tableData: [],
  293. title: "",
  294. pagination: { current: 1, size: 20, total: 0 },
  295. dialogFormVisible: false,
  296. curProcess: null,
  297. businessType: 0, //业务类型
  298. optionType: 0, //操作类型 0:查看,1:新增,2:修改
  299. editData: {}, //操作数据
  300. processId: 0, //流程ID
  301. compts: publicComponents,
  302. curEditRow: null, //当前操作数据
  303. };
  304. },
  305. watch: {},
  306. created() {
  307. this.curUser = this.$store.state.user;
  308. //获取业务类别
  309. getTypetree({ datatypes: 0, id: "" })
  310. .then((res) => {
  311. if (res.code === 1) {
  312. if (res.result.length > 0)
  313. if (res.result[0].vos.length > 1)
  314. this.businessTypes = res.result[0].vos[0].vos;
  315. }
  316. })
  317. .catch((ex) => {
  318. this.$message.error("获取数据出错!");
  319. });
  320. /**
  321. * 查询所有用户所有部门和所有人
  322. */
  323. getAllUserInfo().then((res) => {
  324. if (res.code == 1) {
  325. const data = res.result;
  326. for (const i in data) {
  327. data[i].value = data[i].id;
  328. data[i].label = data[i].name;
  329. if (data[i].users) {
  330. data[i].children = data[i].users;
  331. for (const j in data[i].children) {
  332. data[i].children[j].value = data[i].children[j].id;
  333. data[i].children[j].label = data[i].children[j].realName;
  334. }
  335. }
  336. }
  337. this.allDept = data;
  338. }
  339. });
  340. this.getProcess();
  341. },
  342. methods: {
  343. /**
  344. * 根据部门ID获取部门名称
  345. */
  346. getDeptName(deptId) {
  347. if (this.allDept.length > 0) {
  348. const dept = this.allDept.find((item) => item.id == deptId);
  349. if (dept) return dept.name;
  350. else deptId;
  351. } else return deptId;
  352. },
  353. /**
  354. * 根据部门ID和人员id获取人员名称
  355. */
  356. getUserName(deptId, userId) {
  357. if (this.allDept.length > 0) {
  358. const dept = this.allDept.find((item) => item.id == deptId);
  359. if (dept) {
  360. const user = dept.users.find((p) => p.id == userId);
  361. if (user) return user.realName;
  362. else return userId;
  363. } else return userId;
  364. } else return userId;
  365. },
  366. changePaginationSize(value) {
  367. this.pagination.size = value;
  368. this.queryProcess();
  369. },
  370. changePaginationCurrent(value) {
  371. this.pagination.current = value;
  372. this.queryProcess();
  373. },
  374. /**
  375. * 获取催办消息
  376. */
  377. async getUrgeInfo(data) {
  378. // this.tableData.forEach((row) => {
  379. // });
  380. let tableList = data;
  381. for (let i = 0; i < tableList.length; i++) {
  382. tableList[i]["urgeInfo"] = "";
  383. if (tableList[i].urgeNumber > 0) {
  384. let data = {
  385. processId: tableList[i].id, //流程ID
  386. nodeBranch: tableList[i].nodeBranch, //流程节点分支
  387. processNode: tableList[i].processNode, //流程节点
  388. superviseDept: parseInt(this.curUser.departmentId), //督办部门
  389. superviseStaff: this.curUser.userId, //督办人
  390. };
  391. const res = await this.querySupervisePage(data);
  392. let result = [];
  393. if (res) {
  394. res.result.records.forEach((item) => {
  395. const dept = this.getDeptName(item.handleDept);
  396. result.push(
  397. item.createTime +
  398. " " +
  399. dept +
  400. " " +
  401. item.createUserName +
  402. " " +
  403. item.remark
  404. );
  405. });
  406. }
  407. tableList[i]["urgeInfo"] = result;
  408. }
  409. }
  410. this.tableData = tableList;
  411. },
  412. /**
  413. * 查询工单列表
  414. */
  415. queryProcess() {
  416. //带入当前登录人查询
  417. //ywType 业务类型,基础类型
  418. //configId 流程类型
  419. //registerStaff 登记人
  420. //processState 工单状态:1草稿、2处理、3终止、4处理完成
  421. let map = {
  422. // processType: 94,
  423. configId: this.processId,
  424. registerStaff: Number(this.curUser.userId),
  425. };
  426. let params = {
  427. id: 3,
  428. map,
  429. };
  430. let { current, size, total } = this.pagination;
  431. let url = `current=${current}&size=${size}&total=${total}`;
  432. if (this.form.content != "")
  433. Object.assign(map, { content: this.form.content });
  434. if (this.form.registerDept != "")
  435. Object.assign(map, { registerDept: this.form.registerDept });
  436. if (this.form.purchaseTime) {
  437. Object.assign(map, {
  438. stratTime: this.form.purchaseTime[0] + " 00:00:00",
  439. endTime: this.form.purchaseTime[1] + " 23:59:59",
  440. });
  441. }
  442. getProcessList2(params, url).then((res) => {
  443. if (res.code == 1) {
  444. //this.tableData = res.result.records;
  445. this.getUrgeInfo(res.result.records);
  446. this.pagination.total = res.result.total;
  447. }
  448. });
  449. },
  450. /**
  451. * 查询列表数据
  452. */
  453. getProcess() {
  454. let data = {
  455. current: 1,
  456. size: 999,
  457. };
  458. getProcessPageList(data)
  459. .then((res) => {
  460. this.curProcess = res.result.records.find(
  461. (item) => item.processNumber === "HYLC"
  462. );
  463. if (this.curProcess) {
  464. this.processId = this.curProcess.id;
  465. this.businessType = this.curProcess.hasOwnProperty("processType")
  466. ? this.curProcess.processType
  467. : null;
  468. }
  469. this.queryProcess();
  470. })
  471. .catch((ex) => {
  472. this.$message.error("获取流程列表失败!");
  473. });
  474. },
  475. // 提示
  476. remind(data) {
  477. this.dialogFormVisible = false;
  478. //设置初始操作类型
  479. this.optionType = 1;
  480. this.queryProcess();
  481. },
  482. orderRegister() {
  483. this.title = "会议申请-新增";
  484. this.optionType = 1; //操作类型 0:查看,1:新增,2:修改
  485. this.editData = {};
  486. this.curEditRow = null;
  487. this.dialogFormVisible = true;
  488. },
  489. /**
  490. * 根据id获取工单状态
  491. */
  492. getOrderStateNameById(id) {
  493. if (this.config && this.config.hasOwnProperty("orderState")) {
  494. const obj = this.config.orderState.find((item) => item.key === id);
  495. if (obj) return obj.value;
  496. else return id;
  497. } else {
  498. return id;
  499. }
  500. },
  501. /**
  502. * 通过id查询工单流程信息
  503. * @row 查询数据
  504. * @type 操作类型 false:查看,true:修改
  505. */
  506. queryOrderProcessById(row, type) {
  507. this.curEditRow = type ? row : null;
  508. qOrderProcessById(row.id).then((res) => {
  509. if (res.code == 1) {
  510. this.title = type ? "会议申请-修改" : "会议申请-详情";
  511. this.optionType = type ? 2 : 0;
  512. this.editData = res.result;
  513. this.dialogFormVisible = true;
  514. }
  515. });
  516. },
  517. /**
  518. * 删除工单流程
  519. */
  520. delOrderProcessById(row) {
  521. this.$confirm(
  522. `此操作将永久删除单号为【${row.processNumber}】名称为【${row.name}】的单, 是否继续?`,
  523. "提示",
  524. {
  525. confirmButtonText: "确定",
  526. cancelButtonText: "取消",
  527. type: "warning",
  528. }
  529. )
  530. .then(() => {
  531. this.deleteOrder(row.id);
  532. })
  533. .catch(() => {
  534. this.$message({
  535. type: "info",
  536. message: "已取消删除",
  537. });
  538. });
  539. },
  540. /***
  541. * 删除工单流程
  542. */
  543. deleteOrder(id) {
  544. delOrderProcess(id).then((res) => {
  545. if (res.code == 1) {
  546. this.queryProcess();
  547. this.$message({
  548. type: "success",
  549. message: "删除成功!",
  550. });
  551. } else {
  552. this.$message({
  553. type: "error",
  554. message: "删除失败",
  555. });
  556. }
  557. });
  558. },
  559. /**
  560. * 新增工单流程信息
  561. */
  562. addOrder(param) {
  563. addOrderProcess(param).then((res) => {
  564. if (res.code == 1) {
  565. this.dialogFormVisible = false;
  566. this.queryProcess();
  567. this.$message.success("编辑成功!");
  568. }
  569. });
  570. },
  571. /**
  572. * 提交数据
  573. * @state 操作状态 保存为0,提交为1
  574. */
  575. preserveHandler(state) {
  576. let params = this.$refs.merge.submitForm();
  577. console.log("提交数据", params);
  578. if (params == null) return;
  579. //处理提交参数到接口参数映射
  580. let data = this.formParamMapping(params, state);
  581. if (data) this.addOrder(data);
  582. },
  583. /**
  584. * 表单参数映射到提交参数
  585. */
  586. formParamMapping(data, state) {
  587. let params = {
  588. operateState: 0, // 表单类型:0、其它; 1、采购入库(关联采购工单);2、余料退库(关联出库工单);3、工程出库(关联工程工单);4其它出库;5、维修出库(关联维修工单)
  589. };
  590. let formData = new FormData();
  591. if (this.curEditRow != null)
  592. Object.assign(params, { id: this.curEditRow.id }); //流程ID
  593. //表单字段
  594. if (data.hasOwnProperty("configId")) {
  595. params = Object.assign(params, { configId: data.configId }); //流程配置ID
  596. }
  597. let documentDto = {
  598. content: data.form.content, //会议内容
  599. theme: data.form.name, //主题
  600. };
  601. // 关联设施字段
  602. let prdtos = [];
  603. prdtos.push({
  604. relationId: data.form.relationId, //会议地址
  605. tableId: 1, //会议地址
  606. });
  607. let processNode = {
  608. //第一步
  609. handleResults: 0, //处理结果0:不处理;1:同意;2:不同意;
  610. saveState: state, //0保存,1提交
  611. annex: data.hasOwnProperty("existsFilesId") ? data.existsFilesId : "", //附件id
  612. remark: data.hasOwnProperty("examine") ? data.examine.remarks : "",
  613. typeOne: data.form.typeOne, //是否发送通知
  614. documentDto,
  615. prdtos,
  616. staffDtos: data.form.staffDtos,
  617. };
  618. if (data.hasOwnProperty("form")) {
  619. Object.assign(params, {
  620. name: data.form.name, // 表单名称
  621. registerTime: data.form.registerTime, //登记时间
  622. startTime:
  623. data.form.startTime.length > 11
  624. ? data.form.startTime
  625. : data.form.startTime + " 00:00:00", // 时间
  626. endTime:
  627. data.form.endTime.length > 11
  628. ? data.form.endTime
  629. : data.form.endTime + " 00:00:00", // 时间
  630. remark: data.form.remark, //备注
  631. totalPrice: data.form.totalPrice, // 人数
  632. });
  633. }
  634. Object.assign(params, { ywType: this.businessType }); //业务类型
  635. //审核信息
  636. if (data.hasOwnProperty("examine")) {
  637. //下一步审核
  638. let nextStep = {
  639. dept: data.examine.hasOwnProperty("dept") ? data.examine.dept : "", //部门
  640. deptStaff: data.examine.hasOwnProperty("deptStaff")
  641. ? data.examine.deptStaff
  642. : "", //人员
  643. processStep: data.examine.hasOwnProperty("processStep")
  644. ? data.examine.processStep
  645. : 1, //流程步骤
  646. stepNode: data.examine.hasOwnProperty("stepNode")
  647. ? data.examine.stepNode
  648. : 1, //步骤节点
  649. };
  650. Object.assign(processNode, {
  651. headleState: data.examine.headleState, //处理状态:1提交;2:驳回;3:转派;4:终止;
  652. nextStep: nextStep, //下一步信息,下一步,驳回,转派
  653. processStep: 1, //流程步骤(当前)
  654. stepNode: 1, //步骤节点(当前)
  655. });
  656. if (
  657. state == 1 &&
  658. data.examine.headleState == 1 &&
  659. (nextStep.deptStaff == "" || nextStep.deptStaff == null)
  660. ) {
  661. this.$message.warning("提交请选择下一步审核人");
  662. return null;
  663. }
  664. }
  665. // 步骤节点 stepNode
  666. Object.assign(params, { stepNode: 1 });
  667. Object.assign(params, { processNode: processNode }); //业务类型
  668. const json = JSON.stringify(params);
  669. // 将 json 字符串转化为 Blob 对象
  670. const blob = new Blob([json], {
  671. type: "application/json",
  672. });
  673. formData.append("dto", blob);
  674. //文件
  675. if (data.hasOwnProperty("files")) {
  676. let files = [];
  677. data.files.forEach((file, index) => {
  678. formData.append("fileList", file.file);
  679. });
  680. }
  681. return formData;
  682. },
  683. // 详细
  684. newPlanForMonthDia(bool, e) {},
  685. // 新增页面确定按钮
  686. applicationFn() {
  687. if (!this.sizeForm.name) return this.$message.error("请输入会议名称");
  688. if (!this.sizeForm.address) return this.$message.error("请输入地点");
  689. if (!this.sizeForm.startDate)
  690. return this.$message.error("请输入会议时间");
  691. if (!this.sizeForm.people) return this.$message.error("请输入参会人员");
  692. if (!this.sizeForm.department)
  693. return this.$message.error("请输入申请部门");
  694. if (!this.sizeForm.name2) return this.$message.error("请输入申请人");
  695. if (!this.sizeForm.value1) return this.$message.error("请输入申请时间");
  696. },
  697. },
  698. };
  699. </script>
  700. <style lang="scss" scoped>
  701. .content-container {
  702. width: 100%;
  703. box-sizing: border-box;
  704. padding: 10px;
  705. position: absolute;
  706. top: 43px;
  707. bottom: 0;
  708. .right-box {
  709. height: 100%;
  710. overflow-y: auto;
  711. box-sizing: border-box;
  712. .top {
  713. height: 33px;
  714. text-align: right;
  715. .upload-demo {
  716. display: inline-block;
  717. }
  718. }
  719. // /deep/.el-form-item__content {
  720. // display: flex;
  721. // align-items: center;
  722. // }
  723. .table-div {
  724. height: calc(100% - 81px);
  725. }
  726. .el-pagination {
  727. margin-top: 16px;
  728. }
  729. }
  730. }
  731. .el-table {
  732. >>> .el-table__body {
  733. tr {
  734. &:nth-child(2n) {
  735. background-color: #f0f9eb;
  736. }
  737. td {
  738. height: 23px;
  739. line-height: 23px;
  740. padding: 2px 1px !important;
  741. .el-button {
  742. padding: 0;
  743. }
  744. }
  745. }
  746. }
  747. }
  748. .tf-dialog {
  749. >>> .el-dialog__header {
  750. background: #2d74e7;
  751. .el-dialog__title {
  752. color: aliceblue !important;
  753. }
  754. .el-dialog__close {
  755. color: aliceblue !important;
  756. }
  757. }
  758. }
  759. </style>