inforeview.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  1. <template>
  2. <view style="background-color: #fff;" v-if="content != null">
  3. <view style="height: 100rpx;display: flex;align-items: center;justify-content: space-around;border-bottom: 1px solid #ceccca;" v-if="type==0">
  4. <!-- <u-tabs :list="list1" :current="current" @click="click"></u-tabs> -->
  5. <view class="tab" :class="current==0?'active':''" @click="current = 0">
  6. 待办内容
  7. </view>
  8. <view style="border-left: 1px solid #ceccca;height: 80%;">
  9. </view>
  10. <view class="tab" :class="current==0?'':'active'" @click="current = 1">
  11. 流转记录
  12. </view>
  13. </view>
  14. <swiper style="background-color:#fff ;" :style="{height:type==0?'calc(100vh - 100rpx)':'100vh'}" :current="current" disable-touch>
  15. <swiper-item >
  16. <view style="height: 100%;overflow: auto;">
  17. <u--form labelPosition="left" labelAlign="center" :model="content" ref="uForm" :labelStyle="{fontSize:'32rpx'}"
  18. labelWidth="120">
  19. <u-form-item label="信息标题:" borderBottom ref="item1">
  20. <!-- <u--input v-model="content.title" border="none" readonly></u--input> -->
  21. <view class="content">
  22. {{content.title}}
  23. </view>
  24. </u-form-item>
  25. <!-- <u-form-item label="来文单位:" borderBottom ref="item1">
  26. <view class="content">
  27. {{content.sender}}
  28. </view>
  29. </u-form-item> -->
  30. <u-form-item label="来文日期:" borderBottom ref="item1">
  31. <view class="content">
  32. {{content.createTime}}
  33. </view>
  34. </u-form-item>
  35. <u-form-item label="信息发布栏目:" borderBottom ref="item1">
  36. <view class="content">
  37. {{content.columnName}}
  38. </view>
  39. </u-form-item>
  40. <u-form-item label="正文查看:" borderBottom ref="item1">
  41. <view class="content">
  42. <u-button type="primary" text="查看" @click="msgshow = true"></u-button>
  43. </view>
  44. </u-form-item>
  45. <view v-if="type==0">
  46. <u-form-item label="下一节点:" borderBottom ref="item1" v-if="overType==false">
  47. <uni-data-select v-model="content.jdindex" placeholder="请选择下一节点" :clear="false" :localdata="list" @change="change"></uni-data-select>
  48. </u-form-item>
  49. <u-form-item label="处理人员:" borderBottom v-if="DeliveryWay==4" ref="item1" @click="choosePeo">
  50. <view :style="{color:content.users==null?'rgb(192, 196, 204)':''}">
  51. {{content.users==null?'请选择人员': content.userList}}
  52. </view>
  53. </u-form-item>
  54. <u-form-item label="审批意见:" borderBottom ref="item1" v-if="gdType == false">
  55. <u--textarea v-model="content.reviewMsg" placeholder="请输入审批意见" autoHeight border="none"></u--textarea>
  56. </u-form-item>
  57. <view v-if="gdType == true">
  58. <!-- <u-form-item label="密级:" borderBottom ref="item1">
  59. <uni-data-select v-model="content.levels" placeholder="请选择密级" :clear="false"
  60. :localdata="gd"></uni-data-select>
  61. </u-form-item> -->
  62. <u-form-item label="档案编号:" borderBottom ref="item1">
  63. <u--input v-model="content.archiveNo" placeholder="请输入档案编号"
  64. border="none"></u--input>
  65. </u-form-item>
  66. <u-form-item label="档案分类:" borderBottom ref="item1" @click="chooseGd">
  67. <view :style="{color:content.typeId==null?'rgb(192, 196, 204)':''}">
  68. {{content.typeId==null?'请选择档案分类': content.gdtype}}
  69. </view>
  70. </u-form-item>
  71. <u-form-item label="打印份数:" borderBottom ref="item1">
  72. <u--input v-model="content.printNum" placeholder="请输入打印份数" border="none"></u--input>
  73. </u-form-item>
  74. </view>
  75. <!-- <view v-if="backType == true">
  76. <u-form-item label="退回节点:" borderBottom ref="item1">
  77. <uni-data-select v-model="content.returnToNodeID" placeholder="请选择节点" :clear="false"
  78. :localdata="backlist"></uni-data-select>
  79. </u-form-item>
  80. <u-form-item label="退回意见:" borderBottom ref="item1">
  81. <u--textarea v-model="content.backMsg" placeholder="请输入退回意见" autoHeight
  82. border="none"></u--textarea>
  83. </u-form-item>
  84. </view> -->
  85. <view style="margin-top: 40rpx;padding: 0 20rpx;box-sizing: border-box;" v-if="gdType == false">
  86. <u-button type="primary" text="提交" @click="submit" ></u-button>
  87. </view>
  88. <view style="margin-top: 40rpx;padding: 0 20rpx;box-sizing: border-box;" v-if="gdType == true">
  89. <u-button type="primary" text="归档" @click="save" ></u-button>
  90. </view>
  91. <view style="margin-top: 40rpx;padding: 0 20rpx;box-sizing: border-box;" v-if="backType == true">
  92. <u-button type="error" text="退回" @click="show = true" ></u-button>
  93. </view>
  94. </view>
  95. <view style="padding: 20rpx;box-sizing: border-box;width: 100%;box-sizing: border-box;" v-else>
  96. <u-steps :current="100" direction="column" v-if="record != null">
  97. <view v-for="(v,i) in record" :key="i">
  98. <view v-if="v.ActionType22 != undefined">
  99. <u-steps-item :error="v.ActionType==2?true:false" v-for="(item,index) in v.ActionType22" :key="index" :title='item.NDFromT+"("+v.ActionTypeText+")"'>
  100. <view slot="desc" style="color:#606266;">
  101. <view style="font-size: 28rpx;">
  102. 收文部门:{{item.NodeData.split("DeptName=")[1]}}
  103. </view>
  104. <view style="font-size: 28rpx;">
  105. 处理人:{{item.Exer.split(',')[1]}}
  106. </view>
  107. <view style="font-size: 28rpx;">
  108. 处理时间:{{item.RDT}}
  109. </view>
  110. <view style="font-size: 28rpx;">
  111. 审核意见:{{item.Msg}}
  112. </view>
  113. </view>
  114. </u-steps-item>
  115. </view>
  116. <u-steps-item :error="v.ActionType==2?true:false" :title='v.NDFromT+"("+v.ActionTypeText+")"' v-else>
  117. <view slot="desc" style="color: #606266">
  118. <view style="font-size: 28rpx;">
  119. 收文部门:{{v.NodeData.split("DeptName=")[1]}}
  120. </view>
  121. <view style="font-size: 28rpx;">
  122. 处理人:{{v.Exer.split(',')[1]}}
  123. </view>
  124. <view style="font-size: 28rpx;">
  125. 处理时间:{{v.RDT}}
  126. </view>
  127. </view>
  128. </u-steps-item>
  129. </view>
  130. </u-steps>
  131. </view>
  132. </u--form>
  133. </view>
  134. </swiper-item>
  135. <swiper-item >
  136. <view style="padding: 20rpx;box-sizing: border-box;width: 100%;box-sizing: border-box;height: 100%;overflow: auto;">
  137. <u-steps :current="100" direction="column" v-if="record != null">
  138. <view v-for="(v,i) in record" :key="i">
  139. <view v-if="v.ActionType22 != undefined">
  140. <u-steps-item :error="v.ActionType==2?true:false" v-for="(item,index) in v.ActionType22" :key="index" :title='item.NDFromT+"("+v.ActionTypeText+")"'>
  141. <view slot="desc" style="color:#606266;">
  142. <view style="font-size: 28rpx;">
  143. 收文部门:{{item.NodeData.split("DeptName=")[1]}}
  144. </view>
  145. <view style="font-size: 28rpx;">
  146. 处理人:{{item.Exer.split(',')[1]}}
  147. </view>
  148. <view style="font-size: 28rpx;">
  149. 处理时间:{{item.RDT}}
  150. </view>
  151. <view style="font-size: 28rpx;">
  152. 审核意见:{{item.Msg}}
  153. </view>
  154. </view>
  155. </u-steps-item>
  156. </view>
  157. <u-steps-item :error="v.ActionType==2?true:false" :title='v.NDFromT+"("+v.ActionTypeText+")"' v-else>
  158. <view slot="desc" style="color: #606266">
  159. <view style="font-size: 28rpx;">
  160. 收文部门:{{v.NodeData.split("DeptName=")[1]}}
  161. </view>
  162. <view style="font-size: 28rpx;">
  163. 处理人:{{v.Exer.split(',')[1]}}
  164. </view>
  165. <view style="font-size: 28rpx;">
  166. 处理时间:{{v.RDT}}
  167. </view>
  168. </view>
  169. </u-steps-item>
  170. </view>
  171. </u-steps>
  172. </view>
  173. </swiper-item>
  174. </swiper>
  175. <u-modal :show="msgshow" title="内容" @confirm="msgshow = false">
  176. <view class="slot-content">
  177. <rich-text :nodes="content.content"></rich-text>
  178. </view>
  179. </u-modal>
  180. <u-modal :show="show" title="退回" :closeOnClickOverlay="true" showCancelButton @cancel="close" @close="close" @confirm="back">
  181. <view class="slot-content" style="width: 100%;" >
  182. <u--form labelPosition="left" labelAlign="center" :model="content" ref="uForm1"
  183. :labelStyle="{fontSize:'32rpx'}" labelWidth="100">
  184. <u-form-item label="退回节点:" borderBottom ref="item1">
  185. <uni-data-select v-model="content.returnToNodeID" placeholder="请选择节点" :clear="false"
  186. :localdata="backlist"></uni-data-select>
  187. </u-form-item>
  188. <u-form-item label="退回意见:" borderBottom ref="item1" >
  189. <u--textarea v-model="content.backMsg" placeholder="请输入退回意见" autoHeight
  190. border="none"></u--textarea>
  191. </u-form-item>
  192. </u--form>
  193. </view>
  194. </u-modal>
  195. </view>
  196. </template>
  197. <script>
  198. export default {
  199. data() {
  200. return {
  201. current:0,
  202. content: null,
  203. statusList: [],
  204. //流转记录
  205. record: null,
  206. //待办已办
  207. type: 0,
  208. //节点列表
  209. list: [],
  210. //是否选择下发人员
  211. selectType: 3,
  212. workid: null,
  213. flowNo: null,
  214. id:null,
  215. //tabs
  216. list1:[
  217. {name: '待办内容'},
  218. {name: '流转记录'}
  219. ],
  220. DeliveryWay:null,
  221. gd: null, //密级列表
  222. gdType: false, //判断是否是归档
  223. overType: false, //判断是否结束
  224. //上个页面传过来的参数
  225. parameter: null,
  226. msgshow:false,
  227. //退回状态
  228. backType:false,
  229. //退回节点列表
  230. backlist:[],
  231. show:false
  232. }
  233. },
  234. onLoad(options) {
  235. let that = this
  236. this.getDicts()
  237. this.getContent(options.workid)
  238. this.getRecord(options.workid)
  239. that.parameter = options
  240. // this.getLmList()
  241. if (options.nodeName.indexOf('归档') != -1) {
  242. that.gdType = true
  243. that.getgd()
  244. }
  245. // this.getgd()
  246. this.type = options.type
  247. this.workid = options.workid
  248. this.flowNo = options.flowNo
  249. uni.setNavigationBarTitle({
  250. title: options.title
  251. })
  252. // if (options.type == 0) {
  253. // setTimeout(() => {
  254. // this.isOver(options)
  255. // }, 500)
  256. // }
  257. },
  258. onShow(){
  259. uni.$once('query', (query) => {
  260. if (query.a == 1) {
  261. this.content.users = getApp().globalData.peoIdList
  262. this.content.userList = getApp().globalData.peoList
  263. this.$forceUpdate()
  264. } else if (query.a == 2) {
  265. this.content.typeId = getApp().globalData.gdId.split(",")[0]
  266. this.content.gdtype = getApp().globalData.gdId.split(",")[1]
  267. this.$forceUpdate()
  268. }
  269. })
  270. },
  271. methods: {
  272. click(e){
  273. this.current = e.index
  274. },
  275. //查询收文详情
  276. getContent(id) {
  277. uni.$u.http.get('/oa/article/sel/' + id).then(res => {
  278. // console.log(res)
  279. this.content = res.data
  280. this.content.workid = this.workid
  281. this.getLmList(res.data.columnId)
  282. if (this.gdType == true) {
  283. this.content.typeId = null //归档分类
  284. this.content.levels = null //密级
  285. this.content.archiveNo = null //档案编号
  286. this.content.archiveFormNo = null
  287. this.content.printNum = null //打印份数
  288. this.content.name = res.data.title //档案名称
  289. this.content.gdtype = null //分类名称
  290. }
  291. if(this.type==0){
  292. this.isOver(this.parameter)
  293. this.getBackNo(this.parameter.nodeId)
  294. }
  295. this.statusList.forEach(item => {
  296. if (item.dictValue == res.data.emergencyDegree) {
  297. this.content.status = item.dictLabel
  298. }
  299. })
  300. })
  301. },
  302. // 查询字典数据详细
  303. getDicts() {
  304. uni.$u.http.get('/system/dict/data/type/urgent_type').then(res => {
  305. this.statusList = res.data
  306. })
  307. },
  308. //查询归档字典
  309. getgd(){
  310. uni.$u.http.get('/system/dict/data/type/archive_levels').then(res =>{
  311. this.gd = res.data.map((item, index) => {
  312. let obj = {
  313. value: item.dictCode,
  314. id: item.dictCode,
  315. text: item.dictLabel,
  316. }
  317. return obj
  318. })
  319. })
  320. },
  321. //获取栏目列表
  322. getLmList(id) {
  323. let that = this
  324. uni.$u.http.get('/oa/column/list', {
  325. params: {
  326. pageSize: 100,
  327. }
  328. }).then(res => {
  329. // console.log(res)
  330. for (let i in res.rows) {
  331. if(id == res.rows[i].id){
  332. // console.log(res.rows[i].columnName)
  333. this.content.columnName = res.rows[i].columnName
  334. // return res.rows[i].columnName
  335. }
  336. }
  337. })
  338. },
  339. //查询流转记录
  340. getRecord(id) {
  341. uni.$u.http.get('/jflow/restful/getWfGenerWorkList', {
  342. params: {
  343. workID: id,
  344. token: uni.getStorageSync('jtoken')
  345. }
  346. }).then(res => {
  347. this.record = res.trackList
  348. if (this.type == 0) {
  349. // this.content.jdindex = null
  350. // this.content.nodeId = null
  351. // this.content.optionName = null
  352. this.content.reviewMsg = null
  353. this.content.users = null
  354. // this.content.toNodeId = null
  355. this.content.userList = null
  356. // this.id = this.list[0].id
  357. // this.content.jdindex = 0 //下一节点索引
  358. // this.DeliveryWay = this.list[0].DeliveryWay //下一节点状态
  359. // this.content.toNodeId = this.list[0].id //下一节点ID
  360. // this.content.nodeId = this.list[0].id //下一节点ID
  361. // this.content.optionName = this.list[0].text //节点名称
  362. }
  363. })
  364. },
  365. //查询下一步所有节点
  366. jdList(id, flow) {
  367. uni.$u.http.get('/jflow/restful/GenerNextStepAllNode', {
  368. params: {
  369. workid: id,
  370. token: uni.getStorageSync('jtoken'),
  371. flowNo: flow
  372. }
  373. }).then(res => {
  374. this.id = res[0].NodeID
  375. this.content.jdindex = 0 //下一节点索引
  376. this.DeliveryWay = res[0].DeliveryWay //下一节点状态
  377. this.content.toNodeId = res[0].NodeID //下一节点ID
  378. this.content.nodeId = res[0].NodeID //下一节点ID
  379. this.content.optionName = res[0].Name //节点名称
  380. this.list = res.map((item, index) => {
  381. let obj = {
  382. value: index,
  383. id: item.NodeID,
  384. text: item.Name,
  385. DeliveryWay: item.DeliveryWay
  386. }
  387. return obj
  388. })
  389. })
  390. },
  391. //节点选择
  392. change(e) {
  393. if(e>=0){
  394. this.id = this.list[e].id
  395. this.DeliveryWay = this.list[e].DeliveryWay
  396. this.content.toNodeId = this.list[e].id
  397. this.content.nodeId = this.list[e].id
  398. this.content.optionName = this.list[e].text
  399. }
  400. },
  401. //选择人员相关
  402. choosePeo() {
  403. if(this.id == null){
  404. uni.showToast({
  405. title:"请先选择下一节点",
  406. icon:"none"
  407. })
  408. }else{
  409. uni.navigateTo({
  410. url:`/pages/peoChoose/peoChoose?workid=${this.workid}&flowNo=${this.flowNo}&id=${this.id}`,
  411. })
  412. }
  413. },
  414. //选择归档分类
  415. chooseGd() {
  416. uni.navigateTo({
  417. url: "/pages/file/file"
  418. })
  419. },
  420. //判断是否为最后一步
  421. isOver(v) {
  422. uni.$u.http.get("/jflow/restful/judgeNode", {
  423. params: {
  424. nodeId: v.nodeId
  425. }
  426. }).then(res => {
  427. // console.log(res)
  428. if (res.msg == "Y") {
  429. this.overType = true
  430. } else {
  431. this.overType = false
  432. this.jdList(v.workid, v.flowNo)
  433. }
  434. })
  435. },
  436. //提交待办
  437. submit(){
  438. if(this.id == null){
  439. uni.showToast({
  440. title:"请先选择下一节点",
  441. icon:"none"
  442. })
  443. }else if(this.content.users == null && this.DeliveryWay == 4){
  444. uni.showToast({
  445. title:"请选择人员",
  446. icon:"none"
  447. })
  448. }else if(this.content.reviewMsg == null){
  449. uni.showToast({
  450. title:"请填写审核内容",
  451. icon:"none"
  452. })
  453. }else{
  454. uni.showLoading({
  455. title:"提交中...",
  456. mask:true
  457. })
  458. uni.$u.http.post("/offcial/receive/sendFlowToUsers",this.content,{
  459. header: {
  460. // 'content-Type': 'multipart/form-data'
  461. 'content-Type': 'application/x-www-form-urlencoded'
  462. }
  463. }).then(res=>{
  464. // uni.hideLoading()
  465. if (res.data.VarAcceptersName != "" && res.data.VarAcceptersName != "结束") {
  466. uni.showToast({
  467. title: "已发送到" + res.data.VarToNodeName + "节点,接收人:" + res
  468. .data.VarAcceptersName,
  469. icon: "none",
  470. mask: true,
  471. duration:3000
  472. })
  473. } else if (res.data.VarAcceptersName == "结束") {
  474. uni.showToast({
  475. title: res.data.Message,
  476. icon: "none",
  477. mask: true,
  478. duration:3000
  479. })
  480. } else {
  481. uni.showToast({
  482. title: res.data.Message.replace(/[@]/g, ""),
  483. icon: "none",
  484. mask: true,
  485. duration:3000
  486. })
  487. }
  488. uni.$emit('query', {
  489. a: 'back'
  490. })
  491. setTimeout(() => {
  492. uni.navigateBack()
  493. }, 2000)
  494. }).catch(res=>{
  495. uni.hideLoading()
  496. })
  497. }
  498. },
  499. //保存归档
  500. save() {
  501. // if (this.content.levels == null) {
  502. // uni.showToast({
  503. // title: "请选择密级",
  504. // icon: "none"
  505. // })
  506. // } else
  507. if (this.content.archiveNo == null) {
  508. uni.showToast({
  509. title: "请填写档案编号",
  510. icon: "none"
  511. })
  512. } else if (this.content.typeId == null) {
  513. uni.showToast({
  514. title: "请选择归档分类",
  515. icon: "none"
  516. })
  517. } else if (this.content.printNum == null) {
  518. uni.showToast({
  519. title: "请填写打印份数",
  520. icon: "none"
  521. })
  522. } else {
  523. this.content.reviewMsg = "同意"
  524. uni.showLoading({
  525. title: "提交中...",
  526. mask: true
  527. })
  528. uni.$u.http.post("/offcial/archive/save", this.content).then(res => {
  529. uni.$u.http.get('/jflow/restful/GenerNextStepAllNode', {
  530. params: {
  531. workid: this.parameter.workid,
  532. token: uni.getStorageSync('jtoken'),
  533. flowNo: this.parameter.flowNo,
  534. }
  535. }).then(qwe => {
  536. // uni.hideLoading()
  537. uni.showToast({
  538. title: "归档成功",
  539. icon: "none",
  540. mask: true,
  541. duration:2000
  542. })
  543. uni.$emit('query', {
  544. a: 'back'
  545. })
  546. setTimeout(() => {
  547. uni.navigateBack()
  548. }, 2000)
  549. })
  550. }).catch(res => {
  551. uni.hideLoading()
  552. uni.showToast({
  553. title:"请稍后重试",
  554. icon:"none"
  555. })
  556. })
  557. }
  558. },
  559. //查询是否能退回
  560. getBackNo(id){
  561. uni.$u.http.get("/jflow/restful/CurrNodeInfo?currNodeID="+id).then(res=>{
  562. if(res[0].ReturnRole != 0){
  563. this.getBackList()
  564. this.backType = true
  565. this.content.returnToNodeID = null
  566. this.content.backMsg = null
  567. }
  568. })
  569. },
  570. //获取退回节点列表
  571. getBackList(){
  572. uni.$u.http.get("/jflow/restful/getReturnWorkNode",{
  573. params:{
  574. workid: this.parameter.workid,
  575. token: uni.getStorageSync('jtoken')
  576. }
  577. }).then(res=>{
  578. this.backlist = res.map((item, index) => {
  579. let obj = {
  580. value: item.No,
  581. id: item.No,
  582. text: item.Name,
  583. }
  584. return obj
  585. })
  586. })
  587. },
  588. //退回上一节点
  589. back(){
  590. if(this.content.returnToNodeID == null){
  591. uni.showToast({
  592. title:"请选择退回节点",
  593. icon:"none"
  594. })
  595. }else if(this.content.backMsg == null){
  596. uni.showToast({
  597. title:"请填写退回意见",
  598. icon:"none"
  599. })
  600. }else{
  601. uni.showLoading({
  602. title:"退回中...",
  603. })
  604. uni.$u.http.get("/offcial/receive/NodeReturnWork",{
  605. params:{
  606. workid: this.parameter.workid,
  607. returnToNodeID: this.content.returnToNodeID,
  608. returnMsg:this.content.backMsg
  609. }
  610. }).then(res=>{
  611. uni.hideLoading()
  612. this.close()
  613. uni.showToast({
  614. title:res,
  615. icon:"none",
  616. duration:2000
  617. })
  618. uni.$emit('query', {
  619. a: 'back'
  620. })
  621. setTimeout(() => {
  622. uni.navigateBack()
  623. }, 2000)
  624. }).catch(error=>{
  625. uni.hideLoading()
  626. uni.showToast({
  627. title:"请稍后重试",
  628. icon:"none"
  629. })
  630. })
  631. }
  632. },
  633. //关闭模态框
  634. close(){
  635. this.content.returnToNodeID = null
  636. this.content.backMsg = null
  637. this.show = false
  638. }
  639. }
  640. }
  641. </script>
  642. <style lang="scss" scoped>
  643. .content {
  644. font-size: 32rpx;
  645. }
  646. .tab{
  647. width: 48%;
  648. height: 100%;
  649. box-sizing: border-box;
  650. display: flex;
  651. align-items: center;
  652. justify-content: center;
  653. }
  654. .active{
  655. color:#2979ff
  656. }
  657. </style>