myTarget.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606
  1. <template>
  2. <div style="height: 100%;">
  3. <van-nav-bar title="目标管理" left-text="返回" @click-left="$route_back" left-arrow>
  4. <div slot="right" @click="isShowPopup = true" style="color: #fff;">筛选<van-icon name="list-switch" /></div>
  5. </van-nav-bar>
  6. <div class="all">
  7. <div style="background-color: #fff;">
  8. <div style="padding: 0.24rem;border-bottom: 1px solid #f1f1f1;" class="flex-box-ce flex-center-center" @click="openPanel()">
  9. <icon name="YMPicker_item_icon" style="margin-right: 6px;width: 0.3rem;height: 0.3rem;" class="fontColorC"></icon>
  10. <div>{{ dateParameter.year }}年</div>
  11. <div style="margin: 0 6px;">{{ dateParameter.name }}</div>
  12. <van-icon name="arrow-down" />
  13. </div>
  14. <!-- <van-tabs v-model="activeName">
  15. <van-tab v-for="(item,index) in tabs" :title="item.title" :name="item.name" :key="index" v-if="item.isShow"></van-tab>
  16. </van-tabs> -->
  17. </div>
  18. <template v-if="activeName=='a'">
  19. <!-- <div class="flex-box-ce flex-d-wrap" style="padding: 0 0.2rem;margin-top: 0.24rem;">
  20. <div class="search-item" style="border-radius: 25px;font-size: 0.28rem;" @click="targetType=item.id" v-for="(item, index) in targetTypeArr" :key="index" :class="item.id==targetType? 'searchActive':''">{{ item.name }}</div>
  21. </div> -->
  22. </template>
  23. <template v-if="activeName=='b'">
  24. <div class="selector" @click="isShowDept=true">
  25. <span>{{ deptInfo.dept_name }}</span>
  26. <van-icon name="arrow-down" />
  27. </div>
  28. <div style="overflow-x: scroll;margin: 0.2rem;">
  29. <div class="flex-box-ce">
  30. <div
  31. :class="{userActive:ownerUserInfo.id==item.id}"
  32. @click="ownerUserInfo = item"
  33. style="padding:0.14rem;border-radius: 5px;"
  34. class="flex-box-v flex-center-center"
  35. v-for="(item,index) in userList" :key="index">
  36. <userImage :id="item.id" :user_name="item.name" :img_url="item.img_url" fontSize="0.20" width="0.8rem" height="0.8rem"></userImage>
  37. <div class="clamp userName">{{item.name}}</div>
  38. </div>
  39. </div>
  40. </div>
  41. </template>
  42. <template v-if="activeName=='c'">
  43. <div style="overflow-x: scroll;margin: 0.2rem;">
  44. <div class="flex-box-ce">
  45. <div class="flex-box-v flex-center-center" style="padding: 0.14rem;" @click="openGz">
  46. <div class="addUser" style="">+</div>
  47. <div class="clamp userName">设置</div>
  48. </div>
  49. <div
  50. :class="{userActive:follUserInfo.id==item.id}"
  51. @click="follUserInfo=item"
  52. style="padding:0.14rem;border-radius: 5px;"
  53. class="flex-box-v flex-center-center"
  54. v-for="(item,index) in followList" :key="index">
  55. <userImage :id="item.id" :user_name="item.name" :img_url="item.img_url" fontSize="0.20" width="0.8rem" height="0.8rem"></userImage>
  56. <div class="clamp userName">{{item.name}}</div>
  57. </div>
  58. </div>
  59. </div>
  60. </template>
  61. <template v-if="activeName=='d'">
  62. <div class="selector" @click="isShowSelectUser=true">
  63. <span v-if="selectDataBox.name">{{ selectDataBox.name }}</span>
  64. <span v-else class="fontColorC">选择人员或部门</span>
  65. <van-icon name="arrow-down" />
  66. </div>
  67. <div style="height: 0.2rem;"></div>
  68. </template>
  69. <div class="scroller" :class="{scroller2:activeName=='b',scroller3:activeName=='c',scroller4:activeName=='d'}">
  70. <scroller ref="scroller" :isInitRefresh="false" :on-refresh="refresh" :on-infinite="infinite" noDataText="没有了噢" :list="targetList">
  71. <div class="list-box" v-for="(item,index) in targetList" :key="index" >
  72. <div class="flex-box" @click="openDetail(item,1)">
  73. <div class="huan"><span></span></div>
  74. <div class="flex-1">
  75. <div class="clamp2" style="margin-bottom: 5px;">{{item.name}}</div>
  76. <div class="flex-box-ce fontColorC" style="font-size: 0.26rem;">
  77. <van-icon name="contact" v-show="item.belong_type==4"/>
  78. <van-icon name="cluster-o" v-show="item.belong_type==2"/>
  79. <van-icon name="hotel-o" v-show="item.belong_type==1"/>
  80. <span style="border-left: 1px solid #f1f1f1;padding-left: 0.1rem;margin-left: 0.1rem;">{{$getEmployeeMapItem(item.owner_id).name}}</span>
  81. <span style="border-left: 1px solid #f1f1f1;padding-left: 0.1rem;margin-left: 0.1rem;" v-if="item.composite_state==6">已结束</span>
  82. <template v-else>
  83. <span style="border-left: 1px solid #f1f1f1;padding-left: 0.1rem;margin-left: 0.1rem;" v-if="item.process_ut">{{item.process_ut}} 更新</span>
  84. </template>
  85. <span class="flex-1"></span>
  86. <div class="progress"><div class="progress-inner" :class="{bjYellow:item.risk_level==2,bjRed:item.risk_level==3}" :style="{width:item.process>100? '100%':item.process+'%'}"></div></div>
  87. <span style="padding-left: 0.1rem;font-size: 0.24rem;" class="blue" :class="{orange:item.risk_level==2,red:item.risk_level==3}">{{ item.process }}%</span>
  88. </div>
  89. </div>
  90. </div>
  91. <div class="flex-box-ce" style="margin-top: 0.2rem;" @click="openDetail(krItem,2)" v-for="(krItem,index2) in item.krs" :key="index2" >
  92. <div class="blue" style="font-size: 0.26rem;margin-right: 0.13rem;">KR{{index2+1}}</div>
  93. <div class="flex-1 font-flex-word" style="padding-right: 0.2rem;font-size: 0.28rem;">{{krItem.name}}</div>
  94. <van-circle layer-color="#E5E9F2" v-model="krItem.currentRate" :color="krItem.risk_level==2? '#FF9600':krItem.risk_level==3? '#f56c6c':' #2879ff'" :rate="krItem.process" :key="index2" :stroke-width="120" size="20px"/>
  95. <span style="padding-left: 5px;font-size: 0.24rem;" class="blue" :class="{orange:krItem.risk_level==2,red:krItem.risk_level==3}">{{ krItem.process }}%</span>
  96. </div>
  97. </div>
  98. <div v-if="targetList.length == 0" style="text-align: center;margin-top: 2rem;" class="fontColorC">
  99. <span>未找到相关的目标</span>
  100. </div>
  101. </scroller>
  102. </div>
  103. </div>
  104. <!-- 选择部门 -->
  105. <van-dialog v-model="isShowDept" title="" width="300" :show-confirm-button="false" closeOnClickOverlay>
  106. <van-radio-group v-model="deptInfo.dept_id">
  107. <div v-for="(item, index) in dept_list" :key="index">
  108. <van-radio :name="item.dept_id" @click="confirmDept2(item)" style="margin:.3rem 0 .3rem .4rem;font-size:.3rem" icon-size="16px">
  109. <span style="margin-left:.3rem">{{ item.dept_name }}</span>
  110. </van-radio>
  111. </div>
  112. </van-radio-group>
  113. </van-dialog>
  114. <!-- 周期选择 -->
  115. <van-action-sheet v-model="pullonThePanel" :closeable="false">
  116. <div class="content">
  117. <van-picker ref="van_picker" show-toolbar :columns="columns" @cancel="pullonThePanel=false" value-key="name" @confirm="onConfirm" confirm-button-text="完成" />
  118. </div>
  119. </van-action-sheet>
  120. <!-- 人员选择 -->
  121. <EmployeeDeptSelector
  122. title="选择人员"
  123. :visible.sync="isShowSelectUser"
  124. @confirm="confirmUser"
  125. :selectDataBox.sync="selectDataBox">
  126. </EmployeeDeptSelector>
  127. <!-- 筛选 -->
  128. <van-popup v-model="isShowPopup" position="right" style="height: 100%;left: 20%;">
  129. <div style="position: relative;height: 100%;">
  130. <div style="border-bottom: 1px solid #f1f1f1;font-size: 16px;font-weight: 700;height: 0.92rem;line-height: 0.92rem;padding: 0 0.2rem;">高级筛选</div>
  131. <div style="padding: 10px;">
  132. <div style="margin-bottom: 15px;font-size: 0.32rem;">类型</div>
  133. <div class="flex-box-ce flex-d-wrap">
  134. <div class="search-item" @click="belong_type=item.id" v-for="(item, index) in targetArr" :key="index" :class="item.id==belong_type? 'searchActive':''">{{ item.name }}</div>
  135. </div>
  136. </div>
  137. <!-- <div style="padding: 10px;">
  138. <div style="margin-bottom: 15px;font-size: 0.32rem;">状态</div>
  139. <div class="flex-box-ce flex-d-wrap">
  140. <div class="search-item" @click="sortId=item.id" v-for="(item, index) in sortArr" :key="index" :class="item.id==sortId? 'searchActive':''">{{ item.name }}</div>
  141. </div>
  142. </div> -->
  143. <div style="position: fixed;bottom: 0.2rem;left: 0.2rem;right: 0.2rem;">
  144. <div class="btn" @click="isShowPopup=false">确认</div>
  145. </div>
  146. </div>
  147. </van-popup>
  148. </div>
  149. </template>
  150. <script>
  151. import Vue from 'vue';
  152. import {Picker,Popup,Circle,Icon,Tab, Tabs,} from 'vant';
  153. import { _debounce, _throttle } from '@/utils/auth';
  154. import { getBelongType,getColumns,cycleTypeArr} from '@/okr/utils/auth';
  155. import EmployeeSelector from '@/components/EmployeeSelector';
  156. import EmployeeDeptSelector from '@/components/EmployeeDeptSelector';
  157. Vue.use(Picker).use(Popup).use(Circle).use(Icon).use(Tabs).use(Tab)
  158. export default {
  159. components:{EmployeeSelector,EmployeeDeptSelector},
  160. name: 'Target',
  161. props: {
  162. skeLoad: {
  163. type: Boolean,
  164. default: false
  165. }
  166. },
  167. data() {
  168. return {
  169. page:1,
  170. page_size:10,
  171. cycleTypeArr:cycleTypeArr(true),
  172. value:5,
  173. userId:this.$userInfo().id,
  174. userInfo: this.$userInfo(),
  175. dept_list:this.$userInfo().employee_detail.dept_list,
  176. deptInfo:this.$userInfo().employee_detail.dept_list[0]? this.$userInfo().employee_detail.dept_list[0]:{},
  177. isShowDept:false,
  178. targetTypeArr: [{ name: '我负责的', id: 1 }, { name: '我参与的', id: 2 }, { name: '我关注的', id: 3 }],
  179. targetType:1,
  180. dateParameter: {
  181. year: '',
  182. cycle_type: 0,
  183. dateId: 1,
  184. name: '全部周期'
  185. },
  186. selectPftiTheEcho: [0, 0], // 选项回显
  187. pullonThePanel:false,
  188. columns: getColumns(),
  189. isShowPopup:false,
  190. targetArr: [{ name: '全部类型', id: 0 }, { name: '公司', id: 1 }, { name: '部门', id: 2 },{ name: '个人', id: 4 }],
  191. belong_type: 0,
  192. sortArr: [
  193. { name: '全部状态', id: 0,value:'0' },
  194. { name: '进行中', id: 1,value:'1,2,3,4,5,7,8,9' },
  195. { name: '已结束', id: 2,value:'6' },
  196. ],
  197. sortId: 0,
  198. targetList:[],
  199. isShowSelectUser:false,
  200. selected_user: { dept: [], employee: [] } ,//传入已选部门
  201. selectDataBox:{},
  202. tabs:[{title:'我的目标',name:'a',isShow:true},{title:'我的部门',name:'b',isShow:true},{title:'关注的人',name:'c',isShow:true},{title:'全公司',name:'d',isShow:true}],
  203. activeName: 'd',
  204. userList:[],
  205. ownerUserInfo:{},
  206. followList:[],
  207. follUserInfo:{},
  208. };
  209. },
  210. watch:{
  211. isShowSelectUser(val){
  212. if(val){
  213. this.selected_user.employee=[this.userInfo];
  214. }
  215. },
  216. isShowPopup(val){
  217. if(!val){
  218. this.pullDown();
  219. }
  220. },
  221. targetType(){
  222. this.pullDown();
  223. },
  224. ownerUserInfo(){
  225. this.pullDown();
  226. },
  227. follUserInfo(){
  228. this.pullDown();
  229. },
  230. activeName(val){
  231. if(this.activeName=='a'){
  232. this.pullDown();
  233. }
  234. if(this.activeName=='d'){
  235. this.pullDown();
  236. }
  237. if(this.activeName=='b'){
  238. this.get_employee_list();
  239. }
  240. if(this.activeName=='c'){
  241. this.getGzUserList();
  242. }
  243. },
  244. },
  245. methods: {
  246. openGz(){
  247. this.$router.push({name: 'attentionList',query:{index:1}})
  248. },
  249. getGzUserList(){
  250. this.$axiosUser('get', '/api/pro/okr/follow', { type:1 }).then(res=>{
  251. this.followList = res.data.data.list;
  252. if(this.followList.length>0){
  253. this.follUserInfo=this.followList[0];
  254. }else{
  255. this.follUserInfo={};
  256. this.pullDown();
  257. }
  258. })
  259. },
  260. confirmDept2(data){
  261. this.deptInfo=JSON.parse(JSON.stringify(data));
  262. this.get_employee_list();
  263. this.isShowDept=false;
  264. },
  265. get_employee_list() {
  266. this.$axiosUser('get', '/api/pro/employee/list', { dept_id:this.deptInfo.dept_id }, 'v2').then(res => {
  267. let list=res.data.data.list;
  268. list.unshift({name:'全部',id:0})
  269. this.userList=list;
  270. if(this.userList.length>0){
  271. this.ownerUserInfo=this.userList[0];
  272. }
  273. });
  274. },
  275. openPanel(){
  276. this.pullonThePanel=true;
  277. this.$nextTick(() => {
  278. this.theEchoVanPicker()
  279. })
  280. },
  281. confirmUser(item){
  282. this.selectDataBox = item;
  283. this.pullDown();
  284. },
  285. openDetail(item,type){
  286. if(type==1){
  287. this.$router.push({name: 'myTargetDetail', query: {id: item.id}})
  288. }else {
  289. this.$router.push({name: 'myKrDetail', query: {id: item.id}})
  290. }
  291. },
  292. // 考核包搜索
  293. onConfirm (data, list) { // 确认
  294. let columns=this.columns[list[0]];
  295. let options=this.cycleTypeArr[list[1]]
  296. this.selectPftiTheEcho=list
  297. this.dateParameter={
  298. year: columns.value,
  299. cycle_type: options.cycle_type,
  300. dateId: options.id,
  301. name: options.name
  302. };
  303. this.pullDown();
  304. this.pullonThePanel = false
  305. },
  306. pullDown(){
  307. setTimeout(() => {
  308. this.$refs.scroller.triggerPullToRefresh();
  309. }, 50);
  310. },
  311. theEchoVanPicker() { // 回显
  312. this.$refs.van_picker.setIndexes(this.selectPftiTheEcho);
  313. },
  314. getList(is,callback){
  315. let hasMore = false
  316. is? '':this.page=1;
  317. let params = {
  318. page:is? this.page:1,
  319. page_size: this.page_size,
  320. cycle_type:this.dateParameter.cycle_type,
  321. year:this.dateParameter.year,
  322. belong_type:this.belong_type,
  323. quarter:0,
  324. half_year:0,
  325. month:0,
  326. sort_ct:2,
  327. ids: []
  328. };
  329. if(!params.year) delete params.year
  330. if(!params.quarter) delete params.quarter
  331. if(!params.half_year) delete params.half_year
  332. if(!params.month) delete params.month
  333. params.ids = this.$route.query.ids || "[]";
  334. if(this.activeName=='a'){ //我的目标
  335. this.targetType==1? params.owner_id=this.userId:this.targetType==2? params.joiner_id=this.userId:params.follower_id=this.userId;
  336. }else if(this.activeName=='b'){//我的部门
  337. params.dept=this.deptInfo.dept_id;
  338. params.owner_id=this.ownerUserInfo.id;
  339. }else if(this.activeName=='c'){//我关注的
  340. if(this.follUserInfo.id){
  341. params.owner_id=this.follUserInfo.id;
  342. }else{
  343. this.targetList=[];
  344. callback && callback(hasMore)
  345. return false
  346. }
  347. }else if(this.activeName=='d'){//全公司
  348. if(this.selectDataBox.type == 'user'){
  349. params.owner_id = this.selectDataBox.id;
  350. }else if(this.selectDataBox.type=='dept'){
  351. params.dept=this.selectDataBox.id;
  352. }
  353. }
  354. if(this.sortId){//状态
  355. params.composite_states=this.sortId==1? '1,2,3,4,5,7,8,9':'6';
  356. }
  357. if(this.dateParameter.cycle_type==2){
  358. params.quarter=this.dateParameter.dateId
  359. }
  360. if(this.dateParameter.cycle_type==3){
  361. params.half_year=this.dateParameter.dateId
  362. }
  363. if(this.dateParameter.cycle_type==4){
  364. params.month=this.dateParameter.dateId
  365. }
  366. this.$axiosUser('get', '/api/pro/okr/public/obj/list', params).then(res => {
  367. let list=res.data.data.list
  368. list.forEach(item=>{
  369. item.krs.forEach(e=>{
  370. e.currentRate=Number(e.process);
  371. e.process=Number(e.process)
  372. })
  373. })
  374. if (this.page === 1) {
  375. this.targetList = list
  376. } else {
  377. this.targetList = this.targetList.concat(list)
  378. }
  379. hasMore = list.length !== 10
  380. callback && callback(hasMore)
  381. })
  382. },
  383. // 上拉刷新
  384. refresh (done) {
  385. this.getList(false,done)
  386. },
  387. // 下拉加载
  388. infinite (done) {
  389. this.page++;
  390. this.getList(true,done)
  391. },
  392. getUnitList(){
  393. this.$axiosUser('get', '/api/pro/okr/public/kr/unit_list').then(res => {
  394. let data=res.data.data;
  395. data.reverse()
  396. this.$setCache('unitList',data)
  397. })
  398. },
  399. },
  400. created() {
  401. this.getUnitList();
  402. this.columns.forEach((e,index)=>{
  403. if(e.value==this.dateParameter.year){
  404. this.selectPftiTheEcho[0]=index
  405. }
  406. })
  407. this.tabs=[
  408. {title:'我的目标',name:'a',isShow:true},
  409. {title:'我的部门',name:'b',isShow:!this.$userInfo().is_okr_manager&&this.dept_list.length>0},
  410. {title:'关注的人',name:'c',isShow:true},
  411. {title:'全公司',name:'d',isShow:true},
  412. ]
  413. this.getList();
  414. },
  415. activated() {
  416. if(this.activeName=='c'){
  417. this.getGzUserList();
  418. }else{
  419. this.pullDown();
  420. }
  421. },
  422. };
  423. </script>
  424. <style scoped lang="less">
  425. .addUser{
  426. font-size: .6rem;
  427. padding: 0.2rem;
  428. border: 0.02rem dashed #89919f;
  429. text-align: center;
  430. height: 0.4rem;
  431. width: 0.4rem;
  432. line-height: .4rem;
  433. color: #89919f;
  434. border-radius: 2rem;
  435. }
  436. .userName{
  437. font-size: 0.28rem;
  438. width: 1rem;
  439. text-align: center;
  440. color: #89919F;
  441. }
  442. .userActive{
  443. background-color: #E9F0FD;
  444. }
  445. .userActive .userName{
  446. color: #26A2FF;
  447. }
  448. .selector {
  449. z-index: 1;
  450. display: flex;
  451. justify-content: center;
  452. width: 100%;
  453. height: 0.8rem;
  454. line-height: 0.8rem;
  455. background-color: #fff;
  456. text-align: center;
  457. font-size: 0.28rem;
  458. border-top: 1px solid #f1f1f1;
  459. i {
  460. margin: 0.23rem 0 0 0.1rem;
  461. color: #c3c3c3;
  462. }
  463. span {
  464. max-width: 3.5rem;
  465. overflow: hidden;
  466. }
  467. }
  468. .aite{
  469. width: 1rem;
  470. height: 1rem;
  471. text-align: center;
  472. line-height: 1rem;
  473. font-size: 0.6rem;
  474. cursor: pointer;
  475. color: #fff;
  476. display: inline-block;
  477. border-radius: 100%;
  478. background-color: #26A2FF;
  479. position: absolute;
  480. z-index: 2;
  481. bottom: 0.4rem;
  482. right: 0.4rem;
  483. }
  484. .progress {
  485. border-radius: 100px;
  486. background-color: #ebeef5;
  487. overflow: hidden;
  488. position: relative;
  489. vertical-align: middle;
  490. height: 0.2rem;
  491. width: 1rem;
  492. }
  493. .progress-inner {
  494. width: 0%;
  495. position: absolute;
  496. left: 0;
  497. top: 0;
  498. padding-top: 1px;
  499. height: 100%;
  500. background-image: linear-gradient(to right, #99BBFF 0%, #26A2FF 100%);
  501. border-radius: 100px;
  502. color: #fff;
  503. white-space: nowrap;
  504. transition: width 0.6s ease;
  505. }
  506. .bjYellow{
  507. background-image: linear-gradient(to right, #fedf86 0%, #FF9600 100%);
  508. }
  509. .bjRed{
  510. background-image: linear-gradient(to right, #FEA2A2 0%, #F16060 100%);
  511. }
  512. .huan{
  513. position: relative;
  514. width: 0.4rem;
  515. height: 0.4rem;
  516. border-radius: 100%;
  517. background-color: #E9F1FE;
  518. box-sizing: border-box;
  519. text-align: center;
  520. margin-right: 0.2rem;
  521. padding-top: 0.036rem;
  522. }
  523. .huan span{
  524. border: 2px solid #26A2FF;
  525. border-radius: 100%;
  526. width: 0.16rem;
  527. height: 0.16rem;
  528. display: inline-block;
  529. }
  530. .list-box{
  531. padding: 0.2rem;
  532. font-size: 0.32rem;
  533. background-color: #fff;
  534. border-radius: 5px;
  535. margin: 0 0.2rem;
  536. margin-bottom: 0.24rem;
  537. }
  538. .scroller{
  539. height: calc(100% - 2.75rem);
  540. position: relative;
  541. }
  542. .scroller2{
  543. height: calc(100% - 4.5rem);
  544. }
  545. .scroller3{
  546. height: calc(100% - 3.7rem);
  547. }
  548. .scroller4{
  549. height: calc(100% - 2.84rem);
  550. }
  551. .all {
  552. height: calc(100% - 0.92rem) !important;
  553. position: relative !important;
  554. }
  555. .search-box {
  556. border-radius: 25px;
  557. padding:0.1rem;
  558. border: 1px solid #f1f1f1;
  559. font-size: 0.28rem;
  560. }
  561. .header {
  562. background-color: #fff;
  563. padding: 0.2rem;
  564. font-size: 0.28rem;
  565. margin-bottom: 0.2rem;
  566. }
  567. .search-item{
  568. padding: 0.06rem 0.1rem;
  569. background-color: #F7F8FA;
  570. color: #89919F;
  571. width: 1.2rem;
  572. text-align: center;
  573. margin-right: 0.2rem;
  574. margin-bottom: 0.2rem;
  575. border-radius: 3px;
  576. font-size: 0.3rem;
  577. }
  578. .searchActive{
  579. color: #26A2FF;
  580. background-color: #E9F0FD;
  581. }
  582. .btn{
  583. background-color: #26A2FF;
  584. color: #fff;
  585. text-align: center;
  586. height: 0.8rem;
  587. line-height: 0.8rem;
  588. border-radius: 25px;
  589. }
  590. </style>