noticeIssued.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. <template>
  2. <fullscreen :fullscreen.sync="fullscreen" class="container">
  3. <div class="container-box">
  4. <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
  5. <div class="search">
  6. <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
  7. <el-button class="btn-check" size="medium" type="primary" @click="dialogCheck(1)">添加
  8. </el-button>
  9. </div>
  10. <div class="tabbox">
  11. <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
  12. tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
  13. <el-table-column prop="msgTital" label="上报标题" width="120">
  14. </el-table-column>
  15. <el-table-column prop="msgTypeName" label="信息分类">
  16. </el-table-column>
  17. <el-table-column prop="sendNo" label="上报工号">
  18. </el-table-column>
  19. <el-table-column prop="sendName" label="上报姓名">
  20. <template slot-scope="scope">
  21. <span>{{$desensitization(scope.row.sendName,1)}}</span>
  22. </template>
  23. </el-table-column>
  24. <el-table-column prop="sendTime" label="上报时间" width="140">
  25. </el-table-column>
  26. <el-table-column prop="sendDeptName" label="上报部门">
  27. </el-table-column>
  28. <!-- <el-table-column prop="auditNo" label="审核工号">
  29. </el-table-column>
  30. <el-table-column prop="auditName" label="审核姓名">
  31. <template slot-scope="scope">
  32. <span>{{$desensitization(scope.row.auditName,1)}}</span>
  33. </template>
  34. </el-table-column>
  35. <el-table-column prop="auditTime" label="审核时间" width="140">
  36. </el-table-column>
  37. <el-table-column prop="auditResultRemark" label="审核备注">
  38. </el-table-column> -->
  39. <el-table-column prop="stsDesc" label="状态">
  40. </el-table-column>
  41. <!-- <el-table-column prop="sts" label="状态">
  42. </el-table-column> -->
  43. <el-table-column label="操作" width="160px" align="center">
  44. <template slot-scope="scope">
  45. <el-button size="mini" type="primary" @click="dialogCheck(2,scope.row)">查看</el-button>
  46. <el-button v-if="scope.row.sts == 3 || scope.row.sts == 2" size="mini" type="primary"
  47. @click="dialogCheck(3,scope.row)">处理</el-button>
  48. <el-button v-if="scope.row.sts == 1" size="mini" type="primary"
  49. @click="dialogCheckgd(scope.row)">归档</el-button>
  50. <!-- <el-button size="mini" type="danger" @click="delLine(scope.row)">
  51. 删除</el-button> -->
  52. </template>
  53. </el-table-column>
  54. </el-table>
  55. <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
  56. :total="total">
  57. </el-pagination>
  58. </div>
  59. <el-dialog :title="titname + '信息上报'" :visible.sync="dialogStatus" width="50%" :close-on-press-escape="false"
  60. :show-close="true" :before-close="closedia" :destroy-on-close="true" :modal-append-to-body="false"
  61. :close-on-click-modal="false" :fullscreen="true">
  62. <div class="dialog-l">
  63. <el-tabs tab-position="left" v-model="activeName">
  64. <el-tab-pane v-for="item in routerList" :key="item.label" :name="item.label" :label="item.name">
  65. </el-tab-pane>
  66. </el-tabs>
  67. </div>
  68. <div v-loading="loadinged" class="dialog-r">
  69. <el-form :model="infolist" ref="infolist" :rules="rules"
  70. style="max-height: calc(100vh - 180px);overflow-y: scroll;">
  71. <div class="info-line">
  72. <el-form-item prop="msgTital">
  73. <span>上报标题</span>
  74. <el-input v-model="infolist.msgTital" placeholder="标题" :disabled="disableStatus">
  75. </el-input>
  76. </el-form-item>
  77. <el-form-item prop="msgType">
  78. <span>信息分类</span>
  79. <el-select @change="changemsgType" v-model="infolist.msgType" placeholder="信息分类"
  80. clearable :disabled="disableStatus">
  81. <el-option v-for="item in typelist" :key="item.id" :label="item.msgType"
  82. :value="item.id">
  83. </el-option>
  84. </el-select>
  85. </el-form-item>
  86. </div>
  87. <el-form-item prop="visiblec" class="info-line online" v-if="activeName == 1">
  88. <span>接收人员</span>
  89. <deptTreeOnly class="tree" @treeCheck="treeCheckonly"></deptTreeOnly>
  90. <div class="tree treeUser">
  91. <p>{{treeListonly.leaderAuditName}}</p>
  92. </div>
  93. </el-form-item>
  94. <el-form-item prop="visiblec" class="info-line online" v-if="activeName == 2">
  95. <span>接收人员</span>
  96. <div class="treedept">
  97. <p v-for="item in exaList" :key="item.loginNoStr">
  98. <el-checkbox @change="exachange(item)" v-model="item.sts"
  99. style="margin-right: 10px;"></el-checkbox>{{item.loginNameStr}}
  100. </p>
  101. </div>
  102. </el-form-item>
  103. <el-form-item class="info-line online" prop="msgInfo">
  104. <span>上报内容</span>
  105. <el-input v-model="infolist.msgInfo" placeholder="上报内容" type="textarea" :rows="3"
  106. :disabled="disableStatus"></el-input>
  107. </el-form-item>
  108. <div style="padding-left: 80px" v-if="!disableStatus">
  109. <myUpload @uploadBack="uploadBack" :fileInfo="fileInfo" :fileList="fileInfo.fileList">
  110. </myUpload>
  111. </div>
  112. </el-form>
  113. <div slot="footer" class="dialog-footer myfooter">
  114. <el-button @click="dialogCli(2)" v-if="disableStatus">确 定</el-button>
  115. <el-button type="primary" @click="dialogCli(1)" v-if="!disableStatus">确 定</el-button>
  116. <el-button @click="dialogCli(2)">取 消</el-button>
  117. </div>
  118. </div>
  119. </el-dialog>
  120. <el-dialog title="信息上报查看" :visible.sync="dialogInfo" width="70%" :close-on-press-escape="false"
  121. :show-close="true" :before-close="closedia" :destroy-on-close="true" :modal-append-to-body="false"
  122. :close-on-click-modal="false" :fullscreen="true">
  123. <div style="height: calc(100vh - 180px);overflow-y: scroll;">
  124. <orderCheck :infolist="infolist" :mini="1"></orderCheck>
  125. <div style="padding: 0 30px 0 20px;" v-if="this.attList.length>0">
  126. <uploadDown :datalist="datalist" :dialogStatus="uploadstatus"></uploadDown>
  127. </div>
  128. </div>
  129. <div class="dialog-footer myfooter">
  130. <el-button @click="dialoginfoCli(2)" type="primary" v-if="infolist.stsDesc == '打回'">处 理</el-button>
  131. <el-button @click="dialoginfoCli(3)">取 消</el-button>
  132. </div>
  133. </el-dialog>
  134. <myMessage :messTit='messTit' @closeMessage="closeMessage" :centerDialogVisible="centerDialogVisible"
  135. v-if="centerDialogVisible"></myMessage>
  136. </div>
  137. </fullscreen>
  138. </template>
  139. <script>
  140. import myUpload from '../../../components/upload'
  141. import uploadDown from '../../../components/uploadDown'
  142. import mySearch from '../../../components/search'
  143. import toolList from '../../../components/toolList.vue'
  144. import myMessage from "../../../components/myMessage.vue"
  145. import deptTreeOnly from "../../../components/deptTreeOnly.vue"
  146. import orderCheck from "../workOrderManage/orderCheck.vue"
  147. export default {
  148. components: {
  149. myUpload,
  150. uploadDown,
  151. mySearch,
  152. toolList,
  153. myMessage,
  154. deptTreeOnly,
  155. orderCheck
  156. },
  157. data() {
  158. const msgTital = (rule, value, callback) => {
  159. if (!this.infolist.msgTital) {
  160. callback(new Error('不能为空'))
  161. } else {
  162. callback()
  163. }
  164. }
  165. const msgType = (rule, value, callback) => {
  166. if (!this.infolist.msgType) {
  167. callback(new Error('不能为空'))
  168. } else {
  169. callback()
  170. }
  171. }
  172. const msgInfo = (rule, value, callback) => {
  173. if (!this.infolist.msgInfo) {
  174. callback(new Error('不能为空'))
  175. } else {
  176. callback()
  177. }
  178. }
  179. return {
  180. rules: {
  181. msgTital: [{
  182. required: true,
  183. trigger: 'blur',
  184. validator: msgTital
  185. }],
  186. msgType: [{
  187. required: true,
  188. trigger: 'change',
  189. validator: msgType
  190. }],
  191. msgInfo: [{
  192. required: true,
  193. trigger: 'blur',
  194. validator: msgInfo
  195. }]
  196. },
  197. tooltit: "信息上报管理",
  198. fullscreen: false,
  199. total: 0,
  200. pageSize: 1,
  201. tableData: [{}],
  202. dialogStatus: false,
  203. infolist: {},
  204. typeOptions: [],
  205. typelist: [],
  206. titname: '',
  207. disableStatus: false,
  208. fileList: [],
  209. visiblec: [],
  210. visibleList: [],
  211. attList: [],
  212. fileInfo: {
  213. limit: 10,
  214. url: '/market/cwo/upload',
  215. fileList: []
  216. },
  217. datalist: {
  218. url: '/sysmgr/noticeatt/downfile',
  219. type: 1
  220. },
  221. uploadstatus: false,
  222. userInfo: {},
  223. searchList: [{
  224. type: 'sel',
  225. tit: '信息分类',
  226. value: '',
  227. width: '48%',
  228. options: []
  229. },
  230. {
  231. type: 'input',
  232. tit: '请输入标题',
  233. value: '',
  234. width: '48%'
  235. },
  236. ],
  237. params: {},
  238. btnctrlStatus: true,
  239. centerDialogVisible: false,
  240. messTit: '',
  241. delid: '',
  242. loading: false,
  243. loadinged: false,
  244. activeName: '1',
  245. routerList: [{
  246. name: '上报',
  247. label: '1'
  248. }, {
  249. name: '审批',
  250. label: '2'
  251. }],
  252. treeListonly: [],
  253. dialogInfo: false,
  254. exaList: [],
  255. exaListt: [],
  256. }
  257. },
  258. methods: {
  259. treeCheckonly(v) {
  260. this.treeListonly = v;
  261. },
  262. closedia() {
  263. this.datalist.attList = [];
  264. this.uploadstatus = false;
  265. this.fileInfo.fileList = [];
  266. this.infolist = {};
  267. this.dialogStatus = false;
  268. },
  269. //搜索数据
  270. searchInfo(v) {
  271. this.params = {};
  272. v[0] ? this.params.msgType = v[0] : '';
  273. v[1] ? this.params.msgTital = v[1] : '';
  274. // v[2] ? this.params.opTimeTo = v[2] : '';
  275. this.getList(this.params, this.pageSize);
  276. },
  277. //获取列表
  278. getList(v, n) {
  279. this.pageSize = n;
  280. let _this = this;
  281. this.loading = true;
  282. this.tableData = [];
  283. this.$http({
  284. url: "/market/cqamsg/queryUpInfo",
  285. method: "post",
  286. headers: {
  287. "Content-Type": "application/json",
  288. "page": '{"pageNo":"' + n + '","pageSize":"10"}'
  289. },
  290. data: v,
  291. }).then((res) => {
  292. this.tableData = res.data.data;
  293. this.total = res.data.totalRecord;
  294. this.loading = false;
  295. });
  296. },
  297. // 分页
  298. currchange(v) {
  299. this.pageSize = v;
  300. this.getList(this.params, this.pageSize);
  301. },
  302. //查看 修改 新增
  303. dialogCheck(v, n) {
  304. this.infolist = {};
  305. if (v === 1) {
  306. this.titname = '新建';
  307. this.dialogStatus = true;
  308. this.disableStatus = false;
  309. this.getUser();
  310. return
  311. } else if (v === 2) {
  312. this.titname = '查看';
  313. this.dialogInfo = true;
  314. } else if (v === 3) {
  315. this.titname = '修改';
  316. this.dialogStatus = true;
  317. this.disableStatus = false;
  318. this.loadinged = true;
  319. }
  320. this.$http({
  321. url: "/market/cqamsg/queryInfo",
  322. method: "post",
  323. headers: {
  324. "Content-Type": "application/json",
  325. },
  326. data: {
  327. id: n.id
  328. },
  329. }).then((res) => {
  330. res.data.sendName = this.$desensitization(res.data.sendName, 1);
  331. res.data.auditName = this.$desensitization(res.data.auditName, 1);
  332. this.infolist = res.data;
  333. this.datalist.attList = res.data.attList;
  334. this.uploadstatus = true;
  335. this.infolist.attList = res.data.attList;
  336. this.fileInfo.fileList = [];
  337. this.attList = [];
  338. res.data.attList.forEach(item => {
  339. this.fileInfo.fileList.push({
  340. name: item.fileName,
  341. url: '',
  342. id: item.id,
  343. fileName: item.fileName,
  344. fileCode: item.fileCode,
  345. });
  346. this.attList.push({
  347. name: item.fileName,
  348. url: '',
  349. id: item.id,
  350. fileName: item.fileName,
  351. fileCode: item.fileCode,
  352. });
  353. })
  354. this.loadinged = false;
  355. });
  356. },
  357. dialogCli(v) {
  358. this.datalist.attList = [];
  359. this.uploadstatus = false;
  360. if (v === 2) {
  361. this.fileInfo.fileList = [];
  362. this.infolist = {};
  363. this.dialogStatus = false;
  364. return
  365. }
  366. this.infolist.sendTime = this.$formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss');
  367. this.infolist.sendNo = this.userInfo.loginNo;
  368. this.infolist.sendName = this.userInfo.loginName;
  369. this.infolist.stepSts = this.activeName;
  370. if (this.titname === '新建') {
  371. this.submitInfo("/market/cqamsg/add", v);
  372. } else if (this.titname === '修改') {
  373. this.submitInfo("/market/cqamsg/update", v);
  374. }
  375. },
  376. submitInfo(u, v) {
  377. let _this = this;
  378. this.$refs.infolist.validate(valid => {
  379. if (valid) {
  380. if (this.activeName == '1') {
  381. this.infolist.sts = "1";
  382. this.infolist.stsDesc = "已上报";
  383. this.infolist.receiveName = this.treeListonly.leaderAuditName;
  384. this.infolist.receiveNo = this.treeListonly.leaderAuditNo;
  385. if (!this.treeListonly.leaderAuditName) {
  386. this.$message({
  387. message: '请选择接单人!',
  388. type: 'error'
  389. });
  390. return
  391. }
  392. } else if (this.activeName == '2') {
  393. this.infolist.sts = "0";
  394. this.infolist.stsDesc = "待审核";
  395. this.infolist.auditName = this.treeListonly.leaderAuditName;
  396. this.infolist.auditNo = this.treeListonly.leaderAuditNo;
  397. if (!this.treeListonly.leaderAuditName) {
  398. this.$message({
  399. message: '请选择接单人!',
  400. type: 'error'
  401. });
  402. return
  403. }
  404. }
  405. let attList = [];
  406. for (let i = 0; i < this.attList.length; i++) {
  407. attList.push({
  408. id: this.attList[i].id,
  409. fileCode: this.attList[i].fileCode,
  410. fileName: this.attList[i].fileName,
  411. opName: this.attList[i].opName,
  412. opNo: this.attList[i].opNo,
  413. opTime: this.attList[i].opTime,
  414. noticeId: this.infolist.noticeId
  415. });
  416. }
  417. this.infolist.attList = attList;
  418. this.loadinged = true;
  419. this.$http({
  420. url: u,
  421. method: "post",
  422. headers: {
  423. "Content-Type": "application/json",
  424. },
  425. data: this.infolist,
  426. }).then((res) => {
  427. this.loadinged = false;
  428. if (res.data.result === 1) {
  429. _this.$message({
  430. message: res.data.desc,
  431. type: 'error'
  432. });
  433. } else {
  434. _this.$message({
  435. message: '成功',
  436. type: 'success'
  437. });
  438. _this.fileInfo.fileList = [];
  439. _this.infolist = {};
  440. _this.infolist.deptCode = '';
  441. _this.dialogStatus = false;
  442. _this.getList(this.params, this.pageSize);
  443. }
  444. });
  445. }
  446. })
  447. },
  448. dialogCheckgd(v) {
  449. let _this = this;
  450. this.$http({
  451. url: '/market/cqamsg/bakDoc',
  452. method: "post",
  453. headers: {
  454. "Content-Type": "application/json",
  455. },
  456. data: {id:v.id},
  457. }).then((res) => {
  458. if (res.data.result === 1) {
  459. _this.$message({
  460. message: res.data.desc,
  461. type: 'error'
  462. });
  463. } else {
  464. _this.$message({
  465. message: '成功',
  466. type: 'success'
  467. });
  468. _this.getList(this.params, this.pageSize);
  469. }
  470. });
  471. },
  472. closeMessage(v) {
  473. let _this = this;
  474. this.centerDialogVisible = false;
  475. if (v === 1) {
  476. _this.$http({
  477. url: "/market/qamsg/del",
  478. method: "post",
  479. headers: {
  480. "Content-Type": "application/json",
  481. },
  482. data: {
  483. id: this.delid
  484. }
  485. }).then((res) => {
  486. if (res.data.result === 1) {
  487. _this.$message({
  488. message: res.data.desc,
  489. type: 'error'
  490. });
  491. } else {
  492. _this.$message({
  493. message: '删除成功',
  494. type: 'success'
  495. });
  496. _this.getList(this.params, this.pageSize);
  497. }
  498. });
  499. }
  500. },
  501. //删除
  502. delLine(v) {
  503. this.delid = v.id;
  504. this.centerDialogVisible = true;
  505. this.messTit = '即将删除此条数据, 是否删除?';
  506. },
  507. changemsgType() {
  508. for (let i = 0; i < this.typelist.length; i++) {
  509. if (this.infolist.msgType === this.typelist[i].id) {
  510. this.infolist.msgTypeName = this.typelist[i].msgType;
  511. }
  512. }
  513. },
  514. //文件返回值
  515. uploadBack(v) {
  516. this.attList = v;
  517. },
  518. //功能栏
  519. iconCli(v) {
  520. if (v === 1) {
  521. this.getList(this.params, this.pageSize);
  522. }
  523. if (v === 2) {
  524. this.fullscreen = !this.fullscreen
  525. }
  526. },
  527. //获取人员
  528. getDepot() {
  529. this.$http({
  530. url: "/sysmgr/csysuserinfo/queryOwnDeptUserListByLoginNo",
  531. method: "post",
  532. headers: {
  533. "Content-Type": "application/json",
  534. },
  535. data: {},
  536. }).then((res) => {
  537. this.exaList = res.data;
  538. this.exaListt = Object.assign({}, res.data);
  539. });
  540. },
  541. ctrlbtn(v) {
  542. for (let i = 0; i < v.length; i++) {
  543. if (v[i].children.length > 0) {
  544. this.ctrlbtn(v[i].children);
  545. } else {
  546. if (v[i].rountPath === this.$route.path && v[i].systemflag === '1') {
  547. this.btnctrlStatus = false;
  548. return
  549. }
  550. }
  551. }
  552. },
  553. getUser() {
  554. let menus = JSON.parse(window.sessionStorage.menus);
  555. this.ctrlbtn(menus);
  556. this.userInfo = JSON.parse(window.sessionStorage.userInfo);
  557. this.infolist = {};
  558. this.infolist.sendNo = this.userInfo.loginNo;
  559. this.infolist.sendName = this.userInfo.loginName;
  560. },
  561. getType() {
  562. this.$http({
  563. url: "/market/qatype/queryPage",
  564. method: "post",
  565. headers: {
  566. "Content-Type": "application/json",
  567. "page": '{"pageNo":"' + 1 + '","pageSize":"100"}'
  568. },
  569. data: {
  570. sts: 0
  571. },
  572. }).then((res) => {
  573. this.typelist = res.data.data;
  574. let list = [];
  575. res.data.data.forEach(item => {
  576. list.push({
  577. dataCode: item.id,
  578. dataName: item.msgType,
  579. })
  580. })
  581. this.searchList[0].options = list;
  582. });
  583. },
  584. dialoginfoCli(v) {
  585. if (v == 1) {
  586. } else if (v == 2) {
  587. this.dialogInfo = false;
  588. this.dialogStatus = true;
  589. this.titname = '修改';
  590. } else if (v == 3) {
  591. this.dialogInfo = false;
  592. this.infolist = {};
  593. }
  594. },
  595. exachange(v) {
  596. for (let i = 0; i < this.exaList.length; i++) {
  597. this.exaList[i].sts = false;
  598. if (this.exaList[i].id == v.id) {
  599. this.exaList[i].sts = true;
  600. let opt = {
  601. leaderAuditNo: this.exaList[i].loginNoStr,
  602. leaderAuditName: this.exaList[i].loginNameStr,
  603. displayname: this.exaList[i].groupName
  604. }
  605. this.treeListonly = opt;
  606. }
  607. }
  608. this.$forceUpdate();
  609. }
  610. },
  611. mounted() {
  612. this.getList(this.params, this.pageSize);
  613. this.getDepot();
  614. this.getType();
  615. this.getUser();
  616. },
  617. created() {
  618. }
  619. }
  620. </script>
  621. <style scoped lang="scss">
  622. @import "../../../assets/style";
  623. .tab-long {
  624. height: 22px;
  625. float: left;
  626. overflow: hidden;
  627. text-overflow: ellipsis;
  628. display: -webkit-box;
  629. /* 将对象作为弹性伸缩盒子模型显示 */
  630. -webkit-line-clamp: 1;
  631. /* 控制最多显示几行 */
  632. -webkit-box-orient: vertical;
  633. /* 设置或检索伸缩盒对象的子元素的排列方式 */
  634. }
  635. .titbox {
  636. div {
  637. float: right;
  638. i {
  639. font-size: 22px;
  640. margin-left: 20px;
  641. cursor: pointer;
  642. }
  643. }
  644. }
  645. .tabbox {
  646. margin-top: 15px;
  647. }
  648. .pageBox {
  649. text-align: right;
  650. margin-top: 10px;
  651. }
  652. .info-line {
  653. width: 100%;
  654. display: block;
  655. padding-left: 20px;
  656. div {
  657. width: 50%;
  658. display: inline-block;
  659. }
  660. span {
  661. width: 80px;
  662. display: inline-block;
  663. text-align: left;
  664. i {
  665. color: red;
  666. display: inline-block;
  667. padding-right: 5px;
  668. }
  669. }
  670. .el-select,
  671. .el-input {
  672. width: calc(100% - 100px);
  673. }
  674. }
  675. .online {
  676. width: 100%;
  677. .el-select {
  678. width: calc(100% - 100px);
  679. }
  680. span {
  681. vertical-align: top;
  682. }
  683. .el-textarea {
  684. width: calc(100% - 100px);
  685. }
  686. .tree {
  687. width: calc(50% - 60px);
  688. display: inline-block;
  689. margin-right: 20px;
  690. height: 300px;
  691. overflow-y: scroll;
  692. }
  693. .treeUser {
  694. margin: 0;
  695. border: 1px solid #ddd;
  696. p {
  697. background: #f4f4f4;
  698. padding: 0 20px;
  699. margin-bottom: 5px;
  700. }
  701. }
  702. .treeUserb {
  703. width: calc(100% - 100px);
  704. border: 1px solid #ddd;
  705. background: #f4f4f4;
  706. border-radius: 3px;
  707. height: auto;
  708. overflow: hidden;
  709. p {
  710. display: inline-block;
  711. padding: 0 20px;
  712. margin-bottom: 5px;
  713. }
  714. }
  715. .treedept {
  716. width: calc(100% - 100px);
  717. // display: inline-block;
  718. margin-right: 20px;
  719. border: 1px solid #ddd;
  720. border-radius: 3px;
  721. padding: 0 20px;
  722. p {
  723. display: inline-block;
  724. margin-right: 20px;
  725. }
  726. }
  727. }
  728. </style>