registerForm.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867
  1. <template>
  2. <!-- 会议申请详情 -->
  3. <div class="form-container">
  4. <el-form :model="form" :rules="rules" ref="form" label-width="auto">
  5. <blocks title="基本信息">
  6. <el-row :gutter="24">
  7. <el-col :span="12">
  8. <el-form-item label="会议名称:" prop="name" style="height: 45px">
  9. <el-input
  10. v-model="form.name"
  11. size="small"
  12. maxlength="15"
  13. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  14. ></el-input>
  15. </el-form-item>
  16. </el-col>
  17. <el-col :span="12">
  18. <el-form-item label="会议内容:" style="height: 45px">
  19. <el-input
  20. v-model="form.content"
  21. size="small"
  22. maxlength="50"
  23. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  24. ></el-input>
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="8">
  28. <el-form-item label="地点:" style="height: 45px" prop="relationId">
  29. <el-select
  30. v-model="form.relationId"
  31. clearable
  32. placeholder="请选择会议室列表"
  33. size="small"
  34. style="width: 100%"
  35. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  36. >
  37. <el-option
  38. v-for="item in meetRooms"
  39. :key="item.id"
  40. :label="item.roomName"
  41. :value="item.id"
  42. />
  43. </el-select>
  44. </el-form-item>
  45. </el-col>
  46. <el-col :span="8">
  47. <el-form-item
  48. label="会议开始时间:"
  49. style="height: 45px"
  50. prop="startTime"
  51. >
  52. <el-date-picker
  53. v-model="form.startTime"
  54. type="datetime"
  55. size="small"
  56. placeholder="年/月/日"
  57. style="width: 100%"
  58. @change="startTimeChange"
  59. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  60. >
  61. </el-date-picker>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="8">
  65. <el-form-item
  66. label="会议结束时间:"
  67. style="height: 45px; width: 100%"
  68. prop="endTime"
  69. >
  70. <el-date-picker
  71. v-model="form.endTime"
  72. type="datetime"
  73. size="small"
  74. placeholder="年/月/日"
  75. style="width: 100%"
  76. @change="endTimeChange"
  77. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  78. >
  79. </el-date-picker>
  80. </el-form-item>
  81. </el-col>
  82. <!-- <el-col :span="5">
  83. <el-form-item label="会议时长:">
  84. <span>3小时</span>
  85. </el-form-item>
  86. </el-col> -->
  87. <!-- <el-col :span="8">
  88. <el-form-item label="参会人员:" required>
  89. <el-input
  90. v-model="form.deptStaff"
  91. size="small"
  92. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  93. ></el-input>
  94. </el-form-item>
  95. </el-col> -->
  96. <el-col :span="8">
  97. <el-form-item label="参会部门:" prop="dept" style="height: 45px">
  98. <el-select
  99. v-model="form.dept"
  100. multiple
  101. collapse-tags
  102. filterable
  103. placeholder="请选择参会部门"
  104. style="width: 100%"
  105. size="mini"
  106. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  107. @change="superviseDeptChange"
  108. >
  109. <el-option
  110. v-for="item in option"
  111. :key="item.value"
  112. :label="item.label"
  113. :value="item.value"
  114. />
  115. </el-select>
  116. </el-form-item>
  117. </el-col>
  118. <el-col :span="8">
  119. <el-form-item
  120. label="参会人员:"
  121. prop="deptStaff"
  122. style="height: 45px"
  123. >
  124. <el-select
  125. v-model="form.deptStaff"
  126. multiple
  127. filterable
  128. collapse-tags
  129. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  130. placeholder="请选择参会人员"
  131. style="width: 100%"
  132. size="mini"
  133. @change="superviseUserChange"
  134. >
  135. <el-option-group
  136. v-for="group in superviseUsers"
  137. :key="group.id"
  138. :label="group.label"
  139. >
  140. <el-option
  141. v-for="item in group.users"
  142. :key="item.id"
  143. :label="item.realName"
  144. :value="item.id"
  145. >
  146. </el-option>
  147. </el-option-group>
  148. </el-select>
  149. </el-form-item>
  150. </el-col>
  151. <el-col :span="8">
  152. <el-form-item label="参会人数:" style="height: 45px">
  153. <el-input
  154. v-model="form.totalPrice"
  155. size="small"
  156. disabled
  157. ></el-input>
  158. </el-form-item>
  159. </el-col>
  160. <el-col :span="8">
  161. <el-form-item
  162. label="申请部门:"
  163. prop="useDept"
  164. style="height: 45px"
  165. >
  166. <el-select
  167. v-model="form.useDept"
  168. filterable
  169. collapse-tags
  170. placeholder="请选择申请部门"
  171. size="small"
  172. style="width: 100%"
  173. disabled
  174. >
  175. <el-option
  176. v-for="item in departments"
  177. :key="item.id"
  178. :label="item.name"
  179. :value="item.id"
  180. />
  181. </el-select>
  182. </el-form-item>
  183. </el-col>
  184. <el-col :span="8">
  185. <el-form-item
  186. label="申请人:"
  187. prop="personLiable"
  188. style="height: 45px"
  189. >
  190. <el-input
  191. v-model="form.personLiable"
  192. size="small"
  193. disabled
  194. ></el-input>
  195. </el-form-item>
  196. </el-col>
  197. <el-col :span="8">
  198. <el-form-item
  199. label="申请时间:"
  200. prop="registerTime"
  201. style="height: 45px"
  202. >
  203. <el-date-picker
  204. v-model="form.registerTime"
  205. type="datetime"
  206. placeholder="选择日期时间"
  207. style="width: 100%"
  208. size="small"
  209. disabled
  210. >
  211. </el-date-picker>
  212. </el-form-item>
  213. </el-col>
  214. <el-col :span="6">
  215. <el-form-item label="发送通知:" style="height: 45px">
  216. <el-select
  217. v-model="form.typeOne"
  218. size="small"
  219. style="width: 100%"
  220. clearable
  221. :disabled="isOpt ? (optionType == 0 ? true : false) : true"
  222. >
  223. <el-option
  224. v-for="item in optionMes"
  225. :key="item.value"
  226. :label="item.label"
  227. :value="item.value"
  228. />
  229. </el-select>
  230. </el-form-item>
  231. </el-col>
  232. </el-row>
  233. </blocks>
  234. <blocks title="附件">
  235. <el-row :gutter="24">
  236. <el-col
  237. v-for="(file, index) in existsFiles"
  238. :key="index"
  239. class="tf-col"
  240. :span="8"
  241. >
  242. <div class="file">
  243. <div
  244. class="file-name"
  245. @click="downloadFile(file)"
  246. :style="isOpt && optionType != 0 ? '' : 'width:100%;'"
  247. >
  248. {{ file.fileName }}
  249. </div>
  250. <div
  251. v-if="isOpt ? optionType != 0 : false"
  252. class="btn-file"
  253. @click="deleteFile(file)"
  254. >
  255. x
  256. </div>
  257. </div>
  258. </el-col>
  259. </el-row>
  260. <upload
  261. ref="upload"
  262. :files="files"
  263. v-if="isOpt ? (optionType == 0 ? false : true) : false"
  264. ></upload>
  265. </blocks>
  266. <blocks title="处理信息">
  267. <examineForm
  268. ref="examine"
  269. :cfgParam="{ isOpt, optionType }"
  270. :step="step"
  271. :steps="steps"
  272. :process="process"
  273. :editData="editData"
  274. :allDeptAndUser="allDeptAndUser"
  275. ></examineForm>
  276. </blocks>
  277. </el-form>
  278. <!-- 详情 -->
  279. <el-dialog
  280. class="tf-dialog"
  281. :title="title"
  282. :visible.sync="dialogFormVisible"
  283. width="1200px"
  284. top="60px"
  285. style="padding: 10px"
  286. append-to-body
  287. >
  288. <vehicle-transfer
  289. v-if="dialogFormVisible"
  290. ref="transfer"
  291. :currSelects="tableData"
  292. ></vehicle-transfer>
  293. <div slot="footer" class="dialog-footer" style="text-align: center">
  294. <el-button @click="cancelSubmit" size="small">取 消</el-button>
  295. <el-button type="primary" @click="submitData" size="small"
  296. >提 交</el-button
  297. >
  298. </div>
  299. </el-dialog>
  300. </div>
  301. </template>
  302. <script>
  303. import blocks from "@/views/mbsys/components/Blocks.vue";
  304. import examineForm from "@/views/mbsys/components/examineForm.vue";
  305. import vehicleTransfer from "@/views/mbsys/components/vehicleTransfer.vue";
  306. import upload from "@/views/mbsys/components/upload.vue";
  307. import { getCompanyAll, getFiles, getAllUserInfo } from "@/api/base";
  308. import { getMatterTypes, getSupplier } from "@/api/mbsys/materialmanage";
  309. import { getconferenceroom } from "@/api/mbsys/collaborative.js";
  310. import { config } from "../../../components/cfgOrderProcess";
  311. import { parseTime } from "@/utils/index";
  312. export default {
  313. components: { blocks, examineForm, upload, vehicleTransfer },
  314. props: {
  315. /**
  316. * 是否为当前状态
  317. */
  318. isOpt: {
  319. type: Boolean,
  320. required: true,
  321. },
  322. /**
  323. * 当前状态操作方式0:查看,1:新增,2:修改
  324. */
  325. optionType: {
  326. type: Number,
  327. required: true,
  328. },
  329. /**
  330. * 当前步骤
  331. */
  332. step: {
  333. type: Object,
  334. required: true,
  335. },
  336. /**
  337. * 流程所有
  338. */
  339. steps: {
  340. type: Array,
  341. required: true,
  342. },
  343. /**
  344. * 流程配置信息
  345. */
  346. process: {
  347. type: Object,
  348. required: true,
  349. },
  350. /**
  351. * 编辑\查询数据
  352. */
  353. editData: {
  354. type: Object,
  355. required: true,
  356. },
  357. /**
  358. * 所有部门和用户
  359. */
  360. allDeptAndUser: {
  361. type: Array,
  362. required: true,
  363. },
  364. },
  365. data() {
  366. return {
  367. // pickerOptions0: {
  368. // disabledDate: (time) => {
  369. // //如果已经已知结束日期,就把结束日期之后的日期禁用
  370. // if (this.form.endTime) {
  371. // return time.getTime() > new Date(this.form.endTime).getTime();
  372. // } else {
  373. // //否则 就把当前日期之后的日期禁用掉
  374. // return time.getTime() > Date.now();
  375. // }
  376. // },
  377. // },
  378. // pickerOptions1: {
  379. // disabledDate: (time) => {
  380. // //如果已知开始日期,就把开始日期之前的日期禁用掉
  381. // if (this.form.startTime) {
  382. // return time.getTime() < new Date(this.form.startTime).getTime();
  383. // }
  384. // },
  385. // },
  386. config: config,
  387. curUser: null,
  388. optionMes: [
  389. {
  390. label: "是",
  391. value: 0,
  392. },
  393. {
  394. label: "否",
  395. value: 1,
  396. },
  397. ],
  398. title: "添加物资类型",
  399. categoryType: [],
  400. form: {
  401. name: "", //采购名称
  402. content: "",
  403. useDept: "",
  404. relationId: "", //申请时间
  405. startTime: "", //开始时间
  406. endTime: "", //结束时间
  407. dept: "",
  408. deptStaff: "",
  409. dept: "", //督办部门
  410. totalPrice: "", //督办人员
  411. typeOne: "",
  412. },
  413. files: [], //上传附件
  414. allDept: [], //所有部门
  415. existsFiles: [], //已上传附件
  416. param: {},
  417. dialogFormVisible: false,
  418. departments: [],
  419. meetRooms: [],
  420. tableData: [],
  421. Materials: [],
  422. otherCost: [], //其他费用
  423. option: [],
  424. superviseUsers: [], //督办人员
  425. allSuperviseUsers: [], //所有督办人员
  426. itemKey: 1,
  427. rules: {
  428. name: [{ required: true, message: "填写会议名称" }],
  429. relationId: [{ required: true, message: "请选择会议室" }],
  430. dept: [{ required: true, message: "请选择参会部门" }],
  431. deptStaff: [{ required: true, message: "请选择参会人员" }],
  432. useDept: [{ required: true, message: "请选择申请部门" }],
  433. personLiable: [{ required: true, message: "请选择申请人" }],
  434. startTime: [{ required: true, message: "请选择会议开始时间" }],
  435. endTime: [{ required: true, message: "请选择会议结束时间" }],
  436. },
  437. };
  438. },
  439. async created() {
  440. if (this.config && this.config.hasOwnProperty("metrialCategories"))
  441. this.categoryType = this.config.metrialCategories;
  442. //获取部门
  443. getCompanyAll().then((res) => {
  444. if (res.code == 1) {
  445. this.departments = res.result;
  446. }
  447. });
  448. //获取会议室列表
  449. getconferenceroom().then((res) => {
  450. if (res.code === 1) {
  451. this.meetRooms = res.result.records;
  452. }
  453. });
  454. /**
  455. * 查询所有用户所有部门和所有人
  456. */
  457. getAllUserInfo().then((res) => {
  458. const data = res.result;
  459. for (const i in data) {
  460. data[i].value = data[i].id;
  461. data[i].label = data[i].name;
  462. if (data[i].users) {
  463. data[i].children = data[i].users;
  464. for (const j in data[i].children) {
  465. data[i].children[j].value = data[i].children[j].id;
  466. data[i].children[j].label = data[i].children[j].realName;
  467. }
  468. }
  469. }
  470. this.option = data;
  471. });
  472. //如果当前状态为可编辑状态获取当前申购部门和申购人
  473. if (this.isOpt && JSON.stringify(this.editData) === "{}") {
  474. this.curUser = this.$store.state.user;
  475. this.form.personLiable = this.curUser.realName;
  476. this.form.useDept = parseInt(this.curUser.departmentId);
  477. this.form.registerTime = parseTime(new Date(), "{y}-{m}-{d} {h}:{i}:{s}");
  478. } else {
  479. this.paramMappingToFrom();
  480. }
  481. },
  482. mounted() {},
  483. methods: {
  484. /**
  485. * 映射出表单参数
  486. */
  487. paramMappingToFrom() {
  488. if (!(JSON.stringify(this.editData) === "{}")) {
  489. this.form["name"] = this.editData.name; //采购单名称
  490. this.form["useDept"] = this.editData.registerDept; //申购部门
  491. this.form["personLiable"] = this.editData.registerStaffName; //申购人
  492. this.form["totalPrice"] = this.editData.totalPrice; //申购人
  493. this.form["remark"] = this.editData.remark; //备注
  494. this.form["registerTime"] = parseTime(
  495. new Date(this.editData.registerTime),
  496. "{y}-{m}-{d} {h}:{i}:{s}"
  497. ); //申购时间
  498. this.form["startTime"] = parseTime(
  499. new Date(this.editData.startTime),
  500. "{y}-{m}-{d} {h}:{i}:{s}"
  501. ); //开始时间
  502. this.form["endTime"] = parseTime(
  503. new Date(this.editData.endTime),
  504. "{y}-{m}-{d} {h}:{i}:{s}"
  505. ); //结束时间
  506. if (this.editData.hasOwnProperty("processNodeVos")) {
  507. //找到步骤相关数据
  508. let processNodeVos = this.editData.processNodeVos.filter(
  509. (pn) => pn.processStep == this.step.stepOrder
  510. );
  511. if (processNodeVos.length > 0) {
  512. this.form["typeOne"] = processNodeVos[0].typeOne; //通知
  513. this.form["content"] = processNodeVos[0].documentVo.content; //会议内容
  514. this.form["relationId"] =
  515. processNodeVos[0].relationInfoVo[0].relationId; //会议室地址
  516. let dept = [];
  517. let deptStaff = [];
  518. processNodeVos[0].processStaffVos.forEach((item) => {
  519. dept.push(item.dept);
  520. deptStaff.push(item.deptStaffName);
  521. });
  522. this.form["dept"] = this.unique(dept);
  523. this.form["deptStaff"] = deptStaff;
  524. //附件
  525. if (processNodeVos[0].hasOwnProperty("files")) {
  526. const files = processNodeVos[0].files;
  527. if (files) {
  528. this.existsFiles = [];
  529. files.forEach((file) => {
  530. this.existsFiles.push(file);
  531. });
  532. }
  533. }
  534. }
  535. }
  536. }
  537. },
  538. unique(arr) {
  539. return Array.from(new Set(arr));
  540. },
  541. /**
  542. * 申购时间改变
  543. */
  544. startTimeChange(value) {
  545. this.form.startTime = parseTime(
  546. new Date(value),
  547. "{y}-{m}-{d} {h}:{i}:{s}"
  548. ); //申购时间
  549. },
  550. /**
  551. * 申购时间改变
  552. */
  553. endTimeChange(value) {
  554. this.form.endTime = parseTime(new Date(value), "{y}-{m}-{d} {h}:{i}:{s}"); //申购时间
  555. },
  556. //监督部门改变
  557. superviseDeptChange(value) {
  558. this.superviseUsers = [];
  559. this.allSuperviseUsers = [];
  560. //情况督办人员
  561. this.form.deptStaff = [];
  562. value.forEach((item) => {
  563. const obj = this.option.find((it) => it.id == item);
  564. if (obj && obj.hasOwnProperty("users") && obj.users.length > 0)
  565. this.allSuperviseUsers = this.allSuperviseUsers.concat(obj.users);
  566. });
  567. this.superviseUsers = this.option.filter(
  568. (item) => value.indexOf(item.id) > -1
  569. );
  570. this.form.staffDtos = [];
  571. //设置督办人为空
  572. this.superviseUsers.forEach((item) => {
  573. this.form.staffDtos.push({
  574. dept: item.id,
  575. staffType: 1,
  576. deptStaff: "",
  577. });
  578. });
  579. this.form.totalPrice = this.form.deptStaff.length;
  580. },
  581. //督办人员改变
  582. superviseUserChange(value) {
  583. this.form.staffDtos = [];
  584. value.forEach((item) => {
  585. const obj = this.allSuperviseUsers.find((p) => p.id == item);
  586. if (obj)
  587. this.form.staffDtos.push({
  588. dept: obj.departmentId,
  589. staffType: 1,
  590. deptStaff: obj.id,
  591. });
  592. });
  593. this.form.totalPrice = this.form.deptStaff.length;
  594. },
  595. /**
  596. * 下载文件
  597. * @file 文件信息
  598. */
  599. downloadFile(file) {
  600. if (
  601. file &&
  602. file.hasOwnProperty("filePath") &&
  603. file.hasOwnProperty("fileName")
  604. ) {
  605. const token = this.$store.state.user.token;
  606. const fileName = file.fileName;
  607. getFiles({
  608. access_token: token,
  609. fileName: fileName,
  610. remotePath: file.filePath,
  611. }).then((src) => {
  612. const reader = new FileReader();
  613. reader.readAsDataURL(src);
  614. reader.onload = (e) => {
  615. const a = document.createElement("a");
  616. a.download = fileName;
  617. // 后端设置的文件名称在res.headers的 "content-disposition": "form-data; name=\"attachment\"; filename=\"20181211191944.zip\"",
  618. a.href = e.target.result;
  619. document.body.appendChild(a);
  620. a.click();
  621. document.body.removeChild(a);
  622. };
  623. });
  624. }
  625. },
  626. /**
  627. * 删除文件
  628. * @file 文件信息
  629. */
  630. deleteFile(file) {
  631. this.$confirm(
  632. "此操作将永久删除【" + file.fileName + "】文件, 是否继续?",
  633. "提示",
  634. {
  635. confirmButtonText: "确定",
  636. cancelButtonText: "取消",
  637. type: "warning",
  638. }
  639. )
  640. .then(() => {
  641. this.existsFiles = this.existsFiles.filter(
  642. (item) => item.id != file.id
  643. );
  644. })
  645. .catch(() => {
  646. this.$message({
  647. type: "info",
  648. message: "已取消删除",
  649. });
  650. });
  651. },
  652. /**
  653. * 根据物资类别编号获取物资类别名称
  654. */
  655. getCategoryName(code) {
  656. const obj = this.categoryType.find((item) => item.code == code);
  657. return obj.name;
  658. },
  659. /***
  660. * 删除物料信息
  661. */
  662. delMaterial(row) {
  663. this.tableData = this.tableData.filter((item) => item.id != row.id);
  664. },
  665. /**
  666. * 获取上传的审核信息
  667. */
  668. getExamineInfo() {
  669. return this.$refs["examine"].submitForm();
  670. },
  671. submitData() {
  672. this.dialogFormVisible = false;
  673. this.tableData = this.$refs.transfer.submitData();
  674. },
  675. /**
  676. * 取消按钮事件
  677. */
  678. cancelSubmit() {
  679. this.dialogFormVisible = false;
  680. },
  681. /**
  682. * 提交表单数据
  683. */
  684. submitForm() {
  685. let flag = false;
  686. this.$refs["form"].validate((valid) => {
  687. flag = valid;
  688. if (valid) {
  689. return true;
  690. } else {
  691. return false;
  692. }
  693. });
  694. const files = this.$refs["upload"].submitFiles();
  695. let existsFilesId = "";
  696. this.existsFiles.forEach((item, index) => {
  697. existsFilesId =
  698. existsFilesId +
  699. (index < this.existsFiles - 1 ? item.id + "," : item.id);
  700. });
  701. if (flag) {
  702. const examine = this.$refs["examine"].submitForm();
  703. // this.form.startTime = parseTime(
  704. // new Date(this.form.startTime),
  705. // "{y}-{m}-{d} {h}:{i}:{s}"
  706. // );
  707. // this.form.endTime = parseTime(
  708. // new Date(this.form.endTime),
  709. // "{y}-{m}-{d} {h}:{i}:{s}"
  710. // );
  711. return {
  712. form: this.form,
  713. vehicles: this.tableData,
  714. examine: examine,
  715. existsFilesId: existsFilesId,
  716. files: files,
  717. };
  718. } else return null;
  719. },
  720. },
  721. };
  722. </script>
  723. <style lang="scss" scoped>
  724. .form-container {
  725. width: 100%;
  726. padding: 0 10px;
  727. box-sizing: border-box;
  728. bottom: 0;
  729. .el-pagination {
  730. margin-top: 16px;
  731. }
  732. .addBtn {
  733. height: 30px;
  734. font-size: 22px;
  735. color: #409eff;
  736. font-weight: bold;
  737. text-align: center;
  738. border: 1px solid #ebeef5;
  739. border-top: 0px;
  740. cursor: pointer;
  741. }
  742. .addBtn:hover {
  743. background: #ebeef5;
  744. }
  745. .tf-input-table {
  746. >>> .el-table__body-wrapper {
  747. max-height: 110px;
  748. overflow-y: auto !important;
  749. }
  750. }
  751. .tf-input-border {
  752. >>> input {
  753. border: 0 solid;
  754. }
  755. }
  756. .tf-col {
  757. .file {
  758. border: 1px solid #ebeef5;
  759. height: 40px;
  760. width: calc(100% - 20px);
  761. .file-name {
  762. width: calc(100% - 40px);
  763. float: left;
  764. padding: 0 10px;
  765. height: 40px;
  766. line-height: 40px;
  767. }
  768. .file-name:hover {
  769. background-color: #ebeef5;
  770. cursor: pointer;
  771. }
  772. .btn-file {
  773. width: 40px;
  774. float: left;
  775. height: 40px;
  776. line-height: 40px;
  777. text-align: center;
  778. background-color: #ebeef5;
  779. }
  780. .btn-file:hover {
  781. color: #abbac7;
  782. cursor: pointer;
  783. }
  784. }
  785. }
  786. }
  787. .el-table {
  788. >>> .el-table__body {
  789. tr {
  790. &:nth-child(2n) {
  791. background-color: #f0f9eb;
  792. }
  793. td {
  794. height: 23px;
  795. line-height: 23px;
  796. padding: 2px 1px !important;
  797. .el-button {
  798. padding: 0;
  799. }
  800. }
  801. }
  802. }
  803. }
  804. .el-dialog__wrapper {
  805. >>> .el-form-item {
  806. margin-bottom: 15px !important;
  807. }
  808. .item-title {
  809. width: 100%;
  810. height: 30px;
  811. line-height: 30px;
  812. margin-bottom: 10px;
  813. font-weight: 600;
  814. &::before {
  815. content: "";
  816. display: inline-block;
  817. width: 5px;
  818. height: 18px;
  819. vertical-align: text-bottom;
  820. background-color: #2d74e7;
  821. margin-right: 5px;
  822. }
  823. }
  824. }
  825. .tf-dialog {
  826. >>> .el-dialog__header {
  827. background: #2d74e7;
  828. .el-dialog__title {
  829. color: aliceblue !important;
  830. }
  831. .el-dialog__close {
  832. color: aliceblue !important;
  833. }
  834. }
  835. >>> .el-dialog__body {
  836. padding: 10px;
  837. }
  838. }
  839. >>> .el-form-item__error {
  840. margin-top: -7px;
  841. }
  842. </style>