projectBook.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864
  1. <template>
  2. <div class="pBookBox">
  3. <!-- 项目申报书 -->
  4. <table border="1" cellspacing="0">
  5. <div class="onePage">
  6. <div class="titSchool">深圳技师学院</div>
  7. <div class="title">二级学院特色创客空间建设项目立项申报书</div>
  8. <div class="dateCss">申请日期:</div>
  9. </div>
  10. <tr>
  11. <td colspan="2" class="bold"><span>*</span>项目名称</td>
  12. <td colspan="2">{{ bookData.title }}</td>
  13. <td colspan="2" class="bold"><span>*</span>所在学院</td>
  14. <td colspan="2">{{ bookData.name }}</td>
  15. </tr>
  16. <tr>
  17. <td rowspan="2" class="bold"><span>*</span>项目状态</td>
  18. <td>
  19. {{
  20. bookData.typeName == "00a3aa2f-f51e-11ed-a3f6-509a4c5b67cf"
  21. ? "√"
  22. : "□"
  23. }}已建设
  24. </td>
  25. <td colspan="6">
  26. 指二级学院已获得政府或学校资助( 例:设计学院、信通学院、珠宝学院
  27. ),已有双创空间(
  28. 创客实践室场地、设备设施并已投入运营,需对空间环境优化、规章制度建设、小型设施设备添置、创客项目物料增补,需拓展创客项目培训、辅导,创客讲座、沙龙、论坛,创客路演、竞赛、集市及成果参评、参展等方面的工作而提出的资助申请。
  29. </td>
  30. </tr>
  31. <tr>
  32. <td>
  33. {{
  34. bookData.typeName == "04692ef6-f51e-11ed-a3f6-509a4c5b67cf"
  35. ? "√"
  36. : "□"
  37. }}
  38. 待建设
  39. </td>
  40. <td colspan="6">
  41. 指二级学院拟立项开展学院特色创客空间建设项目,需进行项目前期调研论证、场馆规划、空间图纸设计设备选型等方面的工作而进行的资助申请。
  42. </td>
  43. </tr>
  44. <tr>
  45. <td colspan="2" class="bold"><span>*</span>项目起始时间</td>
  46. <td colspan="2">{{ bookData.begin_at }}</td>
  47. <td colspan="2" class="bold"><span>*</span>计划完成时间</td>
  48. <td colspan="2">{{ bookData.plannedEnd_at }}</td>
  49. </tr>
  50. <tr>
  51. <td colspan="2" class="bold"><span>*</span>项目负责人</td>
  52. <td colspan="2">{{ bookData.pro_leader }}</td>
  53. <td colspan="2" class="bold"><span>*</span>学院牵头领导</td>
  54. <td colspan="2">{{ bookData.lead_leader }}</td>
  55. </tr>
  56. <tr>
  57. <td
  58. colspan="8"
  59. style="height: 200px; box-sizing: border-box; padding-bottom: 40px"
  60. >
  61. <div class="addMessage">
  62. <p class="bold">部门意见:</p>
  63. <el-button type="primary" @click="openQp">签批</el-button>
  64. </div>
  65. <div class="flexBox">
  66. <div style="padding-top: 10px;">项目简介:</div>
  67. <el-input
  68. type="textarea"
  69. :autosize="{ minRows: 6 }"
  70. v-model="bookData.brief"
  71. disabled
  72. class="disCss"
  73. >
  74. </el-input>
  75. </div>
  76. <div class="flexBox">
  77. <div>总经费:</div>
  78. <div>{{ bookData.fund }} 元</div>
  79. </div>
  80. <p style="position: absolute; right: 30px; bottom: 20px">
  81. {{ $store.state.userInfo.bm }} {{ $store.state.userInfo.username }}
  82. {{ bookData.createAt }}
  83. </p>
  84. </td>
  85. </tr>
  86. <tr>
  87. <td colspan="8">
  88. <p class="bold">部门意见:</p>
  89. <div v-for="(item, index) in qpList" :key="index" class="qpItem">
  90. <div>{{ item.text }}</div>
  91. <div>{{ item.bm }} {{ item.username }} {{ item.time }}</div>
  92. </div>
  93. </td>
  94. </tr>
  95. <tr>
  96. <td style="display: none" v-for="i in 8" :key="i"></td>
  97. </tr>
  98. </table>
  99. <div class="flowPath">
  100. <div class="flowItem" v-if="showType < 3">
  101. <div></div>
  102. <div>评审委员会意见</div>
  103. </div>
  104. <div class="flowItem" v-if="showType < 2">
  105. <div></div>
  106. <div>所在学院部门</div>
  107. </div>
  108. <div class="flowItem" v-if="showType < 1">
  109. <div></div>
  110. <div>所在学院领导审核</div>
  111. </div>
  112. <div class="flowItem" v-if="showType < 0">
  113. <div></div>
  114. <div>创新创业综合审核-初审</div>
  115. </div>
  116. <!-- <div class="flowItem">
  117. <div></div>
  118. <div style="font-weight: unset">
  119. {{ $store.state.userInfo.bm ? $store.state.userInfo.bm + "-" : ""
  120. }}<span style="font-weight: bold"
  121. >{{ $store.state.userInfo.username }}经办人发起</span
  122. >
  123. </div>
  124. </div> -->
  125. <div class="flowItem1" v-for="(qp, qpIndex) in qpList" :key="qpIndex">
  126. <div></div>
  127. <div class="flowNavBox">
  128. <div class="flowTop">
  129. <div class="flowTime">{{ qp.lcTime }}</div>
  130. <div class="flowPeople">{{ qp.bm }}{{ qp.username }}</div>
  131. </div>
  132. <div class="flowBottom">
  133. <div class="flowText" v-if="qp.isAgree == 1">
  134. {{
  135. qp.type == 0
  136. ? "部门领导"
  137. : qp.type == 1
  138. ? "创新创业学院"
  139. : qp.type == 2
  140. ? "学术委员会"
  141. : "科研办"
  142. }}审核,拟同意。
  143. </div>
  144. <div class="flowText" v-else>{{ qp.bm }}审核,不同意。</div>
  145. <div class="flowReason" v-if="qp.isAgree == 2">{{ qp.text }}</div>
  146. </div>
  147. </div>
  148. </div>
  149. <div class="flowItem1">
  150. <div></div>
  151. <div class="flowNavBox">
  152. <div class="flowTop">
  153. <div class="flowTime">{{ bookData.lcCreateAt }}</div>
  154. <div class="flowPeople">
  155. {{ $store.state.userInfo.bm ? $store.state.userInfo.bm + "-" : ""
  156. }}{{ $store.state.userInfo.username }}
  157. </div>
  158. </div>
  159. <div class="flowBottom">
  160. <div class="flowText">经办人发起</div>
  161. </div>
  162. </div>
  163. </div>
  164. </div>
  165. <el-dialog
  166. title="签批意见"
  167. :visible.sync="dialogVisible"
  168. :append-to-body="true"
  169. width="700px"
  170. :before-close="handleClose"
  171. class="dialog_diy"
  172. >
  173. <div class="qpBox">
  174. <div class="topBox">
  175. <div @click="typeBtn(1)" class="topItem">
  176. <div :class="ttype == 1 ? 'isYuan' : 'yuan'"></div>
  177. <div>加入常用语</div>
  178. </div>
  179. <div @click="typeBtn(2)" class="topItem">
  180. <div :class="ttype == 2 ? 'isYuan' : 'yuan'"></div>
  181. <div>保存</div>
  182. </div>
  183. <div @click="typeBtn(3)" class="topItem">
  184. <div :class="ttype == 3 ? 'isYuan' : 'yuan'"></div>
  185. <div>删除</div>
  186. </div>
  187. </div>
  188. <div class="qpPeople">
  189. <div>签批人:</div>
  190. <div>
  191. <el-input
  192. v-model="$store.state.userInfo.username"
  193. disabled
  194. ></el-input>
  195. </div>
  196. </div>
  197. <div class="qpMessage">
  198. <div class="qpLeft">
  199. <textarea
  200. rows="15"
  201. class="qpTextArea"
  202. cols
  203. v-model="qpMessage"
  204. ></textarea>
  205. </div>
  206. <div class="qpRight">
  207. <div class="perPh">
  208. <div>个人常用语</div>
  209. <el-select
  210. v-model="phrases"
  211. placeholder=""
  212. clearable
  213. @change="getQpMessage(phrases)"
  214. >
  215. <el-option
  216. v-for="(item, index) in phList"
  217. :key="index"
  218. :label="item.text"
  219. :value="item.text"
  220. ></el-option>
  221. </el-select>
  222. </div>
  223. <div class="coPh">
  224. <div>公共常用语</div>
  225. <div @click="setQpMessage(1, '审核,拟同意。')" class="phItem">
  226. <div :class="phType == 1 ? 'isYuan' : 'yuan'"></div>
  227. <div>审核,拟同意。</div>
  228. </div>
  229. <div @click="setQpMessage(2, '审核,不同意。')" class="phItem">
  230. <div :class="phType == 2 ? 'isYuan' : 'yuan'"></div>
  231. <div>审核,不同意。</div>
  232. </div>
  233. </div>
  234. </div>
  235. </div>
  236. </div>
  237. </el-dialog>
  238. </div>
  239. </template>
  240. <script>
  241. export default {
  242. data() {
  243. return {
  244. ttt: "",
  245. bookData: {},
  246. dialogVisible: false,
  247. ttype: 0,
  248. phType: 0,
  249. qpMessage: "",
  250. phrases: "",
  251. phList: [],
  252. qpList: [],
  253. showType: -1,
  254. };
  255. },
  256. methods: {
  257. getData() {
  258. this.ajax
  259. .get(this.$store.state.api + "/getProjectBookData", {
  260. uid: this.$store.state.userInfo.userid,
  261. pid: this.$route.query["pid"],
  262. })
  263. .then((res) => {
  264. let data = res.data[0][0];
  265. this.bookData = data;
  266. console.log(data);
  267. })
  268. .catch((err) => {
  269. console.log(err);
  270. });
  271. },
  272. getPh() {
  273. let param = {
  274. uid: this.$store.state.userInfo.userid,
  275. };
  276. // return console.log(param);
  277. // console.log(param)
  278. this.ajax.get(this.$store.state.api + "/selectPhrases", param).then(
  279. (res) => {
  280. let data = res.data;
  281. if (data[0].length > 8) {
  282. this.phList = data[0].slice(0, 8);
  283. } else {
  284. this.phList = data[0];
  285. }
  286. },
  287. (err) => {
  288. console.log(err);
  289. }
  290. );
  291. },
  292. addPh() {
  293. if (this.qpMessage == "") {
  294. this.$message.error("请添加签批意见!");
  295. return;
  296. }
  297. let param = {
  298. uid: this.$store.state.userInfo.userid,
  299. t: this.qpMessage,
  300. };
  301. // return console.log(param);
  302. // console.log(param)
  303. this.ajax.get(this.$store.state.api + "/insertPhrases", param).then(
  304. (res) => {
  305. this.$message.success("加入成功");
  306. this.getPh();
  307. },
  308. (err) => {
  309. console.log(err);
  310. }
  311. );
  312. },
  313. handleClose(done) {
  314. done();
  315. this.clear();
  316. },
  317. clear() {
  318. this.ttype = 0;
  319. this.qpMessage = "";
  320. this.phrases = "";
  321. this.phType = 0;
  322. },
  323. typeBtn(t) {
  324. this.ttype = t;
  325. if (t == 1) {
  326. this.addPh();
  327. } else if (t == 2) {
  328. if (this.phType == 0) {
  329. this.$message.error("请选择公共常用语是否同意!");
  330. return;
  331. } else {
  332. this.addSign();
  333. }
  334. } else if (t == 3) {
  335. this.qpMessage = "";
  336. }
  337. },
  338. setQpMessage(t, n) {
  339. this.phType = t;
  340. this.qpMessage = n;
  341. },
  342. getQpMessage(n) {
  343. this.qpMessage = n;
  344. },
  345. openQp() {
  346. this.dialogVisible = true;
  347. this.ttype = 0;
  348. this.qpMessage = "";
  349. this.phType = 0;
  350. this.phrases = "";
  351. },
  352. addSign() {
  353. if (this.qpMessage == "") {
  354. this.$message.error("请添加签批意见!");
  355. return;
  356. }
  357. let param = {
  358. pid: this.$route.query["pid"],
  359. uid: this.$store.state.userInfo.userid,
  360. t: this.qpMessage,
  361. a: this.phType,
  362. type: this.$store.state.userInfo.type,
  363. };
  364. this.ajax.post(this.$store.state.api + "/insertSign", param).then(
  365. (res) => {
  366. // console.log(res);
  367. this.$message.success("签批成功");
  368. this.getSign();
  369. this.sendTask();
  370. this.dialogVisible = false;
  371. },
  372. (err) => {
  373. console.log(err);
  374. }
  375. );
  376. },
  377. getSign() {
  378. let param = {
  379. pid: this.$route.query["pid"],
  380. uid: this.$store.state.userInfo.userid,
  381. };
  382. // return console.log(param);
  383. // console.log(param)
  384. this.ajax.get(this.$store.state.api + "/selectSign", param).then(
  385. (res) => {
  386. this.qpList = res.data[0];
  387. this.showType = Math.max(...res.data[0].map((obj) => obj.type));
  388. },
  389. (err) => {
  390. console.log(err);
  391. }
  392. );
  393. },
  394. getNowTimeByNumber() {
  395. const now = new Date();
  396. const year = now.getFullYear();
  397. const month = String(now.getMonth() + 1).padStart(2, "0");
  398. const day = String(now.getDate()).padStart(2, "0");
  399. return `${year}${month}${day}`;
  400. },
  401. getRamDom2() {
  402. const min = 1;
  403. const max = 99;
  404. const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
  405. return String(randomNumber).padStart(2, "0");
  406. },
  407. getRamDom4() {
  408. const min = 1;
  409. const max = 9999;
  410. const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
  411. return String(randomNumber).padStart(4, "0");
  412. },
  413. getRamDom7() {
  414. const min = 1;
  415. const max = 9999999;
  416. const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
  417. return String(randomNumber).padStart(7, "0");
  418. },
  419. getRamDom10() {
  420. const min = 1;
  421. const max = 9999999999;
  422. const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
  423. return String(randomNumber).padStart(10, "0");
  424. },
  425. getRamDom16() {
  426. const min = 1;
  427. const max = 9999999999999999;
  428. const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
  429. return String(randomNumber).padStart(16, "0");
  430. },
  431. getNowTime() {
  432. const date = new Date();
  433. const year = date.getFullYear();
  434. const month = String(date.getMonth() + 1).padStart(2, "0");
  435. const day = String(date.getDate()).padStart(2, "0");
  436. const hour = String(date.getHours()).padStart(2, "0");
  437. const minute = String(date.getMinutes()).padStart(2, "0");
  438. const second = String(date.getSeconds()).padStart(2, "0");
  439. return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
  440. },
  441. sendTask() {
  442. var tType =
  443. this.$store.state.userInfo.type == 1
  444. ? "老师"
  445. : this.$store.state.userInfo.type == 2
  446. ? "学生"
  447. : this.$store.state.userInfo.type == 3
  448. ? "二级学院领导"
  449. : this.$store.state.userInfo.type == 4
  450. ? "院长"
  451. : this.$store.state.userInfo.type == 5
  452. ? "学术委员会"
  453. : this.$store.state.userInfo.type == 6
  454. ? "科研办"
  455. : "管理员";
  456. var nid =
  457. "SC" +
  458. this.getNowTimeByNumber() +
  459. this.getRamDom4() +
  460. this.getRamDom2();
  461. let param = [
  462. {
  463. taskInfo: JSON.stringify({
  464. inserttasks: [
  465. {
  466. app_id: this.getRamDom16(),
  467. assignments: [
  468. {
  469. assign_dept: this.$store.state.userInfo.bm,
  470. assign_id: this.$store.state.userInfo.userid,
  471. assign_name: this.$store.state.userInfo.username,
  472. },
  473. ],
  474. biz_domain: this.$store.state.userInfo.bm,
  475. biz_key: "bizkey_" + this.getRamDom7(),
  476. created_by_depts: this.$store.state.userInfo.bm,
  477. created_by_ids: this.$store.state.userInfo.userid,
  478. created_by_names: this.$store.state.userInfo.username,
  479. created_on: this.getNowTime(),
  480. form_url: "",
  481. form_url_view: "",
  482. node_id: nid,
  483. node_name: tType + "审核",
  484. priority: 0,
  485. process_delete_flag: 0,
  486. process_id: "SC_leave_" + this.getRamDom10(),
  487. process_instance_form_view: "",
  488. process_instance_id:
  489. "SC" + this.getNowTimeByNumber() + this.getRamDom4(),
  490. process_instance_image_url: "",
  491. process_instance_initiator: this.$store.state.userInfo.username,
  492. process_instance_initiator_dp: this.$store.state.userInfo.bm,
  493. process_instance_initiator_id: "ampadmin",
  494. process_instance_start_date: this.getNowTime(),
  495. process_instance_status: "RUNNING",
  496. process_instance_subject:
  497. "代办公文流程:" + this.$store.state.userInfo.username,
  498. process_name: "代办公文流程:",
  499. process_version: "1.0",
  500. status: "ACTIVE",
  501. subject:
  502. this.$store.state.userInfo.username +
  503. "_发起代办公文流程-" +
  504. this.bookData.title,
  505. task_delete_flag: 0,
  506. task_id: nid,
  507. },
  508. ],
  509. updatetasks: [],
  510. }),
  511. },
  512. ];
  513. this.ajax.post(this.$store.state.api + "/getTest", param).then(
  514. (res) => {
  515. console.log(res);
  516. },
  517. (err) => {
  518. console.log(err);
  519. }
  520. );
  521. },
  522. },
  523. mounted() {
  524. this.getData();
  525. this.getPh();
  526. this.getSign();
  527. },
  528. };
  529. </script>
  530. <style lang="less" scoped>
  531. .pBookBox {
  532. display: flex;
  533. flex-direction: row;
  534. flex-wrap: nowrap;
  535. align-items: center;
  536. table {
  537. position: relative;
  538. color: black;
  539. width: 1350px;
  540. margin: 0 auto;
  541. margin-top: 250px;
  542. margin-bottom: 100px;
  543. font-size: 16px;
  544. font-family: \5b8b\4f53;
  545. .onePage {
  546. height: 300px;
  547. width: 100%;
  548. position: absolute;
  549. text-align: center;
  550. top: -180px;
  551. .titSchool {
  552. font-weight: 600;
  553. font-size: 35px;
  554. margin-bottom: 30px;
  555. font-family: \9ed1\4f53;
  556. letter-spacing: 10px;
  557. }
  558. .title {
  559. // font-weight: 600;
  560. font-size: 32px;
  561. margin-bottom: 30px;
  562. font-family: \9ed1\4f53;
  563. letter-spacing: 5px;
  564. color: #333333;
  565. }
  566. .dateCss {
  567. text-align: right;
  568. font-size: 18px;
  569. width: 90%;
  570. font-weight: 600;
  571. font-family: \9ed1\4f53;
  572. // margin-bottom: 100px;
  573. letter-spacing: 5px;
  574. color: #333333;
  575. }
  576. }
  577. tr {
  578. width: 100%;
  579. }
  580. tr td {
  581. height: 60px;
  582. width: 10%;
  583. text-align: center;
  584. box-sizing: border-box;
  585. padding: 10px;
  586. position: relative;
  587. span {
  588. color: red;
  589. }
  590. p {
  591. text-align: left;
  592. }
  593. :deep(.el-textarea__inner) {
  594. border: none;
  595. resize: none;
  596. font-size: 18px;
  597. }
  598. .addMessage {
  599. display: flex;
  600. flex-direction: row;
  601. flex-wrap: nowrap;
  602. align-items: baseline;
  603. /deep/.el-button {
  604. width: 80px;
  605. height: 30px;
  606. padding: 0;
  607. }
  608. }
  609. .flexBox {
  610. display: flex;
  611. flex-direction: row;
  612. flex-wrap: nowrap;
  613. align-items: flex-start;
  614. > div:nth-child(1) {
  615. min-width: 85px;
  616. font-weight: 600;
  617. }
  618. }
  619. .disCss {
  620. /deep/.el-textarea__inner {
  621. background: #fff;
  622. color: #000;
  623. cursor: auto;
  624. }
  625. }
  626. }
  627. .bold {
  628. font-weight: 600;
  629. }
  630. .qpItem {
  631. min-height: 100px;
  632. box-sizing: border-box;
  633. padding-bottom: 20px;
  634. position: relative;
  635. > div:first-child {
  636. text-align: left;
  637. padding: 5px 15px;
  638. min-height: 172px;
  639. height: 172px;
  640. }
  641. > div:last-child {
  642. position: absolute;
  643. right: 30px;
  644. bottom: 20px;
  645. }
  646. }
  647. }
  648. .flowPath {
  649. position: relative;
  650. height: 100%;
  651. margin-left: 20px;
  652. max-width: 220px;
  653. .flowItem {
  654. display: flex;
  655. flex-direction: row;
  656. flex-wrap: nowrap;
  657. align-items: flex-start;
  658. min-height: 60px;
  659. max-height: 100px;
  660. padding-bottom: 15px;
  661. box-sizing: border-box;
  662. > div:first-child {
  663. min-width: 20px;
  664. width: 20px;
  665. height: 20px;
  666. border-radius: 50%;
  667. background: #fc0;
  668. z-index: 99;
  669. }
  670. > div:last-child {
  671. padding-left: 15px;
  672. font-weight: bold;
  673. }
  674. }
  675. .flowItem1 {
  676. display: flex;
  677. flex-direction: row;
  678. flex-wrap: nowrap;
  679. align-items: flex-start;
  680. min-height: 60px;
  681. padding-bottom: 15px;
  682. box-sizing: border-box;
  683. > div:first-child {
  684. width: 20px;
  685. min-width: 20px;
  686. height: 20px;
  687. background-image: url("../../../assets/img/right.png");
  688. background-size: 100% 100%;
  689. background-repeat: no-repeat;
  690. z-index: 99;
  691. }
  692. .flowNavBox {
  693. font-weight: unset;
  694. padding-left: 15px;
  695. .flowTop {
  696. display: flex;
  697. flex-direction: column;
  698. flex-wrap: nowrap;
  699. align-items: flex-start;
  700. font-size: 14px;
  701. margin-bottom: 10px;
  702. .flowTime {
  703. margin-bottom: 5px;
  704. }
  705. }
  706. .flowBottom {
  707. display: flex;
  708. flex-direction: column;
  709. flex-wrap: nowrap;
  710. align-items: flex-start;
  711. .flowText {
  712. font-weight: bold;
  713. }
  714. }
  715. }
  716. }
  717. }
  718. .flowPath::before {
  719. position: absolute;
  720. content: "";
  721. width: 2px;
  722. height: calc(100% - 105px);
  723. background: #848484;
  724. left: 9px;
  725. top: 10px;
  726. display: block;
  727. z-index: 1;
  728. }
  729. }
  730. .dialog_diy {
  731. /deep/.el-dialog__header {
  732. background: #32455b !important;
  733. padding: 15px 20px;
  734. }
  735. /deep/.el-dialog__title {
  736. color: #fff;
  737. }
  738. /deep/.el-dialog__headerbtn {
  739. top: 19px;
  740. }
  741. /deep/.el-dialog__headerbtn .el-dialog__close {
  742. color: #fff;
  743. }
  744. /deep/.el-dialog__headerbtn .el-dialog__close:hover {
  745. color: #fff;
  746. }
  747. /deep/.el-dialog__body,
  748. .el-dialog__footer {
  749. background: #f2f2f2;
  750. padding: 0;
  751. }
  752. .qpBox {
  753. .topBox {
  754. display: flex;
  755. flex-direction: row;
  756. flex-wrap: nowrap;
  757. align-items: center;
  758. width: 100%;
  759. padding: 15px 20px;
  760. box-sizing: border-box;
  761. border-bottom: 1px solid #999;
  762. .topItem {
  763. display: flex;
  764. flex-direction: row;
  765. flex-wrap: nowrap;
  766. align-items: center;
  767. cursor: pointer;
  768. height: 20px;
  769. margin-right: 15px;
  770. .yuan,
  771. .isYuan {
  772. width: 10px;
  773. height: 10px;
  774. border-radius: 50%;
  775. background: #f2f2f2;
  776. border: 1px solid #000;
  777. margin-right: 5px;
  778. }
  779. .isYuan {
  780. background: #000 !important;
  781. }
  782. }
  783. }
  784. .qpPeople {
  785. display: flex;
  786. flex-direction: row;
  787. flex-wrap: nowrap;
  788. align-items: center;
  789. padding: 15px 20px;
  790. border-bottom: 1px solid #999;
  791. box-sizing: border-box;
  792. > div:nth-child(1) {
  793. margin-right: 10px;
  794. }
  795. /deep/.el-input__inner {
  796. border: 1px solid #000;
  797. width: 150px;
  798. outline: none;
  799. color: #000;
  800. background: #fff;
  801. }
  802. }
  803. .qpMessage {
  804. display: flex;
  805. flex-direction: row;
  806. flex-wrap: nowrap;
  807. align-items: flex-start;
  808. width: 100%;
  809. padding: 15px 20px;
  810. .qpLeft {
  811. /deep/.qpTextArea {
  812. width: 250px;
  813. resize: none;
  814. }
  815. }
  816. .qpRight {
  817. margin-left: 20px;
  818. .perPh {
  819. display: flex;
  820. flex-direction: column;
  821. flex-wrap: nowrap;
  822. align-items: flex-start;
  823. /deep/.el-input__inner {
  824. height: 30px;
  825. margin: 10px 0;
  826. }
  827. }
  828. .coPh {
  829. .phItem {
  830. display: flex;
  831. flex-direction: row;
  832. flex-wrap: nowrap;
  833. align-items: center;
  834. cursor: pointer;
  835. height: 20px;
  836. margin-right: 15px;
  837. .yuan,
  838. .isYuan {
  839. width: 10px;
  840. height: 10px;
  841. border-radius: 50%;
  842. background: #f2f2f2;
  843. border: 1px solid #000;
  844. margin-right: 5px;
  845. }
  846. .isYuan {
  847. background: #000 !important;
  848. }
  849. }
  850. }
  851. }
  852. }
  853. }
  854. }
  855. </style>