details.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. <!-- 商机-详情 -->
  2. <template>
  3. <div class="md-content">
  4. <!-- 头部信息 -->
  5. <el-row type="flex" class="row-bg" justify="space-around">
  6. <el-col :span="4">
  7. <div class="grid-content bg-purple">
  8. <el-button type="info" plain icon="el-icon-back" size="small" @click="handleBack">返回</el-button>
  9. </div>
  10. </el-col>
  11. <el-col :span="16">
  12. <div class="grid-content bg-purple-light">
  13. <el-descriptions :colon="false" size="medium">
  14. <el-descriptions-item>
  15. <dev style="width: 200px; height: 60px; font-size: 18px" v-show="!showCustomer">
  16. {{ form.basic.boName.split('-')[0] + '-' + form.basic.boName.split('-')[1].substring(0, 2) + '******' +
  17. form.basic.boName.split('-')[1].substring(form.basic.boName.split('-')[1].length -
  18. 2, form.basic.boName.split('-')[1].length) + '-' + form.basic.boName.split('-')[2] }}</dev>
  19. <dev style="width: 200px; height: 60px; font-size: 18px" v-show="showCustomer">{{ form.basic.boName }}</dev>
  20. <el-button size="mini" type="text" icon="el-icon-view" @click="customerButton" />
  21. </el-descriptions-item>
  22. <el-descriptions-item label="商机状态:" style="margin-left:27px">
  23. <div v-for="dict in dict.type.mk_bo_state" v-if="form.basic.boState == dict.value">
  24. <div>{{ dict.label }}</div>
  25. </div>
  26. </el-descriptions-item>
  27. <el-descriptions-item label="赢丢单状态:">
  28. <div v-for="dict in dict.type.mk_bo_winstate" v-if="form.basic.winningState == dict.value">
  29. {{ dict.label }}
  30. </div>
  31. </el-descriptions-item>
  32. </el-descriptions>
  33. </div>
  34. </el-col>
  35. <el-col :span="6">
  36. <el-button type="info" plain icon="el-icon-delete-solid" size="small" @click="handleWinningState('1', '关闭')"
  37. v-if="(showClose && this.form.basic.winningState == 0) && this.boAuthority.boAuthority.boClose">关闭</el-button>
  38. <el-button type="info" plain icon="el-icon-close" size="small" @click="handleWinningState('2', '丢单')"
  39. v-if="(showLose && this.form.basic.winningState == 0) && this.boAuthority.boAuthority.boLose">丢单</el-button>
  40. <el-button type="info" plain icon="el-icon-check" size="small" @click="handleWinningState('3', '赢单')"
  41. v-if="(showWin && this.form.basic.winningState == 0) && this.boAuthority.boAuthority.boWin">赢单</el-button>
  42. <el-button type="info" plain icon="el-icon-user" size="small" @click="allocation()"
  43. v-if="this.boAuthority.post == 0 && this.form.basic.winningState == 0">分配</el-button>
  44. </el-col>
  45. </el-row>
  46. <!-- 主多页签 -->
  47. <el-tabs v-model="masterTabs" @tab-click="tabsSwitch">
  48. <!-- 基本信息页签 -->
  49. <el-tab-pane label="基本信息" name="first">
  50. <el-divider content-position="left" style="font-size: 30px">
  51. <dev style="width: 50px; height: 40px; font-size: 18px">项目流程</dev>
  52. </el-divider>
  53. <Process :key="timer" :form="form.basic" :boAuthority="boAuthority" :boStage="boStage" :dict="dict"
  54. @reload="reload" />
  55. <!-- 基本信息 -->
  56. <el-divider content-position="left">
  57. <dev style="width: 50px; height: 40px; font-size: 18px">基本信息</dev>
  58. </el-divider>
  59. <el-descriptions>
  60. <el-descriptions-item label="商机来源">
  61. <div v-for="dict in dict.type.mk_bo_source" v-if="form.basic.boSource == dict.value">
  62. {{ dict.label }}
  63. </div>
  64. </el-descriptions-item>
  65. <el-descriptions-item label="商机类型">
  66. <div v-for="dict in dict.type.mk_bo_type" v-if="form.basic.boType == dict.value">
  67. {{ dict.label }}
  68. </div>
  69. </el-descriptions-item>
  70. <el-descriptions-item label="客户">
  71. <dev v-show="!showCustomer">
  72. {{ form.basic.customerName.substring(0, 2) + '******' +
  73. form.basic.customerName.substring(form.basic.customerName.length - 2, form.basic.customerName.length) }}
  74. </dev>
  75. <dev v-show="showCustomer">
  76. {{ form.basic.customerName }}
  77. </dev>
  78. <el-button size="mini" type="text" icon="el-icon-view" @click="customerButton" />
  79. </el-descriptions-item>
  80. <el-descriptions-item :label="totalRevenue">
  81. <div v-for="dict in dict.type.mk_bo_total_revenue" v-if="form.basic.totalHosRevenue == dict.value">
  82. {{ dict.label }}
  83. </div>
  84. </el-descriptions-item>
  85. <el-descriptions-item :label="estimate">
  86. {{ form.basic.hosDiscreetValue }}
  87. </el-descriptions-item>
  88. <el-descriptions-item label="赢单率">
  89. {{ form.basic.winningRate }}
  90. </el-descriptions-item>
  91. <el-descriptions-item label="商机内容">
  92. {{ form.basic.boContent }}
  93. </el-descriptions-item>
  94. </el-descriptions>
  95. <!-- 其它信息 -->
  96. <el-divider content-position="left">
  97. <dev style="width: 50px; height: 40px; font-size: 18px">其它信息</dev>
  98. </el-divider>
  99. <el-descriptions>
  100. <el-descriptions-item label="销售组织">
  101. {{ form.basic.marketingOrganizingName }}
  102. </el-descriptions-item>
  103. <el-descriptions-item label="销售区域">
  104. {{ form.basic.marketingAreaName }}
  105. </el-descriptions-item>
  106. <el-descriptions-item label="部门">
  107. {{ form.basic.deptName }}
  108. </el-descriptions-item>
  109. <el-descriptions-item label="商机负责人">
  110. {{ form.basic.principalName }}
  111. </el-descriptions-item>
  112. <el-descriptions-item label="创建人">
  113. {{ form.basic.creatorName }}
  114. </el-descriptions-item>
  115. <el-descriptions-item label="创建时间">
  116. {{ form.basic.createTime }}
  117. </el-descriptions-item>
  118. </el-descriptions>
  119. </el-tab-pane>
  120. <!-- 商机任务页签 -->
  121. <el-tab-pane label="商机任务" name="second">
  122. <TaskList :source="'BoDetails'" :bo="this.form.basic" :boAuthority="this.boAuthority"
  123. v-if="masterTabs == 'second'" />
  124. </el-tab-pane>
  125. <!-- 联系人页签 -->
  126. <el-tab-pane label="商机联系人" name="third">
  127. <ContactList :source="'BoDetails'" :bo="this.form.basic" :boAuthority="this.boAuthority"
  128. v-if="masterTabs == 'third'" />
  129. </el-tab-pane>
  130. <!-- 附件页签 -->
  131. <el-tab-pane label="附件信息" name="fourth">
  132. <AccessoryList :source="'BoDetails'" :bo="this.form.basic" :boAuthority="this.boAuthority"
  133. v-if="masterTabs == 'fourth'" />
  134. </el-tab-pane>
  135. <!-- 模板文件页签 -->
  136. <el-tab-pane label="模板文件下载" name="five">
  137. <FileTemplate :botype="form.basic.boType" v-if="masterTabs == 'five'" />
  138. </el-tab-pane>
  139. </el-tabs>
  140. <!-- 赢单状态弹窗 -->
  141. <el-dialog :title="winningStateTitle" :visible.sync="winningStateOpen" width="500px" append-to-body>
  142. <el-form ref="wsform" :model="winningStateData" :rules="winningStateDataRules" label-width="140px">
  143. <!-- 赢单 -->
  144. <el-form-item label="赢单日期" prop="winningStateDate" v-if="this.winningStateData.winningState == '3'">
  145. <el-date-picker clearable v-model="winningStateData.winningStateDate" type="date" value-format="yyyy-MM-dd"
  146. placeholder="请选择赢单日期" style="width:220px">
  147. </el-date-picker>
  148. </el-form-item>
  149. <el-form-item label="赢单金额(万元)" prop="winningStateMoney" v-if="this.winningStateData.winningState == '3'">
  150. <el-input type="number" v-model="winningStateData.winningStateMoney" style="width:220px" placeholder="赢单金额" />
  151. </el-form-item>
  152. <el-form-item label="赢单原因" prop="winningStateCause" v-if="this.winningStateData.winningState == '3'">
  153. <el-select v-model="winningStateData.winningStateCause" placeholder="请输入">
  154. <el-option v-for="dict in dict.type.mk_bo_wincause" :key="dict.value" :label="dict.label"
  155. :value="dict.label"></el-option>
  156. </el-select>
  157. </el-form-item>
  158. <el-form-item label="赢单备注" prop="winningStateRemark" v-if="this.winningStateData.winningState == '3'">
  159. <el-input v-model="winningStateData.winningStateRemark" style="width:220px" placeholder="请输入赢单备注" />
  160. </el-form-item>
  161. <!-- 丢单 -->
  162. <el-form-item label="丢单日期" prop="winningStateDate" v-if="this.winningStateData.winningState == '2'">
  163. <el-date-picker clearable v-model="winningStateData.winningStateDate" type="date" value-format="yyyy-MM-dd"
  164. placeholder="丢单日期" style="width:220px">
  165. </el-date-picker>
  166. </el-form-item>
  167. <el-form-item label="丢单金额(万元)" prop="winningStateMoney" v-if="this.winningStateData.winningState == '2'">
  168. <el-input type="number" v-model="winningStateData.winningStateMoney" style="width:220px" placeholder="丢单金额" />
  169. </el-form-item>
  170. <el-form-item label="丢单原因" prop="winningStateCause" v-if="this.winningStateData.winningState == '2'">
  171. <el-select v-model="winningStateData.winningStateCause" placeholder="请输入">
  172. <el-option v-for="dict in dict.type.mk_bo_losecause" :key="dict.value" :label="dict.label"
  173. :value="dict.label"></el-option>
  174. </el-select>
  175. </el-form-item>
  176. <el-form-item label="丢单备注" prop="winningStateRemark" v-if="this.winningStateData.winningState == '2'">
  177. <el-input v-model="winningStateData.winningStateRemark" style="width:220px" placeholder="请输入丢单备注" />
  178. </el-form-item>
  179. <!-- 关闭 -->
  180. <el-form-item label="关闭原因" prop="winningStateCause" v-if="this.winningStateData.winningState == '1'">
  181. <el-input v-model="winningStateData.winningStateCause" style="width:220px" placeholder="关闭原因" />
  182. </el-form-item>
  183. <el-form-item label="关闭备注" prop="winningStateRemark" v-if="this.winningStateData.winningState == '1'">
  184. <el-input v-model="winningStateData.winningStateRemark" style="width:220px" placeholder="关闭备注" />
  185. </el-form-item>
  186. </el-form>
  187. <div slot="footer">
  188. <el-button type="primary" @click="submitWinningStateData">确 定</el-button>
  189. <el-button @click="cancelWinningStateData">取 消</el-button>
  190. </div>
  191. </el-dialog>
  192. <!-- 分配商机负责人对话框 -->
  193. <el-dialog title="分配商机负责人" :visible.sync="allocationPopover" width="500px" append-to-body>
  194. <el-form ref="afform" :model="allocationForm" :rules="allocationFormRules" label-width="140px">
  195. <el-form-item label="新负责人" prop="allocationStaff">
  196. <dr-popover-select v-model="allocationForm.allocationStaffName" title="员工" type="CONTACTS_PARAM" :dataMapping="{
  197. allocationStaff: 'code',
  198. allocationStaffName: 'name',
  199. }" :source.sync="allocationForm"></dr-popover-select>
  200. </el-form-item>
  201. <el-form-item label="是否将您作为参与人" prop="isParticipant">
  202. <el-radio v-model="allocationForm.isParticipant" :label='true'>是</el-radio>
  203. <el-radio v-model="allocationForm.isParticipant" :label='false'>否</el-radio>
  204. </el-form-item>
  205. </el-form>
  206. <div slot="footer">
  207. <el-button type="primary" @click="submitAllocationForm">确 定</el-button>
  208. <el-button @click="cancelAllocation">取 消</el-button>
  209. </div>
  210. </el-dialog>
  211. </div>
  212. </template>
  213. <script>
  214. import {
  215. getBasic,
  216. updateWinningState,
  217. allocationParticipant,
  218. } from "@/api/business/spd/bo/basic";
  219. import { getBoNodeListByType } from "@/api/business/spd/bo/boNode";
  220. import { getPsnPost } from "@/api/business/spd/bo/authority";
  221. import TaskList from "../task/taskList.vue";
  222. import ContactList from "../contact/contactList.vue";
  223. import AccessoryList from "../basic/accessoryList.vue";
  224. import FileTemplate from "../filetemplate/botabs.vue";
  225. import Process from '../basic/process.vue';
  226. export default {
  227. //名称
  228. name: "BoDetails",
  229. //注册引入的组件
  230. components: { TaskList, ContactList, AccessoryList, FileTemplate, Process,},
  231. //平台枚举
  232. dicts: [
  233. "mk_bo_type",
  234. "mk_bo_state",
  235. "mk_bo_winstate",
  236. "mk_bo_source",
  237. "mk_bo_total_revenue",
  238. "mk_bo_wincause",
  239. "mk_bo_losecause",
  240. "mk_bo_stage",
  241. ],
  242. //数据
  243. data() {
  244. return {
  245. //赢单状态数据
  246. // 弹出层标题
  247. winningStateTitle: "",
  248. // 是否显示弹出层
  249. winningStateOpen: false,
  250. //赢单状态
  251. winningState: null,
  252. //赢单状态数据
  253. winningStateData: {},
  254. //赢单状态表单校验
  255. // 赢单表单校验
  256. winningStateDataRules: {
  257. winningStateCause: [
  258. { required: true, message: "原因不能为空", trigger: "blur" }
  259. ],
  260. winningStateDate: [
  261. { required: true, message: "日期不能为空", trigger: "blur" }
  262. ],
  263. winningStateMoney: [
  264. { required: true, message: "金额不能为空", trigger: "blur" }
  265. ],
  266. },
  267. masterTabs: "first",
  268. loading: false,
  269. // 基本信息
  270. form: {
  271. basic: {},
  272. accessory: [],
  273. },
  274. //权限数据
  275. boAuthority: {},
  276. //流程节点数据
  277. boStage: [],
  278. //关单按钮是否显示
  279. showClose: false,
  280. //赢单按钮是否显示
  281. showWin: false,
  282. //丢单按钮是否显示
  283. showLose: false,
  284. //重新加载子组件参数
  285. timer: "",
  286. //是否显示客户
  287. showCustomer: false,
  288. //分配参数
  289. allocationForm: {
  290. boId: null,
  291. allocationStaff: null,
  292. allocationStaffName: null,
  293. isParticipant: true,
  294. },
  295. //分配表单校验
  296. allocationFormRules: {
  297. allocationStaff: [
  298. { required: true, message: "新负责人不能为空", trigger: "blur" }
  299. ],
  300. },
  301. //分配弹窗
  302. allocationPopover: false,
  303. //营收总额
  304. totalRevenue: "***营收总额",
  305. //预估额
  306. estimate: "***预估额(万元)",
  307. };
  308. },
  309. watch: {
  310. 'form.basic.boType': {
  311. handler(newVal, oldVal) {
  312. console.log('newVal', newVal);
  313. switch (newVal) {
  314. case '0':
  315. this.totalRevenue = "医院营收总额";
  316. this.estimate = "医院耗材预估值(万元)"
  317. break;
  318. case '1':
  319. this.totalRevenue = "医院营收总额";
  320. this.estimate = "医院耗材采集预估额(万元)"
  321. break;
  322. case '2':
  323. this.totalRevenue = "医院营收总额";
  324. this.estimate = "医院耗材预估值(万元)"
  325. break;
  326. case '3':
  327. this.totalRevenue = "医院营收总额";
  328. this.estimate = "医院设备预估额(万元)"
  329. break;
  330. case '4':
  331. this.totalRevenue = "医院营收总额";
  332. this.estimate = "军队医院设备预估额(万元)"
  333. break;
  334. case '5':
  335. this.totalRevenue = "项目总额";
  336. this.estimate = "工程预估额(万元)"
  337. break;
  338. default:
  339. break;
  340. }
  341. },
  342. immediate: true,
  343. deep: true // 可以深度检测到 person 对象的属性值的变化
  344. }
  345. },
  346. //方法
  347. methods: {
  348. // 返回
  349. handleBack() {
  350. this.$router.push("/business/spd/bo/basic");
  351. },
  352. //主多页签切换
  353. tabsSwitch(e) {
  354. switch (e.name) {
  355. case "second":
  356. //任务
  357. break;
  358. case "third":
  359. //联系人
  360. break;
  361. case "fourth":
  362. //附件
  363. break;
  364. case "five":
  365. //文件模板
  366. break;
  367. default:
  368. break;
  369. }
  370. },
  371. //赢单状态按钮
  372. handleWinningState(winningState, title) {
  373. this.resetWinningStateData();
  374. this.winningStateOpen = true;
  375. this.winningStateTitle = title;
  376. this.winningStateData.winningState = winningState;
  377. this.winningStateData.boId = this.form.basic.id;
  378. this.winningStateData.winningStateDate = new Date();
  379. },
  380. resetWinningStateData() {
  381. this.winningStateData = {
  382. boId: null,
  383. winningState: null,
  384. winningStateCause: null,
  385. winningStateRemark: null,
  386. winningStateDate: null,
  387. winningStateMoney: null,
  388. }
  389. },
  390. submitWinningStateData() {
  391. this.$refs["wsform"].validate(valid => {
  392. if (valid) {
  393. updateWinningState(this.winningStateData).then(response => {
  394. this.$modal.msgSuccess("提交成功");
  395. this.winningStateOpen = false;
  396. this.reload();
  397. });
  398. }
  399. });
  400. },
  401. cancelWinningStateData() {
  402. this.winningStateOpen = false;
  403. this.resetWinningStateData();
  404. },
  405. //打开分配弹窗
  406. allocation() {
  407. this.allocationPopover = true;
  408. },
  409. //提交分配表单
  410. submitAllocationForm() {
  411. // this.allocationForm.boId = parseInt(this.form.basic.id);
  412. // this.allocationForm.allocationStaff = parseInt(this.allocationForm.allocationStaff);
  413. this.allocationForm.boId = this.form.basic.id;
  414. this.$refs["afform"].validate(valid => {
  415. if (valid) {
  416. allocationParticipant(this.allocationForm).then(response => {
  417. console.log('response', response);
  418. this.$modal.msgSuccess("分配成功");
  419. this.allocationPopover = false;
  420. this.reload();
  421. });
  422. }
  423. });
  424. },
  425. //取消分配
  426. cancelAllocation() {
  427. this.allocationPopover = false;
  428. },
  429. //重新加载数据
  430. reload() {
  431. //加载基础数据
  432. getBasic(this.$route.params.id).then((response) => {
  433. this.form.basic = response.data;
  434. //加载权限数据
  435. getPsnPost(this.form.basic.id).then((response) => {
  436. this.boAuthority = response.data;
  437. });
  438. //加载流程节点数据
  439. getBoNodeListByType(this.form.basic.boType).then(response => {
  440. this.boStage = response.rows;
  441. //赢丢单按钮显示逻辑
  442. var auditNode = 999;
  443. var curNode = 0;
  444. var signContract = 999;
  445. for (var i = 0; i < this.boStage.length; i++) {
  446. if (this.boStage[i].code == this.form.basic.boStage) {
  447. curNode = i;
  448. }
  449. if (this.boStage[i].name.toString().includes('审核')) {
  450. auditNode = i;
  451. }
  452. if (this.boStage[i].name.toString().includes('合同')) {
  453. signContract = i;
  454. }
  455. }
  456. this.showClose = false;
  457. this.showLose = false;
  458. this.showWin = false;
  459. if (curNode < auditNode) {
  460. this.showClose = true;
  461. }
  462. if (curNode > auditNode) {
  463. this.showLose = true;
  464. }
  465. if (curNode >= signContract) {
  466. this.showWin = true;
  467. }
  468. //确定数据加载完成,子组件可以开始展示
  469. this.timer = new Date().getTime();
  470. });
  471. });
  472. },
  473. //是否显示客户
  474. customerButton() {
  475. this.showCustomer = !this.showCustomer;
  476. },
  477. },
  478. //创建钩子
  479. created() {
  480. //加载基础数据
  481. getBasic(this.$route.params.id).then((response) => {
  482. this.form.basic = response.data;
  483. //加载权限数据
  484. getPsnPost(this.form.basic.id).then((response) => {
  485. this.boAuthority = response.data;
  486. });
  487. //加载流程节点数据
  488. getBoNodeListByType(this.form.basic.boType).then(response => {
  489. this.boStage = response.rows;
  490. console.log('this.boStage', this.boStage);
  491. //赢丢单按钮显示逻辑
  492. var auditNode = 999;
  493. var curNode = 0;
  494. var signContract = 999;
  495. for (var i = 0; i < this.boStage.length; i++) {
  496. if (this.boStage[i].code == this.form.basic.boStage) {
  497. curNode = i;
  498. }
  499. if (this.boStage[i].name.toString().includes('审核')) {
  500. auditNode = i;
  501. }
  502. if (this.boStage[i].name.toString().includes('合同')) {
  503. signContract = i;
  504. }
  505. }
  506. this.showClose = false;
  507. this.showLose = false;
  508. this.showWin = false;
  509. if (curNode < auditNode) {
  510. this.showClose = true;
  511. }
  512. if (curNode > auditNode) {
  513. this.showLose = true;
  514. }
  515. if (curNode >= signContract) {
  516. this.showWin = true;
  517. }
  518. //确定数据加载完成,子组件可以开始展示
  519. this.timer = new Date().getTime();
  520. });
  521. });
  522. },
  523. };
  524. </script>
  525. <style scoped>
  526. .md-content>>>.el-form-item {
  527. margin-bottom: 10px;
  528. }
  529. .md-content>>>.el-tabs--border-card>.el-tabs__content {
  530. padding-bottom: 8px;
  531. }
  532. .md-content .md-auditInfo>>>.el-form-item {
  533. margin-bottom: 0px;
  534. }
  535. .md-main>>>.el-form-item,
  536. .md-vice>>>.el-form-item {
  537. width: 100%;
  538. box-sizing: border-box;
  539. }
  540. .md-main>>>.el-form-item__label,
  541. .md-vice>>>.el-form-item__label {
  542. width: 40%;
  543. }
  544. .md-main>>>.el-form-item__content,
  545. .md-md-vice>>>.el-form-item__content {
  546. width: 60%;
  547. }
  548. .md-content>>>.el-form-item__label {
  549. font-weight: normal;
  550. /* text-align: left;
  551. width: 28%; */
  552. white-space: nowrap;
  553. /* IE6 需要定义宽度 */
  554. overflow: hidden;
  555. -o-text-overflow: ellipsis;
  556. /* Opera */
  557. text-overflow: ellipsis;
  558. /* IE, Safari (WebKit) */
  559. /* -moz-binding: url('ellipsis.xml#ellipsis'); */
  560. /* Firefox */
  561. }
  562. .md-main>>>.material-table {
  563. height: 100%;
  564. }
  565. .md-vice>>>.material-table {
  566. height: 140px;
  567. overflow-y: auto;
  568. overflow-x: auto;
  569. }
  570. </style>