Browse Source

chore: eslint命令修复

cuiyalong 1 year ago
parent
commit
93b791b548
100 changed files with 3623 additions and 3034 deletions
  1. 18 9
      apps/mobile/README.md
  2. 4 4
      apps/mobile/config/storybook/eventBus.js
  3. 13 2
      apps/mobile/config/storybook/preview.js
  4. 1 3
      apps/mobile/postcss.config.js
  5. 36 26
      apps/mobile/scripts/updateGitInfo.js
  6. 17 15
      apps/mobile/src/App.vue
  7. 26 23
      apps/mobile/src/api/interceptors.js
  8. 1 1
      apps/mobile/src/api/modules/authen.js
  9. 2 2
      apps/mobile/src/api/modules/bi.js
  10. 19 14
      apps/mobile/src/api/modules/bigmember.js
  11. 3 3
      apps/mobile/src/api/modules/coupon.js
  12. 1 1
      apps/mobile/src/api/modules/course.js
  13. 2 2
      apps/mobile/src/api/modules/dataSmt.js
  14. 12 7
      apps/mobile/src/api/modules/dataexport.js
  15. 4 4
      apps/mobile/src/api/modules/datareport.js
  16. 3 3
      apps/mobile/src/api/modules/ent.js
  17. 5 5
      apps/mobile/src/api/modules/entbase.js
  18. 8 8
      apps/mobile/src/api/modules/entnicheNew.js
  19. 2 2
      apps/mobile/src/api/modules/equitycode.js
  20. 12 6
      apps/mobile/src/api/modules/front.js
  21. 0 1
      apps/mobile/src/api/modules/invoice.js
  22. 1 1
      apps/mobile/src/api/modules/jyMerge.js
  23. 7 8
      apps/mobile/src/api/modules/jyPoints.js
  24. 2 2
      apps/mobile/src/api/modules/jyinfo.js
  25. 4 4
      apps/mobile/src/api/modules/keep.js
  26. 2 2
      apps/mobile/src/api/modules/leadGeneration.js
  27. 4 4
      apps/mobile/src/api/modules/marketing.js
  28. 18 18
      apps/mobile/src/api/modules/message.js
  29. 10 11
      apps/mobile/src/api/modules/mine.js
  30. 4 4
      apps/mobile/src/api/modules/order.js
  31. 25 25
      apps/mobile/src/api/modules/pay.js
  32. 8 8
      apps/mobile/src/api/modules/project.js
  33. 25 25
      apps/mobile/src/api/modules/public.js
  34. 18 14
      apps/mobile/src/api/modules/search.js
  35. 14 12
      apps/mobile/src/api/modules/subscribe.js
  36. 2 2
      apps/mobile/src/api/modules/treasureBox.js
  37. 1 1
      apps/mobile/src/api/modules/user.js
  38. 0 0
      apps/mobile/src/assets/fonts/app/iconfont.js
  39. 78 395
      apps/mobile/src/assets/js/china_area.js
  40. 4 18
      apps/mobile/src/assets/js/selector.js
  41. 0 0
      apps/mobile/src/assets/lottie/tabbar/box.json
  42. 0 0
      apps/mobile/src/assets/lottie/tabbar/home.json
  43. 0 0
      apps/mobile/src/assets/lottie/tabbar/message.json
  44. 0 0
      apps/mobile/src/assets/lottie/tabbar/mine.json
  45. 0 0
      apps/mobile/src/assets/lottie/tabbar/subscribe.json
  46. 29 18
      apps/mobile/src/components/ad/Ad.vue
  47. 16 15
      apps/mobile/src/components/ad/BaiduAd.vue
  48. 67 39
      apps/mobile/src/components/ad/InformationFlow.vue
  49. 22 17
      apps/mobile/src/components/ad/Side.vue
  50. 25 22
      apps/mobile/src/components/ad/Swipe.vue
  51. 65 45
      apps/mobile/src/components/ad/SwipeFloor.vue
  52. 20 14
      apps/mobile/src/components/ad/pop-screen/index.vue
  53. 20 7
      apps/mobile/src/components/ad/svga-support/index.vue
  54. 296 161
      apps/mobile/src/components/bid-update/BidUpdate.vue
  55. 2 2
      apps/mobile/src/components/cell/filter-cell/index.stories.js
  56. 31 27
      apps/mobile/src/components/cell/filter-cell/index.vue
  57. 11 10
      apps/mobile/src/components/common/CountDownButton.vue
  58. 19 18
      apps/mobile/src/components/common/DetailCard.vue
  59. 15 14
      apps/mobile/src/components/common/Dialog.vue
  60. 11 3
      apps/mobile/src/components/common/DropdownLayout.vue
  61. 18 14
      apps/mobile/src/components/common/PageLayout.vue
  62. 28 28
      apps/mobile/src/components/common/PageSearch.vue
  63. 6 2
      apps/mobile/src/components/common/PopupLayout.vue
  64. 68 70
      apps/mobile/src/components/common/SearchAssociate.vue
  65. 8 4
      apps/mobile/src/components/common/SpecCard.vue
  66. 45 33
      apps/mobile/src/components/common/layout.vue
  67. 199 128
      apps/mobile/src/components/coupon/CouponItem.vue
  68. 9 5
      apps/mobile/src/components/coupon/CouponList.vue
  69. 36 27
      apps/mobile/src/components/create-order/CheckEmail.vue
  70. 21 16
      apps/mobile/src/components/create-order/CheckPhone.vue
  71. 61 41
      apps/mobile/src/components/create-order/Coupon.vue
  72. 44 28
      apps/mobile/src/components/create-order/CouponList.vue
  73. 111 69
      apps/mobile/src/components/create-order/CouponListNew.vue
  74. 88 71
      apps/mobile/src/components/create-order/CouponNew.vue
  75. 36 22
      apps/mobile/src/components/create-order/LimitedBanner.vue
  76. 37 27
      apps/mobile/src/components/create-order/OrderEmail.vue
  77. 18 13
      apps/mobile/src/components/create-order/OrderPhone.vue
  78. 37 22
      apps/mobile/src/components/create-order/SpecList.vue
  79. 128 81
      apps/mobile/src/components/create-order/SubmitBar.vue
  80. 116 78
      apps/mobile/src/components/create-order/SubmitBarOld.vue
  81. 82 74
      apps/mobile/src/components/custom-report/index.vue
  82. 106 99
      apps/mobile/src/components/dataExport/popupDataexport.vue
  83. 23 30
      apps/mobile/src/components/footer-tabbar/index.vue
  84. 183 118
      apps/mobile/src/components/home/list.vue
  85. 140 115
      apps/mobile/src/components/invoice/PopupSelect.vue
  86. 5 5
      apps/mobile/src/components/invoice/popupTip.vue
  87. 23 21
      apps/mobile/src/components/invoice/radioGroup.vue
  88. 18 14
      apps/mobile/src/components/limited-countdown/index.vue
  89. 70 54
      apps/mobile/src/components/message/message-card.vue
  90. 139 85
      apps/mobile/src/components/mine/MineHeader.vue
  91. 167 146
      apps/mobile/src/components/mine/MineList.vue
  92. 212 194
      apps/mobile/src/components/mine/SignIn.vue
  93. 40 36
      apps/mobile/src/components/mine/featureMoveDialog.vue
  94. 53 43
      apps/mobile/src/components/points/TaskCardUi.vue
  95. 82 42
      apps/mobile/src/components/recommend/index.vue
  96. 43 33
      apps/mobile/src/components/search/AssociationList.vue
  97. 14 11
      apps/mobile/src/components/search/HistoryList.vue
  98. 13 9
      apps/mobile/src/components/search/Layout.vue
  99. 18 12
      apps/mobile/src/components/search/TopSearch.vue
  100. 13 7
      apps/mobile/src/components/search/bidding/filterHistoryDialog.vue

+ 18 - 9
apps/mobile/README.md

@@ -1,34 +1,38 @@
 # jy-mobile
 
 ## 待办
+
 1. 使用 swiper 替换 vue-awesome-swiper
 2. 提取 lodash
-3. 
+3.
 
 ## 移动端剑鱼项目 GitLab
 
 http://192.168.3.207:8929/efe/jy-mobile
 
-!原Gogs 项目已启用分支保护,不接受代码提交。
+!原 Gogs 项目已启用分支保护,不接受代码提交。
 
 ## 开发规范流程
-1. 注册GitLab
+
+1. 注册 GitLab
 2. 访问 jy-mobile 项目 dev1.1
 3. Fork 项目或者新建 feature/xxxx 功能分支
 4. 完成需求后通过 GitLab 申请合并需求
-5. 等待CI Lint、代码评审
-6. 通过后合入 dev1.1分支
+5. 等待 CI Lint、代码评审
+6. 通过后合入 dev1.1 分支
 
-因加入git-hook,需删除 .git/hook、node_modules重新安装依赖。
+因加入 git-hook,需删除 .git/hook、node_modules 重新安装依赖。
 
 ### 代码约束
+
 http://192.168.3.11:10081/doc-serve/page_site/standard/
 
 ### 组件预览
-http://192.168.3.11:10081/doc-serve/page_docs/
 
+http://192.168.3.11:10081/doc-serve/page_docs/
 
 ## 目录结构
+
 ```
 .
 ├── config          // UI预览工具配置
@@ -43,7 +47,7 @@ http://192.168.3.11:10081/doc-serve/page_docs/
 │   ├── components  // 项目业务组件
 │   ├── router
 │   ├── store
-│   ├── stories     // UI 预览示例    
+│   ├── stories     // UI 预览示例
 │   ├── ui          // 可提取公共UI组件
 │   ├── utils
 │   └── views
@@ -51,7 +55,7 @@ http://192.168.3.11:10081/doc-serve/page_docs/
 └── yarn.lock
 ```
 
-## UI预览结构规范
+## UI 预览结构规范
 
 ```
 ├── UI/我的组件
@@ -61,24 +65,29 @@ http://192.168.3.11:10081/doc-serve/page_docs/
 ```
 
 ## Project setup
+
 ```
 yarn install
 ```
 
 ### Compiles and hot-reloads for development
+
 ```
 yarn serve
 ```
 
 ### Compiles and minifies for production
+
 ```
 yarn build
 ```
 
 ### Lints and fixes files
+
 ```
 yarn lint
 ```
 
 ### Customize configuration
+
 See [Configuration Reference](https://cli.vuejs.org/config/).

+ 4 - 4
apps/mobile/config/storybook/eventBus.js

@@ -1,20 +1,20 @@
 class EventBus {
-  constructor () {
+  constructor() {
     this.events = {}
   }
 
-  emit (type, data) {
+  emit(type, data) {
     const callback = this.events[type]
     if (typeof callback === 'function') {
       callback(data)
     }
   }
 
-  on (type, callback) {
+  on(type, callback) {
     this.events[type] = callback
   }
 
-  clear (type) {
+  clear(type) {
     if (type) {
       delete this.events[type]
     } else {

+ 13 - 2
apps/mobile/config/storybook/preview.js

@@ -43,7 +43,18 @@ export const parameters = {
   },
   options: {
     storySort: {
-      order: ['Intro', '指令', '实例方法', '项目工具', '全局状态', '全局样式', '基础组件', '业务组件', '*', '示例']
+      order: [
+        'Intro',
+        '指令',
+        '实例方法',
+        '项目工具',
+        '全局状态',
+        '全局样式',
+        '基础组件',
+        '业务组件',
+        '*',
+        '示例'
+      ]
     }
   }
 }
@@ -54,7 +65,7 @@ export const decorators = [
     const [_, updateArgs] = useArgs()
 
     ComponentUIBus.emit(context.title, _)
-    function updateArgsCallback (callback) {
+    function updateArgsCallback(callback) {
       ComponentUIBus.on(context.title, callback)
     }
 

+ 1 - 3
apps/mobile/postcss.config.js

@@ -11,9 +11,7 @@ if (!envBook) {
       unitToConvert: 'px',
       viewportWidth: 375,
       unitPrecision: 3,
-      propList: [
-        '*'
-      ],
+      propList: ['*'],
       viewportUnit: 'vw',
       fontViewportUnit: 'vw',
       selectorBlackList: [],

+ 36 - 26
apps/mobile/scripts/updateGitInfo.js

@@ -1,42 +1,52 @@
-const { exec } = require('child_process');
-const fs = require('fs');
+const { exec } = require('child_process')
+const fs = require('fs')
 
 const getGitBranch = () => {
   return new Promise((resolve, reject) => {
-    exec('git symbolic-ref --quiet --short HEAD || git describe --all --exact-match HEAD', (error, stdout, stderr) => {
-      if (error) {
-        reject(error);
-      } else {
-        const branch = stdout.trim();
-        resolve(branch);
+    exec(
+      'git symbolic-ref --quiet --short HEAD || git describe --all --exact-match HEAD',
+      (error, stdout, stderr) => {
+        if (error) {
+          reject(error)
+        } else {
+          const branch = stdout.trim()
+          resolve(branch)
+        }
       }
-    });
-  });
-};
+    )
+  })
+}
 
 const extractVersion = (branch) => {
-  const versionRegex = /(v.*?)$/;
-  const matches = branch.match(versionRegex);
-  return matches ? matches[0] : '';
-};
+  const versionRegex = /(v.*?)$/
+  const matches = branch.match(versionRegex)
+  return matches ? matches[0] : ''
+}
 
 const updateEnvFile = (branch) => {
   try {
-    const envFilePath = '.env.production';
-    const existingContent = fs.readFileSync(envFilePath, 'utf8');
-    const updatedBranch = extractVersion(branch);
-    const updatedContent = existingContent.replace(/(VITE_APP_GIT_BRANCH=).*/, `$1'${updatedBranch}'`);
-    fs.writeFileSync(envFilePath, updatedContent);
-    console.log('Git 分支信息已更新到 .env.production 文件', branch, updatedBranch);
+    const envFilePath = '.env.production'
+    const existingContent = fs.readFileSync(envFilePath, 'utf8')
+    const updatedBranch = extractVersion(branch)
+    const updatedContent = existingContent.replace(
+      /(VITE_APP_GIT_BRANCH=).*/,
+      `$1'${updatedBranch}'`
+    )
+    fs.writeFileSync(envFilePath, updatedContent)
+    console.log(
+      'Git 分支信息已更新到 .env.production 文件',
+      branch,
+      updatedBranch
+    )
   } catch (error) {
-    console.error('更新 .env.production 文件失败:', error);
+    console.error('更新 .env.production 文件失败:', error)
   }
-};
+}
 
 getGitBranch()
   .then((branch) => {
-    updateEnvFile(branch);
+    updateEnvFile(branch)
   })
   .catch((error) => {
-    console.error('获取 Git 分支失败:', error);
-  });
+    console.error('获取 Git 分支失败:', error)
+  })

+ 17 - 15
apps/mobile/src/App.vue

@@ -2,9 +2,9 @@
   <layout class="no-select">
     <template v-slot:default>
       <!-- <transition :name="transitionName"> -->
-        <keep-alive :include="keepAliveList" :max="10">
-          <router-view class="router j-container" :class="env.platform" />
-        </keep-alive>
+      <keep-alive :include="keepAliveList" :max="10">
+        <router-view class="router j-container" :class="env.platform" />
+      </keep-alive>
       <!-- </transition> -->
     </template>
   </layout>
@@ -18,20 +18,20 @@ export default {
   components: {
     layout
   },
-  data () {
+  data() {
     return {
       env: this.$env
     }
   },
   computed: {
-    transitionName () {
+    transitionName() {
       return this.$store.state.direction
     },
-    keepAliveList () {
+    keepAliveList() {
       return this.$store.state.keepAliveList
     }
   },
-  created () {
+  created() {
     this.initKeepAlive()
     this.$router.beforeResolve((to, from, next) => {
       if (to.name) {
@@ -40,32 +40,32 @@ export default {
       next()
     })
   },
-  mounted () {
+  mounted() {
     this.addHTMLClass()
     this.bindEventsForH5()
     this.bindEventsForApp()
   },
   methods: {
-    removeLoading () {
+    removeLoading() {
       document.body.classList.remove('app-loading')
     },
-    addHTMLClass () {
+    addHTMLClass() {
       if (this.$envs.inH5) {
         // 修复h5下浏览器滑动高度变化,导致页面元素显示不全的问题
         document.querySelector('html').classList.add('h5-html')
       }
     },
-    bindEventsForH5 () {
+    bindEventsForH5() {
       if (this.$envs.inH5) {
         fixH5BackRefresh()
       }
     },
-    bindEventsForApp () {
+    bindEventsForApp() {
       if (this.$envs.inApp) {
         window.afterClickBack = this.noop
       }
     },
-    checkKeepAlive (route) {
+    checkKeepAlive(route) {
       if (route?.meta?.keepAlive) {
         this.$store.commit('keepAlive', route.name)
       }
@@ -73,7 +73,7 @@ export default {
         route.children.forEach(this.checkKeepAlive)
       }
     },
-    initKeepAlive () {
+    initKeepAlive() {
       const { routes = [] } = this.$router.options
       routes.forEach(this.checkKeepAlive)
     }
@@ -82,7 +82,9 @@ export default {
 </script>
 <style lang="scss">
 #app {
-  font-family: -apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif;
+  font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC,
+    Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei,
+    sans-serif;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
   color: #171826;

+ 26 - 23
apps/mobile/src/api/interceptors.js

@@ -10,33 +10,36 @@ if (debug) {
   console.log('[debug]当前环境:', import.meta.env.MODE)
 }
 
-service.interceptors.request.use(config => {
-  if (config?.formData) {
-    config.headers.content = 'multipart/form-data'
-  }
-  if (config?.data?.noToast) {
-    delete config?.data.noToast
-    config.noToast = true
-  }
-  // 添加时间戳禁用缓存
-  const isBeforeApi = config.url.indexOf('/jyapi/') !== -1
-  if (needAppendTime && !isBeforeApi) {
-    if (!config.params) {
-      config.params = {}
+service.interceptors.request.use(
+  (config) => {
+    if (config?.formData) {
+      config.headers.content = 'multipart/form-data'
+    }
+    if (config?.data?.noToast) {
+      delete config?.data.noToast
+      config.noToast = true
+    }
+    // 添加时间戳禁用缓存
+    const isBeforeApi = config.url.indexOf('/jyapi/') !== -1
+    if (needAppendTime && !isBeforeApi) {
+      if (!config.params) {
+        config.params = {}
+      }
+      config.params.t = Date.now()
     }
-    config.params.t = Date.now()
-  }
 
-  return config
-}, error => {
-  if (debug) {
-    console.log('[debug]请求错误:', error)
+    return config
+  },
+  (error) => {
+    if (debug) {
+      console.log('[debug]请求错误:', error)
+    }
+    return Promise.reject(error)
   }
-  return Promise.reject(error)
-})
+)
 
 service.interceptors.response.use(
-  response => {
+  (response) => {
     const res = response.data
     if (response.status === 200) {
       // 发送请求时配置 noToast 则不弹出 toast 提示
@@ -54,7 +57,7 @@ service.interceptors.response.use(
     }
     return res
   },
-  error => {
+  (error) => {
     if (debug) {
       console.log('[debug]返回数据错误:', error)
     }

+ 1 - 1
apps/mobile/src/api/modules/authen.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 
 // 机构查看-初始化
-export function getMyEntInfo (data) {
+export function getMyEntInfo(data) {
   return request({
     url: '/userCenter/ent/info',
     method: 'post',

+ 2 - 2
apps/mobile/src/api/modules/bi.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 
 // 获取已添加的信息id数组
-export function ajaxGetInfoIds () {
+export function ajaxGetInfoIds() {
   return request({
     url: '/jyapi/biService/getInfoId',
     method: 'post'
@@ -9,7 +9,7 @@ export function ajaxGetInfoIds () {
 }
 
 // 添加信息
-export function ajaxSetInfoId (data) {
+export function ajaxSetInfoId(data) {
   return request({
     url: '/jyapi/biService/addProject',
     method: 'post',

+ 19 - 14
apps/mobile/src/api/modules/bigmember.js

@@ -4,18 +4,23 @@ import qs from 'qs'
 /**
  * 获取用户信息
  */
-export function ajaxUserPower (config = {}) {
-  return request(Object.assign({
-    url: '/bigmember/use/isAdd',
-    noToast: true,
-    method: 'post'
-  }, config))
+export function ajaxUserPower(config = {}) {
+  return request(
+    Object.assign(
+      {
+        url: '/bigmember/use/isAdd',
+        noToast: true,
+        method: 'post'
+      },
+      config
+    )
+  )
 }
 
 /**
  * 获取用户大会员订阅信息
  */
-export function getUserSubscribeInfo () {
+export function getUserSubscribeInfo() {
   return request({
     url: '/bigmember/use/info',
     method: 'post'
@@ -25,7 +30,7 @@ export function getUserSubscribeInfo () {
 /**
  * 根据输入词获取采购单位名称,用于模糊搜索
  */
-export function ajaxGetBuyerAssociation (data) {
+export function ajaxGetBuyerAssociation(data) {
   data = qs.stringify(data)
   return request({
     url: '/bigmember/search/buyer/association',
@@ -37,7 +42,7 @@ export function ajaxGetBuyerAssociation (data) {
 /**
  * 根据输入词获取企业名称,用于模糊搜索
  */
-export function ajaxGetCompanyAssociation (data) {
+export function ajaxGetCompanyAssociation(data) {
   data = qs.stringify(data)
   return request({
     url: '/bigmember/search/ent/association',
@@ -49,7 +54,7 @@ export function ajaxGetCompanyAssociation (data) {
 /**
  * 附件下载,发送到邮箱
  */
-export function attachmentSendToEmail (data) {
+export function attachmentSendToEmail(data) {
   data = qs.stringify(data)
   return request({
     url: '/bigmember/attachment/email',
@@ -61,7 +66,7 @@ export function attachmentSendToEmail (data) {
 /**
  * 一键订阅、暂不订阅
  */
-export function freeUserSubscribeSearch (data) {
+export function freeUserSubscribeSearch(data) {
   data = qs.stringify(data)
   return request({
     url: '/bigmember/subscribe/freeUser/subscribeSearch',
@@ -71,7 +76,7 @@ export function freeUserSubscribeSearch (data) {
 }
 
 // 免费用户是否弹出一键订阅弹框查询
-export function freeUserNeedOneKeySubscribe () {
+export function freeUserNeedOneKeySubscribe() {
   return request({
     url: '/bigmember/subscribe/freeUser/searchSubscribe',
     method: 'get',
@@ -84,7 +89,7 @@ export function freeUserNeedOneKeySubscribe () {
 /**
  * 采购单位关注、认领(大会员)
  */
-export function bigmemberFollowAndClaim (data) {
+export function bigmemberFollowAndClaim(data) {
   return request({
     url: '/publicapply/customer/attention',
     method: 'post',
@@ -93,7 +98,7 @@ export function bigmemberFollowAndClaim (data) {
 }
 
 // 获取项目详情
-export function projectDetailApi (data) {
+export function projectDetailApi(data) {
   data = qs.stringify(data)
   return request({
     url: '/bigmember/follow/project/detail',

+ 3 - 3
apps/mobile/src/api/modules/coupon.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 查看有无赠品活动
-export function getGiftList (data) {
+export function getGiftList(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyCoupon/giveInfo',
@@ -13,7 +13,7 @@ export function getGiftList (data) {
 }
 
 // 查询当前价格产品可以使用的优惠券、自动领券
-export function showCoupons (data) {
+export function showCoupons(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyCoupon/showCoupons',
@@ -24,7 +24,7 @@ export function showCoupons (data) {
 }
 
 // 获取用户所有奖券信息
-export function getCouponsInfo (data) {
+export function getCouponsInfo(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyCoupon/getInfoByUser',

+ 1 - 1
apps/mobile/src/api/modules/course.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 查询课程详情数据
-export function getCourseDetail (data) {
+export function getCourseDetail(data) {
   data = qs.stringify(data)
   return request({
     url: '/OnlineCourses/course/curriculumDetails',

+ 2 - 2
apps/mobile/src/api/modules/dataSmt.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 
 // 获取数据超市列表信息
-export function getDataSmtList (data) {
+export function getDataSmtList(data) {
   return request({
     url: '/jyapi/publicService/List',
     method: 'post',
@@ -10,7 +10,7 @@ export function getDataSmtList (data) {
 }
 
 // 获取数据超市--产品详情页
-export function getDataSmtDetail (data) {
+export function getDataSmtDetail(data) {
   return request({
     url: '/jyapi/publicService/Detail',
     method: 'post',

+ 12 - 7
apps/mobile/src/api/modules/dataexport.js

@@ -3,28 +3,33 @@ import qs from 'qs'
 import { envs } from '@/utils/prototype/modules/platform'
 
 // 标讯搜索数据导出逻辑
-export function searchIndexDataExport (data) {
+export function searchIndexDataExport(data) {
   data = qs.stringify(data)
   return request({
-    url: envs.inWX ? '/front/wx_dataExport/searchExport' : '/jyapp/front/dataExport/searchExport',
+    url: envs.inWX
+      ? '/front/wx_dataExport/searchExport'
+      : '/jyapp/front/dataExport/searchExport',
     method: 'post',
     data
   })
 }
-export function setDontPromptAgain (data) {
+export function setDontPromptAgain(data) {
   data = qs.stringify(data)
   return request({
-    url: envs.inWX ? '/front/dataExport/setDontPromptAgain' : '/jyapp/front/dataExport/setDontPromptAgain',
+    url: envs.inWX
+      ? '/front/dataExport/setDontPromptAgain'
+      : '/jyapp/front/dataExport/setDontPromptAgain',
     method: 'post',
     data
   })
 }
-export function getDontPromptAgain (data) {
+export function getDontPromptAgain(data) {
   data = qs.stringify(data)
   return request({
-    url: envs.inWX ? '/front/dataExport/getDontPromptAgain' : '/jyapp/front/dataExport/getDontPromptAgain',
+    url: envs.inWX
+      ? '/front/dataExport/getDontPromptAgain'
+      : '/jyapp/front/dataExport/getDontPromptAgain',
     method: 'post',
     data
   })
 }
-

+ 4 - 4
apps/mobile/src/api/modules/datareport.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 查询数据报告详情
-export function getReportDetail (data) {
+export function getReportDetail(data) {
   data = qs.stringify(data)
   return request({
     url: '/datareport/api/getDetail',
@@ -12,7 +12,7 @@ export function getReportDetail (data) {
 }
 
 // 查询用户是否已经填写过邮箱或者手机号
-export function getReportUserMsg () {
+export function getReportUserMsg() {
   return request({
     url: '/datareport/api/userMsg',
     method: 'get'
@@ -20,7 +20,7 @@ export function getReportUserMsg () {
 }
 
 // 发送邮箱验证码
-export function sEmailCode (data) {
+export function sEmailCode(data) {
   data = qs.stringify(data)
   return request({
     url: '/datareport/api/sendEmailCode',
@@ -30,7 +30,7 @@ export function sEmailCode (data) {
 }
 
 // 校验邮箱验证码
-export function cEmailCode (data) {
+export function cEmailCode(data) {
   data = qs.stringify(data)
   return request({
     url: '/datareport/api/checkEmailCode',

+ 3 - 3
apps/mobile/src/api/modules/ent.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 // import qs from 'qs'
 // 获取企业列表
-export function getEntList (data) {
+export function getEntList(data) {
   // data = qs.stringify(data)
   return request({
     url: '/publicapply/identity/list',
@@ -11,7 +11,7 @@ export function getEntList (data) {
   })
 }
 // 获取公司架构信息
-export function getEntDataInfo (data) {
+export function getEntDataInfo(data) {
   return request({
     url: '/jyapi/social/entAddressBook',
     method: 'post',
@@ -20,7 +20,7 @@ export function getEntDataInfo (data) {
   })
 }
 // 获取自己企业下名称
-export function ajaxGetUserInfo (data) {
+export function ajaxGetUserInfo(data) {
   return request({
     url: '/jyapi/userCenter/ent/userInfo',
     method: 'post',

+ 5 - 5
apps/mobile/src/api/modules/entbase.js

@@ -4,7 +4,7 @@ import qs from 'qs'
 /**
  * 根据 entId 获取 企业信息
  */
-export function getEntInfo (data) {
+export function getEntInfo(data) {
   return request({
     url: '/entbase/ent/info',
     method: 'post',
@@ -15,7 +15,7 @@ export function getEntInfo (data) {
  * 查询用户当前企业信息
  * https://showdoc.jydev.jianyu360.com/web/#/16?page_id=289
  */
-export function getMySelectEntInfo () {
+export function getMySelectEntInfo() {
   return request({
     url: '/entbase/ent/entinfo',
     noToast: true,
@@ -23,7 +23,7 @@ export function getMySelectEntInfo () {
   })
 }
 
-export function selectEnt () {
+export function selectEnt() {
   return request({
     url: '/entbase/ent/mySelectent',
     method: 'get',
@@ -36,7 +36,7 @@ export function selectEnt () {
 /**
  * 查询部门下的人员信息
  */
-export function getDeptPerson (data) {
+export function getDeptPerson(data) {
   data = qs.stringify(data)
   return request({
     url: '/entbase/person/manager',
@@ -45,7 +45,7 @@ export function getDeptPerson (data) {
   })
 }
 // 根据当前权限获取部门人员数据
-export function getMypersondept (data) {
+export function getMypersondept(data) {
   return request({
     url: '/entbase/person/dept',
     method: 'get',

+ 8 - 8
apps/mobile/src/api/modules/entnicheNew.js

@@ -4,7 +4,7 @@ import qs from 'qs'
 /**
  * 获取用户商机管理权限状态数据
  */
-export function ajaxUserEntPower () {
+export function ajaxUserEntPower() {
   return request({
     url: '/entnicheNew/buy/whetherbuy',
     method: 'post'
@@ -14,7 +14,7 @@ export function ajaxUserEntPower () {
 /**
  * 获取用户收藏标签
  */
-export function ajaxGetUserKeepLabel () {
+export function ajaxGetUserKeepLabel() {
   return request({
     url: '/entnicheNew/customer/getLabel',
     method: 'post'
@@ -23,7 +23,7 @@ export function ajaxGetUserKeepLabel () {
 /**
  * 添加用户收藏标签
  */
-export function ajaxSetUserKeepLabel (data) {
+export function ajaxSetUserKeepLabel(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/bidcoll/addLabel',
@@ -34,7 +34,7 @@ export function ajaxSetUserKeepLabel (data) {
 /**
  * 采购单位关注、认领
  */
-export function ajaxFollowAndClaim (data) {
+export function ajaxFollowAndClaim(data) {
   return request({
     url: '/entnicheNew/customer/attention',
     method: 'post',
@@ -44,7 +44,7 @@ export function ajaxFollowAndClaim (data) {
 /**
  * 历史客户列表
  */
-export function ajaxHistoryCustomer (data) {
+export function ajaxHistoryCustomer(data) {
   return request({
     url: '/entnicheNew/customer/history',
     method: 'post',
@@ -54,7 +54,7 @@ export function ajaxHistoryCustomer (data) {
 /**
  * 获取业务范围(关键词)
  */
-export function ajaxBusinessScope (data) {
+export function ajaxBusinessScope(data) {
   return request({
     url: '/entnicheNew/subscribe/key/get',
     method: 'post',
@@ -64,7 +64,7 @@ export function ajaxBusinessScope (data) {
 /**
  * 商机管理认领用户-添加自定义标签
  */
-export function ajaxEntNicheKeepLabel (data) {
+export function ajaxEntNicheKeepLabel(data) {
   data = qs.stringify(data)
   return request({
     url: '/entnicheNew/customer/addLabel',
@@ -75,7 +75,7 @@ export function ajaxEntNicheKeepLabel (data) {
 /**
  * 商机管理-查看已认领的客户列表
  */
-export function ajaxClaimCustomerList (data) {
+export function ajaxClaimCustomerList(data) {
   // data = qs.stringify(data)
   return request({
     url: '/entnicheNew/customer/claimcheck',

+ 2 - 2
apps/mobile/src/api/modules/equitycode.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 权益码兑换
-export function equityexchange (data) {
+export function equityexchange(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/equityCode/exchange',
@@ -11,7 +11,7 @@ export function equityexchange (data) {
   })
 }
 // 权益码兑换列表
-export function equitylist (data) {
+export function equitylist(data) {
   return request({
     url: '/jypay/equityCode/list',
     method: 'post',

+ 12 - 6
apps/mobile/src/api/modules/front.js

@@ -3,30 +3,36 @@ import qs from 'qs'
 import { envs } from '@/utils/prototype/modules/platform'
 
 // 发送邮箱验证码
-export function sendMailCode (data) {
+export function sendMailCode(data) {
   data = qs.stringify(data)
   return request({
-    url: envs.inWX ? '/front/dataExport/sendMailVerify' : '/jyapp/front/dataExport/sendMailVerify',
+    url: envs.inWX
+      ? '/front/dataExport/sendMailVerify'
+      : '/jyapp/front/dataExport/sendMailVerify',
     method: 'POST',
     data
   })
 }
 
 // 验证邮箱验证码
-export function checkMailCode (data) {
+export function checkMailCode(data) {
   data = qs.stringify(data)
   return request({
-    url: envs.inWX ? '/front/dataExport/checkMailVerify' : '/jyapp/front/dataExport/checkMailVerify',
+    url: envs.inWX
+      ? '/front/dataExport/checkMailVerify'
+      : '/jyapp/front/dataExport/checkMailVerify',
     method: 'POST',
     data
   })
 }
 
 // 数据导出预览数据
-export function getPreview (data) {
+export function getPreview(data) {
   data = qs.stringify(data)
   return request({
-    url: envs.inWX ? '/front/wx_dataExport/getPreview' : '/jyapp/front/dataExport/getPreview',
+    url: envs.inWX
+      ? '/front/wx_dataExport/getPreview'
+      : '/jyapp/front/dataExport/getPreview',
     method: 'POST',
     noToast: true,
     data

+ 0 - 1
apps/mobile/src/api/modules/invoice.js

@@ -17,4 +17,3 @@ export function ajaxInvoiceSubmit(data) {
     data
   })
 }
-

+ 1 - 1
apps/mobile/src/api/modules/jyMerge.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 
 // 获取账号合并信息
-export function getMergeInfo () {
+export function getMergeInfo() {
   return request({
     url: '/jyMerge/usermerge/state?t=' + Date.now(),
     method: 'post'

+ 7 - 8
apps/mobile/src/api/modules/jyPoints.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 兑换剑鱼文库热门榜
-export function getDocHotList (data) {
+export function getDocHotList(data) {
   data = qs.stringify(data)
   return request({
     url: '/jydocs/activityList',
@@ -17,7 +17,7 @@ export function getDocHotList (data) {
  * @param data
  * @returns {*}
  */
-export function getPointsInfo (data) {
+export function getPointsInfo(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyintegral/getList',
@@ -27,7 +27,7 @@ export function getPointsInfo (data) {
 }
 
 // 附件下载-文件兑换、购买明细
-export function fileExchangeDetail (data) {
+export function fileExchangeDetail(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/resourcePack/exchangeCancelList',
@@ -37,7 +37,7 @@ export function fileExchangeDetail (data) {
 }
 
 // 积分查询
-export function getProductPoints (data) {
+export function getProductPoints(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyintegral/productPoints/introduction',
@@ -46,7 +46,7 @@ export function getProductPoints (data) {
   })
 }
 // 附件下载-积分兑换产品
-export function exchangePointsProduct (data) {
+export function exchangePointsProduct(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyintegral/exchange',
@@ -55,18 +55,17 @@ export function exchangePointsProduct (data) {
   })
 }
 // 获取剑鱼币任务
-export function getPointTask () {
+export function getPointTask() {
   return request({
     url: '/jyActivity/task',
     method: 'post'
   })
 }
 // 确认挑战
-export function confirmChallenge (data) {
+export function confirmChallenge(data) {
   return request({
     url: '/jyActivity/confirmChallenge',
     method: 'post',
     data
   })
 }
-

+ 2 - 2
apps/mobile/src/api/modules/jyinfo.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 
 // 供应信息详情
-export function supplyInfoDetail (data) {
+export function supplyInfoDetail(data) {
   return request({
     url: '/jyinfo/supplyInfoDetail',
     method: 'post',
@@ -10,7 +10,7 @@ export function supplyInfoDetail (data) {
 }
 
 // 供应信息详情
-export function ajaxGetSupplySearch (data) {
+export function ajaxGetSupplySearch(data) {
   return request({
     url: '/jyinfo/supplySearch',
     method: 'post',

+ 4 - 4
apps/mobile/src/api/modules/keep.js

@@ -4,7 +4,7 @@ import qs from 'qs'
 /**
  * 获取用户标讯收藏自定义标签
  */
-export function ajaxGetKeepLabels () {
+export function ajaxGetKeepLabels() {
   return request({
     url: '/publicapply/bidcoll/getLabel',
     method: 'post'
@@ -14,7 +14,7 @@ export function ajaxGetKeepLabels () {
 /**
  * 用户收藏标讯
  */
-export function ajaxSetUserKeep (data) {
+export function ajaxSetUserKeep(data) {
   return request({
     url: '/publicapply/bidcoll/action',
     method: 'post',
@@ -25,7 +25,7 @@ export function ajaxSetUserKeep (data) {
 /**
  * 收藏标讯后添加标签
  */
-export function ajaxSetDiyLabel (data) {
+export function ajaxSetDiyLabel(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/bidcoll/addLabel',
@@ -37,7 +37,7 @@ export function ajaxSetDiyLabel (data) {
 /**
  * 收藏标讯后添加标签
  */
-export function ajaxSetUserKeepLabels (data) {
+export function ajaxSetUserKeepLabels(data) {
   return request({
     url: '/publicapply/bidcoll/label',
     method: 'post',

+ 2 - 2
apps/mobile/src/api/modules/leadGeneration.js

@@ -2,7 +2,7 @@ import request from '@/api'
 import qs from 'qs'
 
 // 定制化分析报告&超前项目
-export function leadGetDate (data) {
+export function leadGetDate(data) {
   data = qs.stringify(data)
   return request({
     url: '/leadGeneration/getDate',
@@ -13,7 +13,7 @@ export function leadGetDate (data) {
 }
 
 // 定制化分析报告&超前项目 点击事件统计
-export function ajaxSetLeadGetDateRecord (data) {
+export function ajaxSetLeadGetDateRecord(data) {
   return request({
     url: '/leadGeneration/clickRecord',
     method: 'get',

+ 4 - 4
apps/mobile/src/api/modules/marketing.js

@@ -4,7 +4,7 @@ import request from '@/api'
  */
 
 // 获取服务端当前时间戳
-export function getServerInitTime () {
+export function getServerInitTime() {
   return request({
     url: '/jyapi/marketing/time/now?t=' + Date.now(),
     noToast: true,
@@ -13,7 +13,7 @@ export function getServerInitTime () {
 }
 
 // 预约
-export function appointmentAdd (data) {
+export function appointmentAdd(data) {
   return request({
     url: '/jyapi/marketing/appointment/add',
     method: 'post',
@@ -22,7 +22,7 @@ export function appointmentAdd (data) {
 }
 
 // 是否已预约
-export function getIsAppointment (data) {
+export function getIsAppointment(data) {
   return request({
     url: '/jyapi/marketing/appointment/isAppointment',
     method: 'post',
@@ -31,7 +31,7 @@ export function getIsAppointment (data) {
 }
 
 // 获取当前活动信息
-export function getActivityInfo (data) {
+export function getActivityInfo(data) {
   return request({
     url: '/jyapi/marketing/activity/activityInfo',
     method: 'post',

+ 18 - 18
apps/mobile/src/api/modules/message.js

@@ -4,7 +4,7 @@ import qs from 'qs'
 /**
  * 获取用户消息列表,用于首页展示
  */
-export function ajaxGetMessageCardList () {
+export function ajaxGetMessageCardList() {
   return request({
     url: '/jymessageCenter/latestNews',
     method: 'post'
@@ -14,7 +14,7 @@ export function ajaxGetMessageCardList () {
 /**
  * 获取用户消息未读列表条数
  */
-export function ajaxGetMessageCount () {
+export function ajaxGetMessageCount() {
   return request({
     url: '/jymessageCenter/getCount',
     method: 'get',
@@ -25,7 +25,7 @@ export function ajaxGetMessageCount () {
 /**
  * 修改用户消息阅读状态
  */
-export function ajaxSetMessageStatus (data) {
+export function ajaxSetMessageStatus(data) {
   data = qs.stringify(data)
   return request({
     url: '/jymessageCenter/markRead',
@@ -37,7 +37,7 @@ export function ajaxSetMessageStatus (data) {
 /**
  * 消息列表
  */
-export function ajaxGetMessageList (data) {
+export function ajaxGetMessageList(data) {
   data = qs.stringify(data)
   return request({
     url: '/jymessageCenter/classAndNew',
@@ -49,7 +49,7 @@ export function ajaxGetMessageList (data) {
 /**
  * 获取私信
  */
-export function ajaxGetPrivateLetter (data) {
+export function ajaxGetPrivateLetter(data) {
   return request({
     url: '/jyapi/message/messageCount',
     method: 'post',
@@ -61,7 +61,7 @@ export function ajaxGetPrivateLetter (data) {
 /**
  * 获取置顶消息
  */
-export function ajaxGetLastMessage (data) {
+export function ajaxGetLastMessage(data) {
   data = qs.stringify(data)
   return request({
     url: '/jymessageCenter/lastMessage',
@@ -73,7 +73,7 @@ export function ajaxGetLastMessage (data) {
 /**
  * 消息点击
  */
-export function ajaxClickMessage (data) {
+export function ajaxClickMessage(data) {
   return request({
     url: '/jymessageCenter/clickMessage',
     method: 'post',
@@ -84,7 +84,7 @@ export function ajaxClickMessage (data) {
 /**
  * 私信
  */
-export function ajaxMsgUserList (data) {
+export function ajaxMsgUserList(data) {
   return request({
     url: '/jyapi/message/userList',
     method: 'post',
@@ -95,7 +95,7 @@ export function ajaxMsgUserList (data) {
 /**
  * 消息详情列表
  */
-export function ajaxMsgDetailList (data) {
+export function ajaxMsgDetailList(data) {
   data = qs.stringify(data)
   return request({
     url: '/jymessageCenter/messageList',
@@ -107,7 +107,7 @@ export function ajaxMsgDetailList (data) {
 /**
  * 设置已读
  */
-export function ajaxSetReadStatus (data) {
+export function ajaxSetReadStatus(data) {
   data = qs.stringify(data)
   return request({
     url: '/jymessageCenter/setReadStatus',
@@ -119,7 +119,7 @@ export function ajaxSetReadStatus (data) {
 /**
  * appClick
  */
-export function ajaxAppClickMessage (data) {
+export function ajaxAppClickMessage(data) {
   data = qs.stringify(data)
   return request({
     url: '/jymessageCenter/appClickMessage',
@@ -131,7 +131,7 @@ export function ajaxAppClickMessage (data) {
 /**
  * 获取消息列表
  */
-export function ajaxMessageList (data) {
+export function ajaxMessageList(data) {
   // data = qs.stringify(data)
   return request({
     url: '/jyapi/messageCenter/MessageList',
@@ -143,7 +143,7 @@ export function ajaxMessageList (data) {
 /**
  * 首页、工作桌面未读消息、未读消息数量
  */
-export function ajaxUnreadMessages (data) {
+export function ajaxUnreadMessages(data) {
   // data = qs.stringify(data)
   return request({
     url: '/jyapi/messageCenter/unreadMessages',
@@ -155,7 +155,7 @@ export function ajaxUnreadMessages (data) {
 /**
  * 一键清空未读消息
  */
-export function ajaxClearUnreadMsg (data) {
+export function ajaxClearUnreadMsg(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyapi/messageCenter/ClearUnreadMsg',
@@ -167,7 +167,7 @@ export function ajaxClearUnreadMsg (data) {
 /**
  * 获取消息分类
  */
-export function ajaxGetMsgType (data) {
+export function ajaxGetMsgType(data) {
   // data = qs.stringify(data)
   return request({
     url: '/jyapi/messageCenter/getMsgType',
@@ -179,7 +179,7 @@ export function ajaxGetMsgType (data) {
 /**
  * 点击查看消息消息状态修改成已读
  */
-export function ajaxMarkRead (data) {
+export function ajaxMarkRead(data) {
   // data = qs.stringify(data)
   return request({
     url: '/jyapi/messageCenter/markRead',
@@ -191,7 +191,7 @@ export function ajaxMarkRead (data) {
 /**
  * 查看消息详情
  */
-export function ajaxMessageDetail (data) {
+export function ajaxMessageDetail(data) {
   // data = qs.stringify(data)
   return request({
     url: '/jyapi/messageCenter/messageDetail',
@@ -203,7 +203,7 @@ export function ajaxMessageDetail (data) {
 /**
  * 消息查看记录
  */
-export function ajaxMessageOpenLog (data) {
+export function ajaxMessageOpenLog(data) {
   // data = qs.stringify(data)
   return request({
     url: '/jyapi/messageCenter/msgOpenLog',

+ 10 - 11
apps/mobile/src/api/modules/mine.js

@@ -5,7 +5,7 @@ import qs from 'qs'
  *获取需要合并的账户信息
  * @returns {AxiosPromise}
  */
-export function getAccountMergeInfo () {
+export function getAccountMergeInfo() {
   return request({
     url: '/jyMerge/userMsg/query',
     method: 'get'
@@ -16,7 +16,7 @@ export function getAccountMergeInfo () {
  * 获取需要积分信息
  * @returns {AxiosPromise}
  */
-export function getPointsInfo (data) {
+export function getPointsInfo(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyintegral/getList',
@@ -29,7 +29,7 @@ export function getPointsInfo (data) {
  * 获取是否需要展示搬家提醒等
  * @returns {AxiosPromise}
  */
-export function ajaxGetTipInfo (data) {
+export function ajaxGetTipInfo(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/userbase/tipInfo',
@@ -42,7 +42,7 @@ export function ajaxGetTipInfo (data) {
  * 更新积分和签到天数
  * @returns {AxiosPromise}
  */
-export function updatePoints (data) {
+export function updatePoints(data) {
   data = qs.stringify(data)
   return request({
     url: '/jyintegral/toUpdate',
@@ -55,7 +55,7 @@ export function updatePoints (data) {
  * 用户是否需要搬家提醒
  * @returns {AxiosPromise}
  */
-export function getMoveDialog (data) {
+export function getMoveDialog(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/userbase/tipInfo',
@@ -68,7 +68,7 @@ export function getMoveDialog (data) {
  * 获取身份列表
  * @returns {AxiosPromise}
  */
-export function getUserIdentity () {
+export function getUserIdentity() {
   return request({
     url: '/publicapply/identity/list?t=' + Date.now(),
     method: 'post'
@@ -79,7 +79,7 @@ export function getUserIdentity () {
  * 切换当前用户身份
  * @returns {AxiosPromise}
  */
-export function changeUserIdentity (data) {
+export function changeUserIdentity(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/identity/switch',
@@ -92,7 +92,7 @@ export function changeUserIdentity (data) {
  * 是否是剑鱼伙伴??
  * @returns {AxiosPromise}
  */
-export function distributionIsPartner () {
+export function distributionIsPartner() {
   return request({
     url: '/distribution/partner/isPartner',
     method: 'post'
@@ -103,19 +103,18 @@ export function distributionIsPartner () {
  * 获取用户公司信息
  * @returns {AxiosPromise}
  */
-export function getMineCompany () {
+export function getMineCompany() {
   return request({
     url: '/publicapply/identity/maintenance/detail',
     method: 'post'
   })
 }
 
-
 /**
  * 编辑用户公司信息
  * @returns {AxiosPromise}
  */
-export function editMineCompany (data) {
+export function editMineCompany(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/identity/maintenance/edit',

+ 4 - 4
apps/mobile/src/api/modules/order.js

@@ -2,7 +2,7 @@
 import request from '@/api'
 
 // 根据商品ID、扩展等参数获取商品规格信息
-export function ajaxGetProductInfo (data) {
+export function ajaxGetProductInfo(data) {
   return request({
     url: '/jypay/commodity/detail',
     method: 'post',
@@ -11,7 +11,7 @@ export function ajaxGetProductInfo (data) {
 }
 
 // 根据商品ID、规格等参数获取商品优惠信息
-export function ajaxGetProductOffers (data) {
+export function ajaxGetProductOffers(data) {
   return request({
     url: '/jypay/commodity/couponInfo',
     method: 'post',
@@ -20,7 +20,7 @@ export function ajaxGetProductOffers (data) {
 }
 
 // 根据商品ID、规格、优惠等参数获取商品订单金额信息
-export function ajaxGetProductOrderAmount (data) {
+export function ajaxGetProductOrderAmount(data) {
   return request({
     url: '/jypay/commodity/price',
     method: 'post',
@@ -28,7 +28,7 @@ export function ajaxGetProductOrderAmount (data) {
   })
 }
 // 根据商品ID、规格、优惠等参数获取商品订单金额信息
-export function ajaxSubmitCreatedProductOrder (data) {
+export function ajaxSubmitCreatedProductOrder(data) {
   return request({
     url: '/jypay/common/createorder',
     method: 'post',

+ 25 - 25
apps/mobile/src/api/modules/pay.js

@@ -1,13 +1,13 @@
 import request from '@/api'
 import qs from 'qs'
-export function screenList () {
+export function screenList() {
   return request({
     url: '/subscribepay/dataExportPack/screenList',
     method: 'get'
   })
 }
 
-export function screenDelete (data) {
+export function screenDelete(data) {
   return request({
     url: '/subscribepay/dataExportPack/screenDelete',
     method: 'POST',
@@ -15,7 +15,7 @@ export function screenDelete (data) {
   })
 }
 // 获取超级订阅价格表
-export function getSVIPGoodsPrice () {
+export function getSVIPGoodsPrice() {
   return request({
     url: '/subscribepay/vipsubscribe/getPrice',
     method: 'POST'
@@ -23,7 +23,7 @@ export function getSVIPGoodsPrice () {
 }
 
 // 获取超级订阅价格
-export function getSVIPSelectPrice (data) {
+export function getSVIPSelectPrice(data) {
   data = qs.stringify(data)
   return request({
     url: '/subscribepay/vipsubscribe/getSelectPrice',
@@ -33,14 +33,14 @@ export function getSVIPSelectPrice (data) {
 }
 
 // 获取用户超级订阅购买信息
-export function getSVIPBuyInfo () {
+export function getSVIPBuyInfo() {
   return request({
     url: '/subscribepay/vipsubscribe/getSubBuyMsg',
     method: 'POST'
   })
 }
 
-export function getDataExportPrice () {
+export function getDataExportPrice() {
   return request({
     url: '/jypay/dataexport/getPrice',
     method: 'post'
@@ -48,7 +48,7 @@ export function getDataExportPrice () {
 }
 
 // 获取用户手机号邮箱等信息
-export function getAccountInfo () {
+export function getAccountInfo() {
   return request({
     url: '/jypay/user/getAccountInfo',
     method: 'post',
@@ -57,7 +57,7 @@ export function getAccountInfo () {
 }
 
 // 获取用户手机号邮箱等信息
-export function getUserID () {
+export function getUserID() {
   return request({
     url: '/jypay/user/getSimpleData',
     noToast: true,
@@ -66,7 +66,7 @@ export function getUserID () {
 }
 
 // 获取省份订阅包价格信息
-export function getAreaPackGoodsPrice () {
+export function getAreaPackGoodsPrice() {
   return request({
     url: '/jypay/areaPack/price',
     method: 'post'
@@ -74,7 +74,7 @@ export function getAreaPackGoodsPrice () {
 }
 
 // 获取数据流量包价格信息
-export function getDataPackGoodsPrice () {
+export function getDataPackGoodsPrice() {
   return request({
     url: '/subscribepay/dataExportPack/goodsList',
     method: 'post'
@@ -82,7 +82,7 @@ export function getDataPackGoodsPrice () {
 }
 
 // 获取资源包价格信息
-export function getSourcePackGoodsPrice (data) {
+export function getSourcePackGoodsPrice(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/resourcePack/price',
@@ -92,7 +92,7 @@ export function getSourcePackGoodsPrice (data) {
 }
 
 // 获取大会员价格信息
-export function getBigMemberGoodsPrice (data) {
+export function getBigMemberGoodsPrice(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/bigmember/price',
@@ -102,7 +102,7 @@ export function getBigMemberGoodsPrice (data) {
 }
 
 // 获取数据流量包剩余信息
-export function getDataPackUsage () {
+export function getDataPackUsage() {
   return request({
     url: '/subscribepay/dataExportPack/account',
     method: 'post'
@@ -110,7 +110,7 @@ export function getDataPackUsage () {
 }
 
 // 获取数据导出筛选条数
-export function getDataExportFilterInfo (data) {
+export function getDataExportFilterInfo(data) {
   data = qs.stringify(data)
   return request({
     url: '/subscribepay/dataExportPack/statistics',
@@ -120,7 +120,7 @@ export function getDataExportFilterInfo (data) {
 }
 
 // 创建订单接口
-export function createOrderApi (data) {
+export function createOrderApi(data) {
   return request({
     url: '/jypay/common/createorder',
     method: 'POST',
@@ -130,7 +130,7 @@ export function createOrderApi (data) {
 
 // 数据流量包扣除
 // https://showdoc.jydev.jianyu360.com/web/#/49?page_id=743
-export function packPayApi (data) {
+export function packPayApi(data) {
   data = qs.stringify(data)
   return request({
     url: '/subscribepay/dataExportPack/packPay',
@@ -142,7 +142,7 @@ export function packPayApi (data) {
 /**
  * 附件下载资源包扣除
  */
-export function getConsumePack (data) {
+export function getConsumePack(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/resourcePack/consumePack',
@@ -154,7 +154,7 @@ export function getConsumePack (data) {
 /**
  * 查询周报月报未读条数以及是否需要弹窗提示
  */
-export function checkDataReportTip (data) {
+export function checkDataReportTip(data) {
   data = qs.stringify(data)
   return request({
     url: '/subscribepay/report/tip',
@@ -169,7 +169,7 @@ export function checkDataReportTip (data) {
 /**
  * 查询是否有周报月报数据
  */
-export function checkHasReportData (params) {
+export function checkHasReportData(params) {
   return request({
     url: '/subscribepay/report/starttime',
     method: 'POST',
@@ -180,7 +180,7 @@ export function checkHasReportData (params) {
 /**
  * 查询是否有周报月报弹窗关闭前请求
  */
-export function dataReportTipClose (data) {
+export function dataReportTipClose(data) {
   data = qs.stringify(data)
   return request({
     url: '/subscribepay/report/tipover',
@@ -195,7 +195,7 @@ export function dataReportTipClose (data) {
 /**
  * 微信js-sdk注册
  */
-export function getWxSdkSign (data) {
+export function getWxSdkSign(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/wx/getwxSdkSign',
@@ -210,7 +210,7 @@ export function getWxSdkSign (data) {
  * @param data
  * @returns {AxiosPromise}
  */
-export function getCommodityDetail (data) {
+export function getCommodityDetail(data) {
   return request({
     url: '/jypay/commodity/detail',
     method: 'post',
@@ -223,7 +223,7 @@ export function getCommodityDetail (data) {
  * @param data
  * @returns {AxiosPromise}
  */
-export function getOrderPrice (data) {
+export function getOrderPrice(data) {
   return request({
     url: '/jypay/commodity/price',
     method: 'post',
@@ -236,7 +236,7 @@ export function getOrderPrice (data) {
  * @param data
  * @returns {AxiosPromise}
  */
-export function getCommodityCouponInfo (data) {
+export function getCommodityCouponInfo(data) {
   return request({
     url: '/jypay/commodity/couponInfo',
     method: 'post',
@@ -246,7 +246,7 @@ export function getCommodityCouponInfo (data) {
 
 // 超级订阅购买获取续费周期
 // https://yapi.jydev.jianyu360.com/project/63/interface/api/1911
-export function getEffectiveTime (data) {
+export function getEffectiveTime(data) {
   data = qs.stringify(data)
   return request({
     url: '/subscribepay/vipsubscribe/effectiveTime',

+ 8 - 8
apps/mobile/src/api/modules/project.js

@@ -1,6 +1,6 @@
 import request from '@/api'
 
-export function participateRecords (data) {
+export function participateRecords(data) {
   return request({
     url: '/jyapi/jybx/core/participate/records',
     method: 'post',
@@ -13,7 +13,7 @@ export function participateRecords (data) {
  * @param {*} data: { ProjectId: '' } 非必须
  * @returns
  */
-export function getEntPersonsForParticipate (data) {
+export function getEntPersonsForParticipate(data) {
   return request({
     url: '/jyapi/jybx/core/participate/persons',
     method: 'post',
@@ -27,7 +27,7 @@ export function getEntPersonsForParticipate (data) {
  * @param data
  * @returns {*}
  */
-export function getParticipateList (action = 'mine', data) {
+export function getParticipateList(action = 'mine', data) {
   return request({
     url: `/jyapi/jybx/core/participate/${action}/list`,
     method: 'post',
@@ -44,7 +44,7 @@ export function getParticipateList (action = 'mine', data) {
  * @param data
  * @returns {*}
  */
-export function projectParticipate (action = 'in', data) {
+export function projectParticipate(action = 'in', data) {
   return request({
     url: `/jyapi/jybx/core/participate/${action}/info`,
     method: 'post',
@@ -53,7 +53,7 @@ export function projectParticipate (action = 'in', data) {
 }
 
 // (管理员)基础管理-设置企业基本配置
-export function setEntBaseConfig (data) {
+export function setEntBaseConfig(data) {
   return request({
     url: '/jyapi/jybx/core/participate/setUpInfo',
     method: 'post',
@@ -61,7 +61,7 @@ export function setEntBaseConfig (data) {
   })
 }
 // 订阅推送列表参标统计
-export function pushStatistics (data) {
+export function pushStatistics(data) {
   return request({
     url: '/jyapi/jybx/core/statistics/pushStatistics',
     method: 'post',
@@ -69,7 +69,7 @@ export function pushStatistics (data) {
   })
 }
 // 参标项目汇总统计
-export function projectStatistics (data) {
+export function projectStatistics(data) {
   return request({
     url: '/jyapi/jybx/core/statistics/projectStatistics',
     method: 'post',
@@ -78,7 +78,7 @@ export function projectStatistics (data) {
 }
 
 // 参标项目明细统计
-export function projectDetailStatistics (data) {
+export function projectDetailStatistics(data) {
   return request({
     url: '/jyapi/jybx/core/statistics/projectDetails',
     method: 'post',

+ 25 - 25
apps/mobile/src/api/modules/public.js

@@ -1,7 +1,7 @@
 import request from '@/api'
 import qs from 'qs'
 
-export function userVipSwitchState (data) {
+export function userVipSwitchState(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/subscribe/vipSwitch',
@@ -12,7 +12,7 @@ export function userVipSwitchState (data) {
 }
 
 // 获取免费订阅信息
-export function getFreeSubscribeInfo () {
+export function getFreeSubscribeInfo() {
   return request({
     url: '/publicapply/free/subscribe',
     method: 'post'
@@ -20,7 +20,7 @@ export function getFreeSubscribeInfo () {
 }
 
 // 获取数据导出信息
-export function getDataExportInfo (data) {
+export function getDataExportInfo(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/dataexport/payPageParams',
@@ -30,7 +30,7 @@ export function getDataExportInfo (data) {
 }
 
 // 广告获取
-export function ajaxGetAD (data) {
+export function ajaxGetAD(data) {
   return request({
     url: '/publicapply/free/getJyAdList',
     method: 'post',
@@ -39,7 +39,7 @@ export function ajaxGetAD (data) {
 }
 
 // 新用户广告获取
-export function ajaxGetNewUserAD (data) {
+export function ajaxGetNewUserAD(data) {
   return request({
     url: '/publicapply/free/newUserGroup/getDialog',
     method: 'get',
@@ -48,7 +48,7 @@ export function ajaxGetNewUserAD (data) {
 }
 
 // 新用户广告已读上报接口 只显示一次
-export function ajaxSetNewUserADRead (data) {
+export function ajaxSetNewUserADRead(data) {
   return request({
     url: '/publicapply/free/newUserGroup/readDialog',
     method: 'get',
@@ -61,7 +61,7 @@ export function ajaxSetNewUserADRead (data) {
  * @param data
  * @returns {*}
  */
-export function ajaxGetIndexList (data) {
+export function ajaxGetIndexList(data) {
   return request({
     url: '/jyapi/jybx/base/newest',
     method: 'post',
@@ -74,7 +74,7 @@ export function ajaxGetIndexList (data) {
  * @param data
  * @returns {*}
  */
-export function ajaxCanBiaoStatus (data) {
+export function ajaxCanBiaoStatus(data) {
   return request({
     url: '/jyapi/jybx/core/participate/show',
     method: 'post',
@@ -93,7 +93,7 @@ export function ajaxCanBiaoStatus (data) {
  *  参标|终止参标:bidIds和projectIds 必传一个
  * @returns {*}
  */
-export function ajaxCanBiaoAction (action, data) {
+export function ajaxCanBiaoAction(action, data) {
   return request({
     url: `/jyapi/jybx/core/participate/${action}/info`,
     method: 'post',
@@ -102,7 +102,7 @@ export function ajaxCanBiaoAction (action, data) {
 }
 
 // 更新投标状态
-export function updateBidStatus (data) {
+export function updateBidStatus(data) {
   return request({
     url: '/jyapi/jybx/core/participate/updateBidStatus',
     method: 'post',
@@ -111,7 +111,7 @@ export function updateBidStatus (data) {
 }
 
 // 获取投标项目阶段选项
-export function setUpInfo (data) {
+export function setUpInfo(data) {
   return request({
     url: '/jyapi/jybx/core/participate/setUpInfo',
     method: 'post',
@@ -120,7 +120,7 @@ export function setUpInfo (data) {
 }
 
 // 获取参标信息内容
-export function getCanBiaoContent (data) {
+export function getCanBiaoContent(data) {
   return request({
     url: '/jyapi/jybx/core/participate/content',
     method: 'post',
@@ -131,7 +131,7 @@ export function getCanBiaoContent (data) {
 /**
  * 企业搜索,用于企业搜索单元格列表
  */
-export function getEntCellList (data) {
+export function getEntCellList(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/enterpriseSearch/doQuery',
@@ -143,7 +143,7 @@ export function getEntCellList (data) {
 /**
  * 添加订阅关键词
  */
-export function setUserSubInfo (data) {
+export function setUserSubInfo(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/subscribe/setUserInfo',
@@ -155,7 +155,7 @@ export function setUserSubInfo (data) {
 /**
  * 是否留资
  */
-export function getLeaveInfoFlag (data) {
+export function getLeaveInfoFlag(data) {
   data = qs.stringify(data)
   return request({
     url: '/salesLeads/retainedCapital',
@@ -167,7 +167,7 @@ export function getLeaveInfoFlag (data) {
 /**
  * 是否留资
  */
-export function setLeaveInfo (data) {
+export function setLeaveInfo(data) {
   return request({
     url: '/salesLeads/collectInfo',
     method: 'post',
@@ -178,7 +178,7 @@ export function setLeaveInfo (data) {
 /**
  * 获取用户信息、获取用户是否是(老用户专享权限-搜索范围中的中标企业搜索权限)
  */
-export function getBidColPower () {
+export function getBidColPower() {
   return request({
     url: '/publicapply/bidcoll/power',
     method: 'post',
@@ -187,7 +187,7 @@ export function getBidColPower () {
 }
 
 // 获取用户留资消息。
-export function ajaxGetIsNewUerSales (data) {
+export function ajaxGetIsNewUerSales(data) {
   return request({
     url: '/salesLeads/appIsNewUerSales',
     method: 'post',
@@ -196,7 +196,7 @@ export function ajaxGetIsNewUerSales (data) {
 }
 
 // 跳过 提交新用户留资。
-export function ajaxGetappNewUerSales (data) {
+export function ajaxGetappNewUerSales(data) {
   return request({
     url: '/salesLeads/appNewUerSales',
     method: 'post',
@@ -207,7 +207,7 @@ export function ajaxGetappNewUerSales (data) {
 /**
  * 订阅页面省份订阅包提示
  */
-export function getSubscribePageAreaPackTip () {
+export function getSubscribePageAreaPackTip() {
   return request({
     url: '/publicapply/free/areapack/tip',
     method: 'post'
@@ -217,7 +217,7 @@ export function getSubscribePageAreaPackTip () {
 /**
  * 订阅页面省份订阅包提示关闭
  */
-export function setSubscribePageAreaPackTipClose () {
+export function setSubscribePageAreaPackTipClose() {
   return request({
     url: '/publicapply/free/areapack/update',
     method: 'post'
@@ -227,7 +227,7 @@ export function setSubscribePageAreaPackTipClose () {
 /**
  * 百度广告曝光接口
  */
-export function adLeagueExposure (data) {
+export function adLeagueExposure(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/adLeague/exposure',
@@ -239,7 +239,7 @@ export function adLeagueExposure (data) {
 /**
  * 百度广告点击接口
  */
-export function adLeagueClick (data) {
+export function adLeagueClick(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/adLeague/click',
@@ -249,7 +249,7 @@ export function adLeagueClick (data) {
 }
 
 // 获取公司联想
-export function getCompanyAssociation (data) {
+export function getCompanyAssociation(data) {
   data = qs.stringify(data)
   return request({
     url: '/jypay/user/company/association',
@@ -259,7 +259,7 @@ export function getCompanyAssociation (data) {
 }
 
 // 获取活动配置信息
-export function getActivityConfig (data) {
+export function getActivityConfig(data) {
   data = qs.stringify(data)
   return request({
     url: '/publicapply/activity/day/info',

+ 18 - 14
apps/mobile/src/api/modules/search.js

@@ -3,16 +3,18 @@ import { envs } from '@/utils/prototype/modules/platform'
 import qs from 'qs'
 
 // 删除/批量删除标讯搜索历史
-export function ajaxRemoveBiddingSearchHistory (data) {
+export function ajaxRemoveBiddingSearchHistory(data) {
   return request({
-    url: envs.inWX ? '/swordfish/delWxHistorySearch' : '/jyapp/swordfish/delWxHistorySearch',
+    url: envs.inWX
+      ? '/swordfish/delWxHistorySearch'
+      : '/jyapp/swordfish/delWxHistorySearch',
     method: 'post',
     data
   })
 }
 
 // 标讯搜索
-export function getBiddingSearchList (data, type = 'fType') {
+export function getBiddingSearchList(data, type = 'fType') {
   return request({
     url: `/jyapi/jybx/core/${type}/searchList`,
     method: 'post',
@@ -21,7 +23,7 @@ export function getBiddingSearchList (data, type = 'fType') {
   })
 }
 // 标讯搜索
-export function getBiddingSearchListOfNoLogin (data) {
+export function getBiddingSearchListOfNoLogin(data) {
   return request({
     url: `/jyapi/jybx/core/nologin/search`,
     method: 'post',
@@ -31,7 +33,7 @@ export function getBiddingSearchListOfNoLogin (data) {
 }
 
 // 获取已存筛选列表
-export function getBiddingFilterList () {
+export function getBiddingFilterList() {
   return request({
     url: '/jyapi/jybx/base/showSearchScreen',
     method: 'post',
@@ -40,7 +42,7 @@ export function getBiddingFilterList () {
 }
 
 // 删除/批量删除已存筛选
-export function deleteBiddingFilter (data) {
+export function deleteBiddingFilter(data) {
   return request({
     url: '/jyapi/jybx/base/delSearchScreen',
     method: 'post',
@@ -49,7 +51,7 @@ export function deleteBiddingFilter (data) {
 }
 
 // 检查已存筛选是否pass
-export function checkBiddingFilterPass (data) {
+export function checkBiddingFilterPass(data) {
   return request({
     url: '/jyapi/jybx/base/checkSearchScreen',
     method: 'post',
@@ -58,7 +60,7 @@ export function checkBiddingFilterPass (data) {
 }
 
 // 添加筛选条件
-export function addBiddingFilter (data) {
+export function addBiddingFilter(data) {
   return request({
     url: '/jyapi/jybx/base/addSearchScreen',
     method: 'post',
@@ -70,9 +72,11 @@ export function addBiddingFilter (data) {
  * 查询用户标讯搜索历史词
  * @returns Promise
  */
-export function getBiddingSearchHistory () {
+export function getBiddingSearchHistory() {
   return request({
-    url: envs.inWX ? '/jylab/mainSearch/getHK' : '/jyapp/jylab/mainSearch/getHK',
+    url: envs.inWX
+      ? '/jylab/mainSearch/getHK'
+      : '/jyapp/jylab/mainSearch/getHK',
     method: 'post',
     query: {
       t: Date.now()
@@ -84,7 +88,7 @@ export function getBiddingSearchHistory () {
  * 商机管理 获取采购单位信息 为新增接口(相比老接口优化了聚合语句,附带了关注和认领状态查询结果
  * fType:免费用户,pType:付费用户,vType:超级订阅用户,mType:大会员用户,eType:商机管理用户
  */
-export function getManageBuyerList (data, userType = 'eType') {
+export function getManageBuyerList(data, userType = 'eType') {
   return request({
     url: `/jyapi/jybx/buyer/${userType}/buyerList`,
     method: 'post',
@@ -97,7 +101,7 @@ export function getManageBuyerList (data, userType = 'eType') {
  * @param data{buyer}
  * @returns {*}
  */
-export function getBuyerSupplyInfo (data) {
+export function getBuyerSupplyInfo(data) {
   return request({
     url: '/jyapi/jybx/buyer/supply/info',
     method: 'post',
@@ -110,7 +114,7 @@ export function getBuyerSupplyInfo (data) {
  * @param data
  * @returns {*}
  */
-export function ajaxGetSearchWinnerNameList (data) {
+export function ajaxGetSearchWinnerNameList(data) {
   data = qs.stringify(data)
   return request({
     url: '/jylab/entsesearch/recList',
@@ -124,7 +128,7 @@ export function ajaxGetSearchWinnerNameList (data) {
  * @param data
  * @returns {*}
  */
-export function ajaxGetSearchWinnerList (data) {
+export function ajaxGetSearchWinnerList(data) {
   data = qs.stringify(data)
   return request({
     url: '/jylab/entsesearch/proList',

+ 14 - 12
apps/mobile/src/api/modules/subscribe.js

@@ -4,7 +4,7 @@ import { envs } from '@/utils/prototype/modules/platform'
 
 // 获取用户订阅信息
 // https://yapi.jydev.jianyu360.com/project/63/interface/api/191
-export function getUserSubscribeList (type = 'fType', data) {
+export function getUserSubscribeList(type = 'fType', data) {
   // fType免费用户  vType超级订阅用户  mType大会员用户  eType商机管理用户
   return request({
     url: `/jyapi/jybx/subscribe/${type}/list`,
@@ -16,7 +16,7 @@ export function getUserSubscribeList (type = 'fType', data) {
 
 // 获取用户订阅信息其他额外的信息
 // https://yapi.jydev.jianyu360.com/project/63/interface/api/203
-export function getUserSubscribeSomeInfo (type = 'fType') {
+export function getUserSubscribeSomeInfo(type = 'fType') {
   return request({
     url: `/jyapi/jybx/subscribe/${type}/someInfo`,
     method: 'post',
@@ -26,7 +26,7 @@ export function getUserSubscribeSomeInfo (type = 'fType') {
 
 // 获取用户订阅筛选关键词
 // 返回内容中,合并了企业订阅的关键词
-export function getUserSubscribeKeywords (type = 'fType', data) {
+export function getUserSubscribeKeywords(type = 'fType', data) {
   data = qs.stringify(data)
   return request({
     url: `/jyapi/jybx/subscribe/${type}/getKey`,
@@ -37,7 +37,7 @@ export function getUserSubscribeKeywords (type = 'fType', data) {
 }
 
 // 推送数据浏览状态修改
-export function setUserSubscribeListVisited (type = 'fType', data) {
+export function setUserSubscribeListVisited(type = 'fType', data) {
   data = qs.stringify(data)
   return request({
     url: `/jyapi/jybx/subscribe/${type}/setRead`,
@@ -48,17 +48,19 @@ export function setUserSubscribeListVisited (type = 'fType', data) {
 }
 
 // 免费用户设置订阅关键词
-export function freeSubscribeKeys (data) {
+export function freeSubscribeKeys(data) {
   data = qs.stringify(data)
   return request({
-    url: envs.inWX ? '/member/swordfish/ajaxReq' : '/jyapp/member/swordfish/ajaxReq',
+    url: envs.inWX
+      ? '/member/swordfish/ajaxReq'
+      : '/jyapp/member/swordfish/ajaxReq',
     method: 'post',
     data
   })
 }
 
 // 企业订阅接收人员获取
-export function getDistributorPerson (type = 'fType', data) {
+export function getDistributorPerson(type = 'fType', data) {
   // data = qs.stringify(data)
   return request({
     url: `/jyapi/jybx/subscribe/${type}/distributor`,
@@ -69,7 +71,7 @@ export function getDistributorPerson (type = 'fType', data) {
 }
 
 // 订阅页面数据导出接口
-export function getPushListDataExportId (type = 'fType', data) {
+export function getPushListDataExportId(type = 'fType', data) {
   return request({
     url: `/jyapi/jybx/subscribe/${type}/byPushHistory`,
     method: 'post',
@@ -79,7 +81,7 @@ export function getPushListDataExportId (type = 'fType', data) {
 
 // 推送设置接口
 // 用户信息获取
-export function getUser (data) {
+export function getUser(data) {
   return request({
     url: '/jyapi//jybx/subscribe/getUser',
     method: 'post',
@@ -88,7 +90,7 @@ export function getUser (data) {
 }
 
 // 用户信息设置
-export function setUser (data) {
+export function setUser(data) {
   return request({
     url: '/jyapi//jybx/subscribe/setUser',
     method: 'post',
@@ -97,7 +99,7 @@ export function setUser (data) {
 }
 
 // 推送设置获取
-export function getPushSet (data) {
+export function getPushSet(data) {
   return request({
     url: '/jyapi/jybx/subscribe/getPushSet',
     method: 'post',
@@ -106,7 +108,7 @@ export function getPushSet (data) {
 }
 
 // 推送设置修改
-export function setPushSet (data) {
+export function setPushSet(data) {
   return request({
     url: '/jyapi/jybx/subscribe/setPushSet',
     method: 'post',

+ 2 - 2
apps/mobile/src/api/modules/treasureBox.js

@@ -13,7 +13,7 @@ const actionModeMap = {
   list: 'commonlyList',
   mode: 'menuMode'
 }
-export function workspaceCommonUse (type, data) {
+export function workspaceCommonUse(type, data) {
   const actionMode = actionModeMap[type]
   if (!actionMode) {
     return console.warn('未知类型type')
@@ -30,7 +30,7 @@ export function workspaceCommonUse (type, data) {
  * @param data{}
  * @returns {AxiosPromise}
  */
-export function getWorkspaceMenu (data) {
+export function getWorkspaceMenu(data) {
   return request({
     url: '/userCenter/workDesktop/menuInfo',
     method: 'post',

+ 1 - 1
apps/mobile/src/api/modules/user.js

@@ -1,6 +1,6 @@
 import request from '@/api'
 
-export function ajaxSetLogin (data) {
+export function ajaxSetLogin(data) {
   return request({
     url: '/user/login',
     method: 'post',

File diff suppressed because it is too large
+ 0 - 0
apps/mobile/src/assets/fonts/app/iconfont.js


File diff suppressed because it is too large
+ 78 - 395
apps/mobile/src/assets/js/china_area.js


+ 4 - 18
apps/mobile/src/assets/js/selector.js

@@ -102,7 +102,7 @@ export const industryJson = [
       { name: '办公用品设备' },
       { name: '工艺品/收藏品' },
       { name: '家具/家居/家电' },
-      { name: '贸易/进出口代理' },
+      { name: '贸易/进出口代理' }
     ]
   },
   {
@@ -196,21 +196,12 @@ export const industryJson = [
   },
   {
     name: '农/林/牧/渔',
-    children: [
-      { name: '农/林/牧/渔' }
-    ]
+    children: [{ name: '农/林/牧/渔' }]
   }
 ]
 
 // 职位
-export const jobJson = [
-  '总裁', 
-  '总经理',
-  '总监',
-  '经理',
-  '主管',
-  '职员'
-]
+export const jobJson = ['总裁', '总经理', '总监', '经理', '主管', '职员']
 
 // 公司规模
 export const companyScaleJson = [
@@ -223,9 +214,4 @@ export const companyScaleJson = [
 ]
 
 // 部门
-export const branchJson = [
-  '市场',
-  '产品',
-  '销售',
-  '渠道'
-]
+export const branchJson = ['市场', '产品', '销售', '渠道']

File diff suppressed because it is too large
+ 0 - 0
apps/mobile/src/assets/lottie/tabbar/box.json


File diff suppressed because it is too large
+ 0 - 0
apps/mobile/src/assets/lottie/tabbar/home.json


File diff suppressed because it is too large
+ 0 - 0
apps/mobile/src/assets/lottie/tabbar/message.json


File diff suppressed because it is too large
+ 0 - 0
apps/mobile/src/assets/lottie/tabbar/mine.json


File diff suppressed because it is too large
+ 0 - 0
apps/mobile/src/assets/lottie/tabbar/subscribe.json


+ 29 - 18
apps/mobile/src/components/ad/Ad.vue

@@ -6,7 +6,8 @@
     :src="getConfig.pic"
     :style="getStyle"
     @click.stop="openAD"
-    @load="loadSuccess">
+    @load="loadSuccess"
+  >
     <div v-if="showTag" class="tag-text">广告</div>
     <div v-if="showCloseIcon" class="close" @click.stop="close">
       <van-icon name="cross" />
@@ -49,7 +50,7 @@ export default {
     beforeOpen: Function,
     config: {
       type: Object,
-      default () {
+      default() {
         return {
           pic: '',
           link: '',
@@ -69,16 +70,20 @@ export default {
     info: {}
   }),
   computed: {
-    adShow () {
+    adShow() {
       return this.show && this.loaded
     },
-    getStyle () {
+    getStyle() {
       return {
-        width: this.getConfig?.extend?.width ? px2viewport(this.getConfig?.extend?.width) : '',
-        height: this.getConfig?.extend?.height ? px2viewport(this.getConfig?.extend?.height) : ''
+        width: this.getConfig?.extend?.width
+          ? px2viewport(this.getConfig?.extend?.width)
+          : '',
+        height: this.getConfig?.extend?.height
+          ? px2viewport(this.getConfig?.extend?.height)
+          : ''
       }
     },
-    getConfig () {
+    getConfig() {
       if (this.ad && this.info?.pic) {
         return this.info
       } else {
@@ -86,21 +91,21 @@ export default {
       }
     }
   },
-  created () {
+  created() {
     if (this.ad) {
       this.getAD([this.ad])
     }
   },
   methods: {
-    loadSuccess () {
+    loadSuccess() {
       this.loaded = true
       this.onLoaded()
     },
-    close () {
+    close() {
       this.destroyed = true
       this.$emit('close')
     },
-    async openAD () {
+    async openAD() {
       if (this.beforeOpen) {
         const prevent = await this.beforeOpen(this.getConfig)
         // 返回true可以继续往下走,返回false阻止跳转
@@ -115,20 +120,22 @@ export default {
         type: this.getConfig?.extend.type
       })
     },
-    onLoaded () {
+    onLoaded() {
       this.$emit('loaded')
     },
-    setStateToCache (key, value) {
+    setStateToCache(key, value) {
       this.$storage.set(`ad-cache--${key}`, value, { storage: sessionStorage })
     },
-    getStateFromCache (key) {
-      return this.$storage.get(`ad-cache--${key}`, false, { storage: sessionStorage })
+    getStateFromCache(key) {
+      return this.$storage.get(`ad-cache--${key}`, false, {
+        storage: sessionStorage
+      })
     },
     /**
      * 获取对应广告位数据
      * @param codes
      */
-    async getAD (codes) {
+    async getAD(codes) {
       // 从缓存中取值
       if (this.cache) {
         const cachedKey = JSON.stringify(codes)
@@ -155,8 +162,12 @@ export default {
         }
       }
     },
-    async getAdInfoFromRequest (codes) {
-      const { data = {}, error_code: code, error_msg: msg = '' } = await ajaxGetAD({ codes })
+    async getAdInfoFromRequest(codes) {
+      const {
+        data = {},
+        error_code: code,
+        error_msg: msg = ''
+      } = await ajaxGetAD({ codes })
       if (code === 0 && data) {
         const info = adConfigFormatter(Object.values(data).flat()[0])
         return { info }

+ 16 - 15
apps/mobile/src/components/ad/BaiduAd.vue

@@ -27,7 +27,7 @@ export default {
     },
     beforeOpen: Function
   },
-  data () {
+  data() {
     return {
       idMap: {
         u6603898: {
@@ -42,18 +42,21 @@ export default {
     }
   },
   computed: {
-    idInfo () {
+    idInfo() {
       const map = this.idMap[this.aid]
-      return Object.assign({
-        client: this.$env.platform.toUpperCase()
-      }, map)
+      return Object.assign(
+        {
+          client: this.$env.platform.toUpperCase()
+        },
+        map
+      )
     }
   },
-  mounted () {
+  mounted() {
     this.initCproAd()
   },
   methods: {
-    createIframeClick () {
+    createIframeClick() {
       this.iframesClick = new IframeOnClick()
       const frames = this.$el.querySelector('iframe')
       this.iframesClick.track(frames, async () => {
@@ -62,9 +65,9 @@ export default {
     },
     // 百青藤广告
     // https://showdoc.jydev.jianyu360.com/web/#/50?page_id=1011
-    initCproAd () {
+    initCproAd() {
       this.$nextTick(() => {
-        (window.slotbydup = window.slotbydup || []).push({
+        ;(window.slotbydup = window.slotbydup || []).push({
           id: this.aid,
           container: this.container,
           async: true
@@ -76,12 +79,12 @@ export default {
     /**
      * 曝光后调用
      */
-    async exposed () {
+    async exposed() {
       const data = this.idInfo
       if (!data) return
       await adLeagueExposure(data)
     },
-    async openAD () {
+    async openAD() {
       if (this.beforeOpen) {
         const prevent = await this.beforeOpen()
         // 返回true可以继续往下走,返回false阻止跳转
@@ -91,7 +94,7 @@ export default {
       }
       await this.clicked()
     },
-    async clicked () {
+    async clicked() {
       const data = this.idInfo
       await adLeagueClick(data)
     }
@@ -99,6 +102,4 @@ export default {
 }
 </script>
 
-<style scoped lang="scss">
-
-</style>
+<style scoped lang="scss"></style>

+ 67 - 39
apps/mobile/src/components/ad/InformationFlow.vue

@@ -1,24 +1,42 @@
 <template>
-  <div class="information-flow" :class="{visitedStatus:visitedStatus}">
+  <div class="information-flow" :class="{ visitedStatus: visitedStatus }">
     <div class="content">
       <p class="title" ref="title">
-        {{title}}
+        {{ title }}
       </p>
-      <img @click="rightIconClick()" class="icon" :src="keepStatus?iconActivePath:iconPath" />
+      <img
+        @click="rightIconClick()"
+        class="icon"
+        :src="keepStatus ? iconActivePath : iconPath"
+      />
     </div>
     <div class="footer">
       <div class="tags">
-        <van-tag size="large" class="tag" color="#F6F9FA" v-for="(item,index) in tags" :key="index">{{item}}</van-tag>
+        <van-tag
+          size="large"
+          class="tag"
+          color="#F6F9FA"
+          v-for="(item, index) in tags"
+          :key="index"
+          >{{ item }}</van-tag
+        >
       </div>
       <div class="time">
-        <span>{{dateFromNow(time)}}</span>
+        <span>{{ dateFromNow(time) }}</span>
       </div>
     </div>
     <div class="text" v-if="contentStatus">
-      {{text}}
+      {{ text }}
     </div>
-    <div class="label" v-if="tagType" :style="{background:tagTypeMap[tagType].background,color:tagTypeMap[tagType].color}">
-      {{tagTypeMap[tagType].text}}
+    <div
+      class="label"
+      v-if="tagType"
+      :style="{
+        background: tagTypeMap[tagType].background,
+        color: tagTypeMap[tagType].color
+      }"
+    >
+      {{ tagTypeMap[tagType].text }}
     </div>
   </div>
 </template>
@@ -28,7 +46,7 @@ import { dateFromNow, replaceKeyword } from '@/utils/utils'
 import { Tag } from 'vant'
 export default {
   name: 'InformationFlow',
-  data () {
+  data() {
     return {
       tagTypeMap: {
         1: {
@@ -48,7 +66,8 @@ export default {
     // 需高亮关键词 key-word
     title: {
       type: String,
-      default: '淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校'
+      default:
+        '淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校'
     },
     keyWord: {
       type: String,
@@ -77,24 +96,29 @@ export default {
     // 右侧icon路径
     iconPath: {
       type: String,
-      default: new URL('@/assets/image/icon/icon-star.png', import.meta.url).href
+      default: new URL('@/assets/image/icon/icon-star.png', import.meta.url)
+        .href
     },
     // 右侧icon选中状态路径
     iconActivePath: {
       type: String,
-      default: new URL('@/assets/image/icon/icon-star-active.png', import.meta.url).href
+      default: new URL(
+        '@/assets/image/icon/icon-star-active.png',
+        import.meta.url
+      ).href
     },
     // tags数组
     tags: {
       type: Array,
-      default () {
+      default() {
         return ['江苏', '建筑工程', '招标', '10亿']
       }
     },
     // text详情
     text: {
       type: String,
-      default: '淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校'
+      default:
+        '淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校淮安市高级职业技术学校'
     },
     // 时间
     time: {
@@ -109,7 +133,7 @@ export default {
       }
     }
   },
-  mounted () {
+  mounted() {
     this.replaceKeyword()
   },
   components: {
@@ -117,11 +141,15 @@ export default {
   },
   methods: {
     dateFromNow,
-    rightIconClick () {
+    rightIconClick() {
       this.$emit('right-icon-click')
     },
-    replaceKeyword () {
-      const html = replaceKeyword(this.title, [this.keyWord], ['<span style="color:#2CB7CA">', '</span>'])
+    replaceKeyword() {
+      const html = replaceKeyword(
+        this.title,
+        [this.keyWord],
+        ['<span style="color:#2CB7CA">', '</span>']
+      )
       this.$refs.title.innerHTML = html
     }
   }
@@ -133,24 +161,24 @@ export default {
   background: #fff;
   padding: 20px;
   position: relative;
-  &.visitedStatus{
-    .title{
-      color: #C0C4CC !important;
+  &.visitedStatus {
+    .title {
+      color: #c0c4cc !important;
     }
-    .tag{
-      color: #9B9CA3 !important;
+    .tag {
+      color: #9b9ca3 !important;
     }
-    .time{
-      color: #9B9CA3 !important;
+    .time {
+      color: #9b9ca3 !important;
     }
-    .text{
-      color: #C0C4CC !important;
+    .text {
+      color: #c0c4cc !important;
     }
   }
-  .content{
+  .content {
     display: flex;
     justify-content: space-between;
-    .title{
+    .title {
       color: #171826;
       font-size: 16px;
       font-weight: 500;
@@ -163,34 +191,34 @@ export default {
       line-clamp: 2;
       -webkit-box-orient: vertical;
     }
-    .icon{
+    .icon {
       flex: none;
       width: 20px;
       height: 20px;
       margin: 0 10px;
     }
   }
-  .footer{
+  .footer {
     margin-top: 10px;
     display: flex;
     justify-content: space-between;
-    .tags{
-      .tag{
+    .tags {
+      .tag {
         margin-right: 5px;
         font-size: 12px;
         font-weight: 500;
-        color: #5F5E64;
+        color: #5f5e64;
       }
     }
-    .time{
+    .time {
       font-size: 12px;
       font-weight: 500;
-      color: #9B9CA3;
+      color: #9b9ca3;
     }
   }
-  .text{
+  .text {
     margin-top: 10px;
-    color: #5F5E64;
+    color: #5f5e64;
     font-size: 13px;
     font-weight: 500;
     line-height: 20px;
@@ -202,7 +230,7 @@ export default {
     line-clamp: 2;
     -webkit-box-orient: vertical;
   }
-  .label{
+  .label {
     position: absolute;
     top: 0;
     left: 0;

+ 22 - 17
apps/mobile/src/components/ad/Side.vue

@@ -1,14 +1,15 @@
 <template>
-    <van-image
-      v-show="show"
-      class="side-box"
-      :class="{ fadeOutRight: !scrollStatus }"
-      :id="config.name"
-      :src="config.pic"
-      :style="getStyle"
-      @click.stop="openAD"
-      @load="loadSuccess">
-    </van-image>
+  <van-image
+    v-show="show"
+    class="side-box"
+    :class="{ fadeOutRight: !scrollStatus }"
+    :id="config.name"
+    :src="config.pic"
+    :style="getStyle"
+    @click.stop="openAD"
+    @load="loadSuccess"
+  >
+  </van-image>
 </template>
 
 <script>
@@ -28,7 +29,7 @@ export default {
     },
     config: {
       type: Object,
-      default () {
+      default() {
         return {
           pic: '',
           link: '',
@@ -48,23 +49,27 @@ export default {
     show: false
   }),
   computed: {
-    getStyle () {
+    getStyle() {
       return {
-        width: this.config?.extend?.width ? px2viewport(this.config?.extend?.width) : '',
-        height: this.config?.extend?.height ? px2viewport(this.config?.extend?.height) : ''
+        width: this.config?.extend?.width
+          ? px2viewport(this.config?.extend?.width)
+          : '',
+        height: this.config?.extend?.height
+          ? px2viewport(this.config?.extend?.height)
+          : ''
       }
     }
   },
   methods: {
-    loadSuccess () {
+    loadSuccess() {
       this.loaded = true
       this.show = true
     },
-    close () {
+    close() {
       this.show = false
       this.destroyed = true
     },
-    openAD () {
+    openAD() {
       openLinkOfAd({
         link: this.config.link,
         title: this.config.name,

+ 25 - 22
apps/mobile/src/components/ad/Swipe.vue

@@ -6,13 +6,15 @@
         :autoplay="autoplay"
         :duration="duration"
         indicator-color="white"
-        :width="getItemWidth">
-
-        <van-swipe-item :id="'ad-swipe-item-' + (item.name || index)"
-                        v-for="(item, index) in getImages"
-                        :key="index"
-                        :style="{width: getItemWidth}"
-                        @click="open(item)">
+        :width="getItemWidth"
+      >
+        <van-swipe-item
+          :id="'ad-swipe-item-' + (item.name || index)"
+          v-for="(item, index) in getImages"
+          :key="index"
+          :style="{ width: getItemWidth }"
+          @click="open(item)"
+        >
           <van-image
             :width="getItemWidth"
             :lazy-load="index > 0"
@@ -67,25 +69,25 @@ export default {
     },
     images: {
       type: Array,
-      default () {
+      default() {
         return []
       }
     }
   },
-  data () {
+  data() {
     return {
       list: []
     }
   },
   computed: {
-    getItemWidth () {
+    getItemWidth() {
       return px2viewport('343px')
     },
-    getImages () {
+    getImages() {
       return this.ad ? this.list : this.images
     }
   },
-  created () {
+  created() {
     if (this.ad) {
       this.getAD([this.ad])
     }
@@ -95,22 +97,24 @@ export default {
      * 获取对应广告位数据
      * @param codes
      */
-    getAD (codes) {
+    getAD(codes) {
       ajaxGetAD({
         codes
-      }).then(res => {
-        if (res?.error_code === 0 && typeof res?.data === 'object') {
-          this.list = Object.values(res.data).flat().map(adConfigFormatter)
-        }
-      }).catch(e => {
-        console.warn('获取广告位信息异常:', e)
       })
+        .then((res) => {
+          if (res?.error_code === 0 && typeof res?.data === 'object') {
+            this.list = Object.values(res.data).flat().map(adConfigFormatter)
+          }
+        })
+        .catch((e) => {
+          console.warn('获取广告位信息异常:', e)
+        })
     },
     /**
      * 调用公共方法打开广告位页面
      * @param ad
      */
-    async open (ad) {
+    async open(ad) {
       if (this.beforeOpen) {
         const prevent = await this.beforeOpen()
         // 返回 true 可以继续往下走,返回 false 阻止跳转
@@ -125,8 +129,7 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-
-$swipe-item-fill-color: #EDEFF2;
+$swipe-item-fill-color: #edeff2;
 
 $swipe-item-width: 343px;
 $swipe-item-height: 120px;

+ 65 - 45
apps/mobile/src/components/ad/SwipeFloor.vue

@@ -1,24 +1,30 @@
 <template>
   <div class="my-swipe-floor">
     <div class="my-swipe-floor-skeleton" v-show="!getImages.length">
-      <van-skeleton title avatar
-                    v-for="index in getFills"
-                    :key="index">
+      <van-skeleton title avatar v-for="index in getFills" :key="index">
       </van-skeleton>
     </div>
-    <swiper :id="'ad-' + (ad || 'swipe-floor')"
-            class="my-swipe-floor-group"
-            :options="swiperOption"
-            ref="my-swipe-floor">
-        <swiper-slide class="my-swipe-floor-item clickable"
-                      v-for="(floor, fIndex) in getImages"
-                      :key="fIndex"
-                      :id="'ad-swipe-floor-item-' + (floor.name || fIndex)">
-              <van-image fit="contain" :src="floor.pic"></van-image>
-              <span>{{floor.name}}</span>
-        </swiper-slide>
-        <div class="swiper-pagination" slot="pagination" v-show="getImages.length > getFills.length"></div>
-      </swiper>
+    <swiper
+      :id="'ad-' + (ad || 'swipe-floor')"
+      class="my-swipe-floor-group"
+      :options="swiperOption"
+      ref="my-swipe-floor"
+    >
+      <swiper-slide
+        class="my-swipe-floor-item clickable"
+        v-for="(floor, fIndex) in getImages"
+        :key="fIndex"
+        :id="'ad-swipe-floor-item-' + (floor.name || fIndex)"
+      >
+        <van-image fit="contain" :src="floor.pic"></van-image>
+        <span>{{ floor.name }}</span>
+      </swiper-slide>
+      <div
+        class="swiper-pagination"
+        slot="pagination"
+        v-show="getImages.length > getFills.length"
+      ></div>
+    </swiper>
   </div>
 </template>
 
@@ -53,12 +59,12 @@ export default {
     },
     images: {
       type: Array,
-      default () {
+      default() {
         return []
       }
     }
   },
-  data () {
+  data() {
     return {
       swiperOption: {
         slidesPerView: 5,
@@ -77,20 +83,17 @@ export default {
     }
   },
   computed: {
-    ...mapGetters('user', [
-      'isLogin',
-      'isSuper',
-      'isMember',
-      'isBusiness'
-    ]),
-    getImages () {
-      return (this.ad ? this.list : this.images)
+    ...mapGetters('user', ['isLogin', 'isSuper', 'isMember', 'isBusiness']),
+    getImages() {
+      return this.ad ? this.list : this.images
     },
-    getFills () {
-      return new Array(this.swiperOption.slidesPerColumn * this.swiperOption.slidesPerView)
+    getFills() {
+      return new Array(
+        this.swiperOption.slidesPerColumn * this.swiperOption.slidesPerView
+      )
     }
   },
-  created () {
+  created() {
     if (this.ad) {
       this.getAD([this.ad])
     }
@@ -100,24 +103,29 @@ export default {
      * 获取对应广告位数据
      * @param codes
      */
-    getAD (codes) {
+    getAD(codes) {
       ajaxGetAD({
         codes
-      }).then(res => {
-        console.log(res)
-        if (res?.error_code === 0 && typeof res?.data === 'object') {
-          this.list = Object.values(res.data).filter(v => Array.isArray(v)).flat().map(adConfigFormatter)
-        }
-      }).catch(e => {
-        console.warn('获取广告位信息异常:', e)
       })
+        .then((res) => {
+          console.log(res)
+          if (res?.error_code === 0 && typeof res?.data === 'object') {
+            this.list = Object.values(res.data)
+              .filter((v) => Array.isArray(v))
+              .flat()
+              .map(adConfigFormatter)
+          }
+        })
+        .catch((e) => {
+          console.warn('获取广告位信息异常:', e)
+        })
     },
     /**
      * 仅app执行该逻辑
      * 首页广告位跳转前的权限判断,检查是否需要重定向(app切换tab)
      * 返回true表示被重定向(app切换tab),则后续跳转流程不再执行
      */
-    checkAdPowerRedirect (ad = {}) {
+    checkAdPowerRedirect(ad = {}) {
       const { inAppOrH5 } = this.$envs
       const powerMap = ['m', 'v', 's']
       const tabMap = {
@@ -126,15 +134,24 @@ export default {
         3: 'box', // 百宝箱
         4: 'me' // 我的
       }
-      if (inAppOrH5 && this.isLogin && ad && ad.extend && powerMap.includes(ad.extend.power)) {
+      if (
+        inAppOrH5 &&
+        this.isLogin &&
+        ad &&
+        ad.extend &&
+        powerMap.includes(ad.extend.power)
+      ) {
         const extend = ad.extend || {}
         const { tab, power } = extend
         let powerCheckPass = true
-        if (power === 'm') { // 是否是大会员。如果是,则切换tab,否则按照原地址跳转
+        if (power === 'm') {
+          // 是否是大会员。如果是,则切换tab,否则按照原地址跳转
           powerCheckPass = this.isMember
-        } else if (power === 'v') { // 是否是超级订阅。如果是,则切换tab,否则按照原地址跳转
+        } else if (power === 'v') {
+          // 是否是超级订阅。如果是,则切换tab,否则按照原地址跳转
           powerCheckPass = this.isSuper
-        } else if (power === 's') { // 是否是商机管理。如果是,则切换tab,否则按照原地址跳转
+        } else if (power === 's') {
+          // 是否是商机管理。如果是,则切换tab,否则按照原地址跳转
           powerCheckPass = this.isBusiness
         }
         if (powerCheckPass) {
@@ -148,7 +165,7 @@ export default {
     /**
      * 调用公共方法打开广告位页面
      */
-    open () {
+    open() {
       const clickIndex = this.$refs['my-swipe-floor']?.$swiper?.clickedIndex
       if (clickIndex >= 0 && clickIndex < this.getImages.length) {
         const ad = this.getImages[clickIndex]
@@ -166,8 +183,11 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
-$swiper-floor-pagination-fill-color: #2ABED1;
-$swiper-floor-pagination-bg-color: rgba($swiper-floor-pagination-fill-color, 0.28);
+$swiper-floor-pagination-fill-color: #2abed1;
+$swiper-floor-pagination-bg-color: rgba(
+  $swiper-floor-pagination-fill-color,
+  0.28
+);
 $swiper-floor-item-color: #171826;
 
 $swiper-floor-pagination-width: 32px;

+ 20 - 14
apps/mobile/src/components/ad/pop-screen/index.vue

@@ -1,11 +1,17 @@
 <template>
-  <van-overlay v-if="!destroyed" class-name="pop-screen" :show="show" @click="close">
-    <div class="container"
-         :style="{
-          width: getStyle.width,
-          height: getStyle.height
-        }"
-         @click.stop="openAD"
+  <van-overlay
+    v-if="!destroyed"
+    class-name="pop-screen"
+    :show="show"
+    @click="close"
+  >
+    <div
+      class="container"
+      :style="{
+        width: getStyle.width,
+        height: getStyle.height
+      }"
+      @click.stop="openAD"
     >
       <AppIcon name="close" @click.stop="close" />
       <AdSvga
@@ -60,7 +66,7 @@ export default {
     // 广告配置
     config: {
       type: Object,
-      default () {
+      default() {
         return {
           pic: '',
           link: '',
@@ -75,10 +81,10 @@ export default {
     }
   },
   computed: {
-    isSvgaType () {
+    isSvgaType() {
       return this.config?.pic?.indexOf('.svga') !== -1
     },
-    getStyle () {
+    getStyle() {
       return {
         width: px2px(this.config?.extend?.width || 311),
         height: px2px(this.config?.extend?.height || 440)
@@ -101,7 +107,7 @@ export default {
     destroyed: true,
     show: false
   }),
-  created () {
+  created() {
     const toDayShow = this.$storage.get(this.cacheKey, false)
     if (!toDayShow) {
       this.destroyed = false
@@ -110,7 +116,7 @@ export default {
     }
   },
   methods: {
-    loadSuccess () {
+    loadSuccess() {
       this.loaded = true
       this.show = true
       this.$emit('load')
@@ -119,7 +125,7 @@ export default {
      * 关闭弹窗
      * @param type -关闭事件是否由点击关闭弹窗触发的
      */
-    close (type = true) {
+    close(type = true) {
       this.show = false
       this.destroyed = true
       if (this.cacheKey) {
@@ -129,7 +135,7 @@ export default {
       }
       this.$emit('close', type)
     },
-    async openAD () {
+    async openAD() {
       if (this.beforeOpen) {
         const prevent = await this.beforeOpen()
         // 返回 true 可以继续往下走,返回 false 阻止跳转

+ 20 - 7
apps/mobile/src/components/ad/svga-support/index.vue

@@ -1,5 +1,10 @@
 <template>
-  <div class="svga-container" ref="svga-container" v-bind="$props" v-on="$listeners">
+  <div
+    class="svga-container"
+    ref="svga-container"
+    v-bind="$props"
+    v-on="$listeners"
+  >
     <canvas ref="svga-canvas"></canvas>
   </div>
 </template>
@@ -16,7 +21,7 @@ export default {
       type: String
     }
   },
-  mounted () {
+  mounted() {
     console.log('svag moi')
     try {
       this.init()
@@ -25,17 +30,25 @@ export default {
     }
   },
   methods: {
-    async init () {
+    async init() {
       const parser = new Parser()
       const svga = await parser.load(this.svgaLink)
       const player = new Player(this.$refs['svga-canvas'])
 
-      const scaleX = getPureNumber(this.$refs['svga-container'].style.width) / svga.size.width
-      const scaleY = getPureNumber(this.$refs['svga-container'].style.height) / svga.size.height
+      const scaleX =
+        getPureNumber(this.$refs['svga-container'].style.width) /
+        svga.size.width
+      const scaleY =
+        getPureNumber(this.$refs['svga-container'].style.height) /
+        svga.size.height
       const scaleRatio = Number((scaleX > scaleY ? scaleX : scaleY).toFixed(3))
 
-      this.$refs['svga-canvas'].style['-webkit-transform'] = `scale(${scaleRatio}, ${scaleRatio})`
-      this.$refs['svga-canvas'].style.transform = `scale(${scaleRatio}, ${scaleRatio})`
+      this.$refs['svga-canvas'].style[
+        '-webkit-transform'
+      ] = `scale(${scaleRatio}, ${scaleRatio})`
+      this.$refs[
+        'svga-canvas'
+      ].style.transform = `scale(${scaleRatio}, ${scaleRatio})`
 
       await player.mount(svga)
       player.start()

+ 296 - 161
apps/mobile/src/components/bid-update/BidUpdate.vue

@@ -1,20 +1,24 @@
 <template>
-  <div class='bid_component'>
+  <div class="bid_component">
     <div class="j-container">
       <div class="popupTime-header j-header">
         <div class="header-title">
-          <span style="line-height: 28px;">已参标,请更新投标状态</span>
-          <span style="line-height: 18px;margin-top: 2px;" class="label-tip">可前往“我的参标项目”查看已参标项目</span>
+          <span style="line-height: 28px">已参标,请更新投标状态</span>
+          <span style="line-height: 18px; margin-top: 2px" class="label-tip"
+            >可前往“我的参标项目”查看已参标项目</span
+          >
         </div>
         <div class="header-close" @click="$emit('cancel-update')">
-            <!-- <span class="j-icon base-icon icon-delete-gray"></span> -->
-            <van-icon class="header-nav-close" name="clear" />
+          <!-- <span class="j-icon base-icon icon-delete-gray"></span> -->
+          <van-icon class="header-nav-close" name="clear" />
         </div>
       </div>
       <div class="j-main">
         <div class="view-result-tip">
           <span>想知道谁最有可能参标吗?</span>
-          <span @click.stop="linkAnalysis" style="color:#2ABED1">点这里查看分析结果</span>
+          <span @click.stop="linkAnalysis" style="color: #2abed1"
+            >点这里查看分析结果</span
+          >
         </div>
         <van-form @submit="onSubmit">
           <van-field
@@ -47,127 +51,214 @@
             readonly
             v-model="bidParams.isWin"
             name="isWin"
-            :label="showChannel? '渠道是否中标':'是否中标'"
+            :label="showChannel ? '渠道是否中标' : '是否中标'"
           ></van-field>
           <div class="channel_module" v-if="showChannel">
             <div class="acc-input-group">
-              <van-field type="textarea" autosize :rows="rownum" placeholder="请输入渠道名称" v-model.trim="bidParams.channelName" name="channelName" label="渠道名称"></van-field>
+              <van-field
+                type="textarea"
+                autosize
+                :rows="rownum"
+                placeholder="请输入渠道名称"
+                v-model.trim="bidParams.channelName"
+                name="channelName"
+                label="渠道名称"
+              ></van-field>
               <div class="popover-acc-input-group" v-show="showAccEntList">
-                <div class="popover-acc-input-group--item" v-for="(item, index) in accEntList" v-bind:key="index" @click="doSelectEnt(item)">{{item.value}}</div>
+                <div
+                  class="popover-acc-input-group--item"
+                  v-for="(item, index) in accEntList"
+                  v-bind:key="index"
+                  @click="doSelectEnt(item)"
+                >
+                  {{ item.value }}
+                </div>
               </div>
             </div>
-            <van-field type="textarea" autosize :rows="rownum" placeholder="请输入联系人姓名" v-model.trim="bidParams.channelPerson" name="channelPerson" label="联系人"></van-field>
-            <van-field maxlength="11" type="tel" placeholder="请输入联系电话" v-model.trim="bidParams.channelPhone" name="channelPhone" label="联系电话"></van-field>
-            <van-field type="textarea" autosize :rows="rownum" placeholder="请输入中标单位名称" v-model.trim="bidParams.winner" name="winner" label="中标单位"></van-field>
+            <van-field
+              type="textarea"
+              autosize
+              :rows="rownum"
+              placeholder="请输入联系人姓名"
+              v-model.trim="bidParams.channelPerson"
+              name="channelPerson"
+              label="联系人"
+            ></van-field>
+            <van-field
+              maxlength="11"
+              type="tel"
+              placeholder="请输入联系电话"
+              v-model.trim="bidParams.channelPhone"
+              name="channelPhone"
+              label="联系电话"
+            ></van-field>
+            <van-field
+              type="textarea"
+              autosize
+              :rows="rownum"
+              placeholder="请输入中标单位名称"
+              v-model.trim="bidParams.winner"
+              name="winner"
+              label="中标单位"
+            ></van-field>
           </div>
         </van-form>
       </div>
       <div class="j-footer">
-          <div class="j-button-group">
-            <button class="j-button-cancel" @click="$emit('cancel-update')">取消</button>
-            <button round type="primary" :disabled="showDisbaled" class="j-button-confirm submitBtn" @click="onSubmit()">确认</button>
-          </div>
+        <div class="j-button-group">
+          <button class="j-button-cancel" @click="$emit('cancel-update')">
+            取消
+          </button>
+          <button
+            round
+            type="primary"
+            :disabled="showDisbaled"
+            class="j-button-confirm submitBtn"
+            @click="onSubmit()"
+          >
+            确认
+          </button>
+        </div>
       </div>
     </div>
-    <van-popup :class="{'iswxios': isWxIos}" class="popupTime" v-model="bidTypePopup" round position="bottom">
+    <van-popup
+      :class="{ iswxios: isWxIos }"
+      class="popupTime"
+      v-model="bidTypePopup"
+      round
+      position="bottom"
+    >
       <div class="j-container">
         <div class="popupTime-header">
-              <div class="header-title">选择投标类型</div>
-              <div class="header-close" @click="bidTypePopupClose()">
-                  <!-- <span class="j-icon base-icon icon-delete-gray"></span> -->
-                  <van-icon class="header-nav-close" name="clear" />
-              </div>
-          </div>
-          <div class="popupTime-main j-main">
-            <ul class="bid_ul">
-              <li class="bid_select" @click="selectBidType(1)">
-                <span>直接投标</span>
-                <img v-show="copyBidParams.bidType == 1" src="@/assets/image/icon/icon-check.png" alt="" />
-              </li>
-              <li class="bid_select" @click="selectBidType(2)">
-                <span>渠道投标</span>
-                <img v-show="copyBidParams.bidType == 2" src="@/assets/image/icon/icon-check.png" alt="" />
-              </li>
-            </ul>
+          <div class="header-title">选择投标类型</div>
+          <div class="header-close" @click="bidTypePopupClose()">
+            <!-- <span class="j-icon base-icon icon-delete-gray"></span> -->
+            <van-icon class="header-nav-close" name="clear" />
           </div>
-          <div class="j-footer">
-              <div class="j-button-group">
-                  <div class="j-button-confirm" @click="saveStatus('0')">确认</div>
-              </div>
+        </div>
+        <div class="popupTime-main j-main">
+          <ul class="bid_ul">
+            <li class="bid_select" @click="selectBidType(1)">
+              <span>直接投标</span>
+              <img
+                v-show="copyBidParams.bidType == 1"
+                src="@/assets/image/icon/icon-check.png"
+                alt=""
+              />
+            </li>
+            <li class="bid_select" @click="selectBidType(2)">
+              <span>渠道投标</span>
+              <img
+                v-show="copyBidParams.bidType == 2"
+                src="@/assets/image/icon/icon-check.png"
+                alt=""
+              />
+            </li>
+          </ul>
+        </div>
+        <div class="j-footer">
+          <div class="j-button-group">
+            <div class="j-button-confirm" @click="saveStatus('0')">确认</div>
           </div>
+        </div>
       </div>
     </van-popup>
-      <van-popup :class="{'iswxios': isWxIos}" class="popupTime popupIsBid" v-model="isBidPopup" round position="bottom">
-        <div class="j-container">
-          <div class="popupTime-header">
-              <div class="header-title">
-                <span>是否中标</span>
-                <span @click="cancelSelect()" class="cancel_select">取消选择</span>
-              </div>
-              <div class="header-close" @click="isBidPopupClose()">
-                <van-icon class="header-nav-close" name="clear" />
-                  <!-- <span class="j-icon base-icon icon-delete-gray"></span> -->
-              </div>
-          </div>
-          <div class="popupTime-main j-main">
-            <ul class="bid_ul">
-              <li class="bid_select" @click="selectBidStatus(1)">
-                <span>是</span>
-                <img v-if="copyBidParams.isWin === 1" src="@/assets/image/icon/icon-check.png" alt="" />
-              </li>
-              <li class="bid_select" @click="selectBidStatus(2)">
-                <span>否</span>
-                <img v-if="copyBidParams.isWin === 2" src="@/assets/image/icon/icon-check.png" alt="" />
-              </li>
-            </ul>
+    <van-popup
+      :class="{ iswxios: isWxIos }"
+      class="popupTime popupIsBid"
+      v-model="isBidPopup"
+      round
+      position="bottom"
+    >
+      <div class="j-container">
+        <div class="popupTime-header">
+          <div class="header-title">
+            <span>是否中标</span>
+            <span @click="cancelSelect()" class="cancel_select">取消选择</span>
           </div>
-          <div class="j-footer">
-              <div class="j-button-group">
-                  <div class="j-button-confirm" @click="saveStatus('2')">确认</div>
-              </div>
+          <div class="header-close" @click="isBidPopupClose()">
+            <van-icon class="header-nav-close" name="clear" />
+            <!-- <span class="j-icon base-icon icon-delete-gray"></span> -->
           </div>
         </div>
-      </van-popup>
-      <van-popup :class="{'iswxios': isWxIos}" class="popupTime" v-model="bidProject" round position="bottom">
-        <div class="j-container">
-          <div class="popupTime-header">
-            <div class="header-title">投标项目阶段</div>
-            <div class="header-close" @click="BidProjectPopupClose()">
-              <van-icon class="header-nav-close" name="clear" />
-                <!-- <span class="j-icon base-icon icon-delete-gray"></span> -->
-            </div>
+        <div class="popupTime-main j-main">
+          <ul class="bid_ul">
+            <li class="bid_select" @click="selectBidStatus(1)">
+              <span>是</span>
+              <img
+                v-if="copyBidParams.isWin === 1"
+                src="@/assets/image/icon/icon-check.png"
+                alt=""
+              />
+            </li>
+            <li class="bid_select" @click="selectBidStatus(2)">
+              <span>否</span>
+              <img
+                v-if="copyBidParams.isWin === 2"
+                src="@/assets/image/icon/icon-check.png"
+                alt=""
+              />
+            </li>
+          </ul>
+        </div>
+        <div class="j-footer">
+          <div class="j-button-group">
+            <div class="j-button-confirm" @click="saveStatus('2')">确认</div>
           </div>
-          <div class="popupTime-main j-main">
-            <van-cell-group>
-              <van-cell
-                :class="{'cell_checked': item.checked}"
-                v-for="item in bidStageOptions"
-                :key="item.value"
-                :title="item.label"
-                :label-align="labelAlign"
-                icon-size="16px"
-                @click="onCellClick(item)"
-              >
-                <template #right-icon>
-                  <van-checkbox v-model="item.checked" :name="item.value" />
-                </template>
-              </van-cell>
-            </van-cell-group>
+        </div>
+      </div>
+    </van-popup>
+    <van-popup
+      :class="{ iswxios: isWxIos }"
+      class="popupTime"
+      v-model="bidProject"
+      round
+      position="bottom"
+    >
+      <div class="j-container">
+        <div class="popupTime-header">
+          <div class="header-title">投标项目阶段</div>
+          <div class="header-close" @click="BidProjectPopupClose()">
+            <van-icon class="header-nav-close" name="clear" />
+            <!-- <span class="j-icon base-icon icon-delete-gray"></span> -->
           </div>
-          <div class="j-footer">
-              <div class="j-button-group">
-                <div class="j-button-cancel" @click="cancelBidStage()">重置</div>
-                <div class="j-button-confirm" @click="saveStatus('1')">确认</div>
-              </div>
+        </div>
+        <div class="popupTime-main j-main">
+          <van-cell-group>
+            <van-cell
+              :class="{ cell_checked: item.checked }"
+              v-for="item in bidStageOptions"
+              :key="item.value"
+              :title="item.label"
+              :label-align="labelAlign"
+              icon-size="16px"
+              @click="onCellClick(item)"
+            >
+              <template #right-icon>
+                <van-checkbox v-model="item.checked" :name="item.value" />
+              </template>
+            </van-cell>
+          </van-cell-group>
+        </div>
+        <div class="j-footer">
+          <div class="j-button-group">
+            <div class="j-button-cancel" @click="cancelBidStage()">重置</div>
+            <div class="j-button-confirm" @click="saveStatus('1')">确认</div>
           </div>
         </div>
+      </div>
     </van-popup>
   </div>
 </template>
 
 <script>
 import { Popup, CellGroup, Cell, Form, Field, Icon, Checkbox } from 'vant'
-import { projectDetailApi, updateBidStatus, setUpInfo, getCanBiaoContent } from '@/api/modules'
+import {
+  projectDetailApi,
+  updateBidStatus,
+  setUpInfo,
+  getCanBiaoContent
+} from '@/api/modules'
 export default {
   name: 'bid_component',
   components: {
@@ -182,7 +273,7 @@ export default {
   props: {
     projectCellInfo: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     },
@@ -191,7 +282,7 @@ export default {
       default: false
     }
   },
-  data () {
+  data() {
     return {
       cbInfo: {
         isShowRefer: false,
@@ -249,24 +340,26 @@ export default {
     }
   },
   computed: {
-    bidStageOptions () {
-      const result = this.formSchemaOptions['bidStage' + (String(this.copyBidParams.bidType) === '1' ? '-1' : '')].map(option => ({
+    bidStageOptions() {
+      const result = this.formSchemaOptions[
+        'bidStage' + (String(this.copyBidParams.bidType) === '1' ? '-1' : '')
+      ].map((option) => ({
         checked: this.checkedList.includes(option),
         value: option,
         label: option
       }))
       return result
     },
-    showDisbaled () {
+    showDisbaled() {
       return this.bidParams.bidType === ''
     },
-    isWxIos () {
+    isWxIos() {
       return this.$envs.inWX && this.$envs.inIOS
     }
   },
   watch: {
     projectCellInfo: {
-      handler (newval) {
+      handler(newval) {
         this.resetUpdate()
         this.getProDetail()
         this.getContent()
@@ -274,33 +367,42 @@ export default {
       immediate: true
     },
     showBidStatus: {
-      handler (newval) {
+      handler(newval) {
         this.resetUpdate()
       },
       immediate: true
     }
   },
-  created () {
+  created() {
     this.getOptionsInfo()
   },
-  mounted () {
-  },
+  mounted() {},
   methods: {
-    linkAnalysis () {
+    linkAnalysis() {
       if (this.$envs.inAppOrH5) {
         location.href = '/jyapp/big/page/analysis_result'
       } else {
         location.href = '/big/wx/page/analysis_search'
       }
     },
-    async onSubmit () {
+    async onSubmit() {
       // 在这里处理表单提交逻辑
       const _this = this
       this.copyBidParams.bidType = parseInt(this.copyBidParams.bidType)
-      this.copyBidParams.isWin = this.copyBidParams.isWin ? parseInt(this.copyBidParams.isWin) : 0
+      this.copyBidParams.isWin = this.copyBidParams.isWin
+        ? parseInt(this.copyBidParams.isWin)
+        : 0
       // this.bidParams.winner = this.prodetail.s_winner
       this.bidParams.sid = this.prodetail.sid
-      const { channelName, channelPerson, channelPhone, winner, sid, bidStage, isWin } = this.bidParams
+      const {
+        channelName,
+        channelPerson,
+        channelPhone,
+        winner,
+        sid,
+        bidStage,
+        isWin
+      } = this.bidParams
       let tranWin = 0
       if (isWin === '是') {
         tranWin = 1
@@ -319,7 +421,11 @@ export default {
         winner: winner,
         sid: sid
       }
-      const { error_code: code, error_msg: msg, data } = await updateBidStatus(ajaxParams)
+      const {
+        error_code: code,
+        error_msg: msg,
+        data
+      } = await updateBidStatus(ajaxParams)
       if (code === 0 && data) {
         _this.$toast('保存成功')
         _this.editBtnStatus.show = true
@@ -330,7 +436,7 @@ export default {
       }
     },
     // 获取项目详情
-    async getProDetail (item) {
+    async getProDetail(item) {
       let obj = {}
       if (item) {
         obj = item
@@ -340,7 +446,11 @@ export default {
       const params = {
         sid: obj.sid || obj._id || obj.id || ''
       }
-      const { error_code: code, error_msg: msg, data } = await projectDetailApi(params)
+      const {
+        error_code: code,
+        error_msg: msg,
+        data
+      } = await projectDetailApi(params)
       if (code === 0) {
         this.prodetail = data
       } else {
@@ -348,17 +458,19 @@ export default {
       }
     },
     // 获取选项
-    async getOptionsInfo () {
+    async getOptionsInfo() {
       const { error_code: code, data } = await setUpInfo()
       if (code === 0) {
         if (data.bidType) {
-          this.formSchemaOptions.bidStage = data.bidType.find(v => v.name === '渠道投标').content || []
-          this.formSchemaOptions['bidStage-1'] = data.bidType.find(v => v.name === '直接投标').content || []
+          this.formSchemaOptions.bidStage =
+            data.bidType.find((v) => v.name === '渠道投标').content || []
+          this.formSchemaOptions['bidStage-1'] =
+            data.bidType.find((v) => v.name === '直接投标').content || []
         }
       }
     },
     // 获取参标内容
-    async getContent (item) {
+    async getContent(item) {
       let obj = {}
       if (item) {
         obj = item
@@ -373,7 +485,15 @@ export default {
         if (Object.keys(data).length > 0) {
           this.editBtnStatus.show = true
           this.editBtnStatus.status = 1
-          const { bidStage, bidType, channelName, channelPerson, channelPhone, isWin, winner } = data
+          const {
+            bidStage,
+            bidType,
+            channelName,
+            channelPerson,
+            channelPhone,
+            isWin,
+            winner
+          } = data
           const getParams = {
             bidType: '',
             bidStage: '',
@@ -412,17 +532,19 @@ export default {
         }
       }
     },
-    doQueryAccEntName (str) {
+    doQueryAccEntName(str) {
       // TODO 需添加防抖
       this.showAccEntList = false
-      this.fetchChannelNameList(str, list => {
+      this.fetchChannelNameList(str, (list) => {
         this.showAccEntList = list.length > 0
         this.accEntList = list
       })
     },
     // 重置投标阶段变更
-    cancelBidStage () {
-      const resetList = (this.formSchemaOptions.checkedListMap[this.copyBidParams.bidType] || []).map(v => v)
+    cancelBidStage() {
+      const resetList = (
+        this.formSchemaOptions.checkedListMap[this.copyBidParams.bidType] || []
+      ).map((v) => v)
       this.checkedList = resetList
     },
     // 重置投标状态
@@ -449,11 +571,18 @@ export default {
       }
       this.showChannel = false
     },
-    saveStatus (str) {
+    saveStatus(str) {
       switch (str) {
         case '0':
           if (this.bidParams.bidType) {
-            if (!((this.bidParams.bidType.indexOf('直接') !== -1 && parseInt(this.copyBidParams.bidType) === 1) || (this.bidParams.bidType.indexOf('渠道') !== -1 && parseInt(this.copyBidParams.bidType) === 2))) {
+            if (
+              !(
+                (this.bidParams.bidType.indexOf('直接') !== -1 &&
+                  parseInt(this.copyBidParams.bidType) === 1) ||
+                (this.bidParams.bidType.indexOf('渠道') !== -1 &&
+                  parseInt(this.copyBidParams.bidType) === 2)
+              )
+            ) {
               this.bidParams = {
                 bidType: this.copyBidParams.bidType,
                 bidStage: '',
@@ -489,7 +618,8 @@ export default {
         default:
           break
       }
-      const { channelName, channelPhone, channelPerson, winner } = this.bidParams || {}
+      const { channelName, channelPhone, channelPerson, winner } =
+        this.bidParams || {}
       this.copyBidParams.channelName = channelName || ''
       this.copyBidParams.channelPhone = channelPhone || ''
       this.copyBidParams.channelPerson = channelPerson || ''
@@ -509,7 +639,10 @@ export default {
       // 带出中标单位
       if (this.bidParams.isWin === 1) {
         this.bidParams.isWin = '是'
-        const sWin = this.prodetail.projectInfo.s_winner || this.prodetail.projectInfo.winner || ''
+        const sWin =
+          this.prodetail.projectInfo.s_winner ||
+          this.prodetail.projectInfo.winner ||
+          ''
         if (sWin && !winner) {
           this.bidParams.winner = sWin
         }
@@ -525,28 +658,28 @@ export default {
       this.isBidPopupClose()
     },
     // 选择是否中标
-    selectBidStatus (data) {
+    selectBidStatus(data) {
       this.copyBidParams.isWin = data
     },
     // 是否中标取消选择
-    cancelSelect () {
+    cancelSelect() {
       this.bidParams.isWin = ''
       this.copyBidParams.isWin = ''
       this.bidParams.winner = ''
       this.copyBidParams.winner = ''
       this.isBidPopupClose()
     },
-    doSelectEnt (item) {
+    doSelectEnt(item) {
       this.setParams(this.bidParams, item)
       this.setParams(this.copyBidParams, item)
       this.showAccEntList = false
     },
-    setParams (params, item) {
+    setParams(params, item) {
       const { value } = item || {}
       params.channelName = value || ''
     },
     // 选择投标类型
-    selectBidType (data) {
+    selectBidType(data) {
       this.copyBidParams.bidType = data
       //  checkedList 切换时清空
       if (data !== this.copyBidParams.bidType) {
@@ -582,9 +715,9 @@ export default {
     //     }
     //   })
     // },
-    onCellClick (data) {
+    onCellClick(data) {
       if (this.checkedList.includes(data.value)) {
-        this.checkedList = this.checkedList.filter(v => v !== data.value)
+        this.checkedList = this.checkedList.filter((v) => v !== data.value)
       } else {
         this.checkedList.push(data.value)
       }
@@ -598,8 +731,11 @@ export default {
         this.getBidContent()
       }
     },
-    getShareParams () {
-      const params = location.href.indexOf('?') > -1 ? '&fid=' + this.fid + '&sid=' + this.sid : '?fid=' + this.fid + '&sid=' + this.sid
+    getShareParams() {
+      const params =
+        location.href.indexOf('?') > -1
+          ? '&fid=' + this.fid + '&sid=' + this.sid
+          : '?fid=' + this.fid + '&sid=' + this.sid
       this.proParams = {
         type: '2',
         id: this.sid,
@@ -626,25 +762,25 @@ export default {
   font-size: 20px;
   color: #c8c9cc;
 }
-.bid_component{
+.bid_component {
   height: 100%;
-   .van-cell{
+  .van-cell {
     display: flex;
     align-items: flex-start;
     padding: 15px 0;
   }
-  .bid-type-field.van-cell{
+  .bid-type-field.van-cell {
     padding-left: 8px;
   }
-  .bid-type-field.van-cell--required::before{
+  .bid-type-field.van-cell--required::before {
     left: 0;
   }
-  ::v-deep{
+  ::v-deep {
     .van-field__label {
       margin-right: 16px;
       font-size: 15px;
     }
-    .bid-type-field .van-cell__title{
+    .bid-type-field .van-cell__title {
       margin-right: 8px;
     }
   }
@@ -652,14 +788,14 @@ export default {
   .van-cell .van-field__body textarea {
     min-height: 24px;
   }
-  .van-cell .van-field__control{
+  .van-cell .van-field__control {
     font-size: 16px;
   }
-  .van-cell--required::before{
+  .van-cell--required::before {
     left: -8px;
   }
 
-  .view-result-tip{
+  .view-result-tip {
     display: flex;
     justify-content: flex-start;
     align-items: center;
@@ -668,7 +804,7 @@ export default {
     padding: 10px 16px;
     font-size: 14px;
     color: #686868;
-    background: #F1FDFF;
+    background: #f1fdff;
   }
 
   .popupTime-header {
@@ -690,7 +826,7 @@ export default {
   }
   .popupTime-header .header-title .label-tip {
     font-size: 12px;
-    color: #5F5E64;
+    color: #5f5e64;
   }
   .popupTime-header .header-close {
     width: 20px;
@@ -703,26 +839,26 @@ export default {
     height: 20px;
   }
 
-  .van-cell::after{
-    border-bottom: 0.5px solid #F2F2F2;
+  .van-cell::after {
+    border-bottom: 0.5px solid #f2f2f2;
     left: 0;
   }
 
-  .van-form{
+  .van-form {
     padding: 0 16px;
   }
 }
-.popupTime{
+.popupTime {
   height: 384px;
-  &.iswxios{
+  &.iswxios {
     height: 434px;
     padding-bottom: 50px;
   }
 }
-.popupTime .popupTime-main{
+.popupTime .popupTime-main {
   padding: 0 16px;
 }
-.popupTime .popupTime-main .bid_ul .bid_select{
+.popupTime .popupTime-main .bid_ul .bid_select {
   display: flex;
   justify-content: space-between;
   align-items: center;
@@ -731,7 +867,7 @@ export default {
   color: #171826;
   font-size: 16px;
 }
-.bid_select>img{
+.bid_select > img {
   width: 24px;
   height: 24px;
 }
@@ -740,15 +876,14 @@ export default {
   flex-direction: row;
 }
 
-.cancel_select{
+.cancel_select {
   font-size: 14px;
-  color: #2ABED1;
+  color: #2abed1;
   margin-left: 16px;
 }
 
-.popupTime .van-checkbox__icon--checked .van-icon.van-icon-success{
-  background-color: #2ABED1;
-  border-color: #2ABED1;
+.popupTime .van-checkbox__icon--checked .van-icon.van-icon-success {
+  background-color: #2abed1;
+  border-color: #2abed1;
 }
-
 </style>

+ 2 - 2
apps/mobile/src/components/cell/filter-cell/index.stories.js

@@ -17,7 +17,7 @@ const Template = (args, { argTypes }) => ({
   //     </div>
   //   )
   // },
-  data () {
+  data() {
     return {
       value1: true,
       value2: false,
@@ -36,7 +36,7 @@ const Template = (args, { argTypes }) => ({
     </div>
   `,
   methods: {
-    onCellClick (item) {
+    onCellClick(item) {
       if (item.isTag) {
         Toast('需开通')
       }

+ 31 - 27
apps/mobile/src/components/cell/filter-cell/index.vue

@@ -1,25 +1,29 @@
 <template>
-  <div class="filter-cell-group" :class="{'clickable': clickable}" @click="onCellClick">
-     <div class="filter-cell-title">
-        <div style="flex-shrink: 0;">
-          <span class="cell-title-left">{{ title }}</span>
-          <span v-if="isTag" class="jy-tag">
-            <slot name="tag">开通</slot>
-          </span>
-        </div>
-        <div v-if="isLink" class="cell-title-right">
-          <div class="right-value ellipsis">
-            <slot name="value">已选:</slot>
-            <span>{{ value }}</span>
-          </div>
-          <slot name="right-icon">
-            <AppIcon name="youbian" color="#c0c4cc" size="14"></AppIcon>
-          </slot>
-        </div>
+  <div
+    class="filter-cell-group"
+    :class="{ clickable: clickable }"
+    @click="onCellClick"
+  >
+    <div class="filter-cell-title">
+      <div style="flex-shrink: 0">
+        <span class="cell-title-left">{{ title }}</span>
+        <span v-if="isTag" class="jy-tag">
+          <slot name="tag">开通</slot>
+        </span>
       </div>
-      <div class="filter-cell-label">
-        <slot name="label"></slot>
+      <div v-if="isLink" class="cell-title-right">
+        <div class="right-value ellipsis">
+          <slot name="value">已选:</slot>
+          <span>{{ value }}</span>
+        </div>
+        <slot name="right-icon">
+          <AppIcon name="youbian" color="#c0c4cc" size="14"></AppIcon>
+        </slot>
       </div>
+    </div>
+    <div class="filter-cell-label">
+      <slot name="label"></slot>
+    </div>
   </div>
 </template>
 
@@ -58,7 +62,7 @@ export default {
     }
   },
   methods: {
-    onCellClick () {
+    onCellClick() {
       this.$emit('onClick')
     }
   }
@@ -66,33 +70,33 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.filter-cell-group{
+.filter-cell-group {
   padding: 16px;
   border-bottom: 1px solid $border_color_3;
-  .filter-cell-title{
+  .filter-cell-title {
     display: flex;
     align-items: center;
     justify-content: space-between;
     color: #171826;
     line-height: 24px;
     font-size: 14px;
-    .cell-title-left{
+    .cell-title-left {
       margin-right: 4px;
     }
-    .cell-title-right{
+    .cell-title-right {
       display: flex;
       align-items: center;
       font-size: 13px;
       color: #9b9ca3;
-      span{
+      span {
         margin-right: 4px;
       }
     }
-    .right-value{
+    .right-value {
       max-width: 230px;
     }
   }
-  .filter-cell-label{
+  .filter-cell-label {
     margin-top: 2px;
   }
 }

+ 11 - 10
apps/mobile/src/components/common/CountDownButton.vue

@@ -6,7 +6,8 @@
       :disabled="buttonDisabeld"
       :loading="sLoading"
       @click="buttonClick"
-    >{{ buttonText }}</van-button>
+      >{{ buttonText }}</van-button
+    >
   </div>
 </template>
 
@@ -35,31 +36,31 @@ export default {
       default: false
     }
   },
-  data () {
+  data() {
     return {
       timerId: 0,
       count: 0
     }
   },
   computed: {
-    buttonText () {
+    buttonText() {
       const dText = this.defaultText
       return this.count <= 0 ? dText : `${this.count}s`
     },
-    sLoading () {
+    sLoading() {
       return this.loading
     },
-    buttonDisabeld () {
+    buttonDisabeld() {
       // 如果count不为0,则说明定时器一直在走
       return !!this.count || this.disabled
     }
   },
-  created () {},
+  created() {},
   methods: {
-    buttonClick () {
+    buttonClick() {
       this.$emit('click', this.startTimer)
     },
-    startTimer (start = 0) {
+    startTimer(start = 0) {
       this.count = start || this.countdown
       this.timerId = setInterval(() => {
         this.count--
@@ -68,7 +69,7 @@ export default {
         }
       }, 1000)
     },
-    reset () {
+    reset() {
       clearInterval(this.timerId)
       this.timerId = 0
       this.count = 0
@@ -84,7 +85,7 @@ export default {
     font-size: 14px;
     border: none;
     &[disabled] {
-      color: #9B9CA3;
+      color: #9b9ca3;
       opacity: 1;
     }
   }

+ 19 - 18
apps/mobile/src/components/common/DetailCard.vue

@@ -1,5 +1,5 @@
 <template>
-<!--  明细UI,参考剑鱼币明细页面样式-->
+  <!--  明细UI,参考剑鱼币明细页面样式-->
   <div class="detail-card">
     <div>
       <slot name="tag" :info="info">
@@ -8,19 +8,22 @@
     </div>
     <div class="item-con">
       <P class="item-title" v-html="info.name"></P>
-      <p class="item-des ellipsis" v-if="info.desc">{{info.desc}}</p>
-      <p class="item-time" v-if="info.createTime">{{ info.createTime}}</p>
+      <p class="item-des ellipsis" v-if="info.desc">{{ info.desc }}</p>
+      <p class="item-time" v-if="info.createTime">{{ info.createTime }}</p>
     </div>
     <p class="score">
       <slot name="right-content">
-        <span style="position: absolute;right:0;" :style="{'color': scoreColor}">{{ info.point }}</span>
+        <span
+          style="position: absolute; right: 0"
+          :style="{ color: scoreColor }"
+          >{{ info.point }}</span
+        >
       </slot>
     </p>
   </div>
 </template>
 
 <script>
-
 import { Tag } from 'vant'
 
 export default {
@@ -39,45 +42,43 @@ export default {
       default: '#5F5E64'
     }
   },
-  data () {
-    return {
-    }
+  data() {
+    return {}
   }
 }
 </script>
 
 <style lang="scss" scoped>
-.detail-card{
+.detail-card {
   background: #fff;
   display: grid;
   grid-template-columns: 48px auto 20%;
-  .item-con{
+  .item-con {
     overflow: hidden;
     .item-title {
       color: #171826;
       font-size: 15px;
       line-height: 22px;
-      margin-bottom:5px;
+      margin-bottom: 5px;
     }
-    .item-des{
-      color: #5F5E64;
+    .item-des {
+      color: #5f5e64;
       font-size: 12px;
       line-height: 18px;
       margin-bottom: 4px;
     }
-    .item-time{
-      color: #C0C4CC;
+    .item-time {
+      color: #c0c4cc;
       font-size: 12px;
       line-height: 18px;
     }
   }
-  .score{
-    color: #5F5E64;
+  .score {
+    color: #5f5e64;
     text-align: right;
     font-size: 16px;
     line-height: 24px;
     white-space: nowrap;
   }
 }
-
 </style>

+ 15 - 14
apps/mobile/src/components/common/Dialog.vue

@@ -11,8 +11,9 @@
       cancel-button-color="#171826"
       confirm-button-color="#2ABED1"
       :confirmButtonText="confirmButtonText"
-      get-container="body">
-        <slot name="content"></slot>
+      get-container="body"
+    >
+      <slot name="content"></slot>
     </van-dialog>
   </div>
 </template>
@@ -43,20 +44,20 @@ export default {
     }
   },
   watch: {
-    showDialog (newval) {
+    showDialog(newval) {
       this.showDialogData = newval
     }
   },
-  data () {
+  data() {
     return {
       showDialogData: false
     }
   },
   methods: {
-    setCancel () {
+    setCancel() {
       this.$emit('cancel')
     },
-    setConfirm () {
+    setConfirm() {
       this.$emit('confirm')
     }
   }
@@ -66,37 +67,37 @@ export default {
 <style lang="scss" scoped>
 .dialog_common.van-dialog {
   width: 304px;
-  background: #FFFFFF;
+  background: #ffffff;
   border-radius: 8px;
   ::v-deep {
-    .van-dialog__header{
+    .van-dialog__header {
       padding-top: 24px;
       color: #171826;
       font-weight: 400;
       font-size: 18px;
       line-height: 26px;
     }
-    .van-dialog__content{
+    .van-dialog__content {
       padding: 8px 24px 24px;
-      .attachment-email-input{
+      .attachment-email-input {
         margin-top: 16px;
         height: 48px;
         border: 1px solid rgba(0, 0, 0, 0.1);
         border-radius: 4px;
-        color: #5F5E64;
+        color: #5f5e64;
         font-size: 15px;
         line-height: 22px;
       }
-      &>p {
+      & > p {
         padding: 0 6px;
         font-size: 15px;
         line-height: 22px;
         .high_info {
-          color: #2ABED1;
+          color: #2abed1;
         }
       }
     }
-    .van-dialog__footer{
+    .van-dialog__footer {
       .van-button {
         font-size: 18px;
       }

+ 11 - 3
apps/mobile/src/components/common/DropdownLayout.vue

@@ -1,5 +1,9 @@
 <template>
-  <div class="j-container layout-card" ref="layoutCard" :style="{'max-height': maxHeight }">
+  <div
+    class="j-container layout-card"
+    ref="layoutCard"
+    :style="{ 'max-height': maxHeight }"
+  >
     <div class="j-main">
       <slot name="default"></slot>
       <slot name="main"></slot>
@@ -7,8 +11,12 @@
     <div class="j-footer">
       <slot name="footer">
         <div class="j-button-group height40">
-          <button class="j-button-cancel" @click="$emit('cancel')">{{ cancelText }}</button>
-          <button class="j-button-confirm" @click="$emit('confirm')">{{ confirmText }}</button>
+          <button class="j-button-cancel" @click="$emit('cancel')">
+            {{ cancelText }}
+          </button>
+          <button class="j-button-confirm" @click="$emit('confirm')">
+            {{ confirmText }}
+          </button>
         </div>
       </slot>
     </div>

+ 18 - 14
apps/mobile/src/components/common/PageLayout.vue

@@ -1,11 +1,11 @@
 <template>
   <div class="j-container layout-search">
     <page-search
-        :value="value"
-        :placeholder="placeholder"
-        @clear="onSearch('clear')"
-        @submit="onSearch('submit', $event)"
-        @input="onSearch('input', $event)"
+      :value="value"
+      :placeholder="placeholder"
+      @clear="onSearch('clear')"
+      @submit="onSearch('submit', $event)"
+      @input="onSearch('input', $event)"
     ></page-search>
     <div class="j-main layout-search-content">
       <slot name="default"></slot>
@@ -37,15 +37,19 @@ export default {
     }
   },
   methods: {
-    onSubmit: debounce(function (type, data) {
-      this.$emit('top-event', {
-        type,
-        data
-      })
-    }, 300, {
-      leading: true
-    }),
-    onSearch (type, data) {
+    onSubmit: debounce(
+      function (type, data) {
+        this.$emit('top-event', {
+          type,
+          data
+        })
+      },
+      300,
+      {
+        leading: true
+      }
+    ),
+    onSearch(type, data) {
       if (type === 'input') {
         this.$emit('input', data)
       }

+ 28 - 28
apps/mobile/src/components/common/PageSearch.vue

@@ -1,10 +1,10 @@
 <template>
   <van-search
-      :placeholder="placeholder"
-      :value="value"
-      @search="$emit('submit', $event)"
-      @input="$emit('input', $event)"
-      @clear="$emit('clear')"
+    :placeholder="placeholder"
+    :value="value"
+    @search="$emit('submit', $event)"
+    @input="$emit('input', $event)"
+    @clear="$emit('clear')"
   >
     <template #left-icon>
       <span class="iconfont icon-search"></span>
@@ -35,32 +35,32 @@ export default {
 
 <style lang="scss" scoped>
 .van-search {
-    padding: 9px 16px;
-    .van-search__content{
-      border-radius: 4px;
-      height: 36px;
-      .icon-search{
-        font-size: 24px;
-        color: #C0C4CC;
-      }
-      ::v-deep{
-        .van-cell{
-          line-height: 26px;
-          .van-field__left-icon{
-            margin-right: 0;
-          }
-        }
-        .van-cell__value{
-          padding-left: 12px;
+  padding: 9px 16px;
+  .van-search__content {
+    border-radius: 4px;
+    height: 36px;
+    .icon-search {
+      font-size: 24px;
+      color: #c0c4cc;
+    }
+    ::v-deep {
+      .van-cell {
+        line-height: 26px;
+        .van-field__left-icon {
+          margin-right: 0;
         }
-        .van-field__control{
-          // line-height: 20px;
-          &::placeholder{
-            font-size: 14px;
-            color: #C0C4CC;
-          }
+      }
+      .van-cell__value {
+        padding-left: 12px;
+      }
+      .van-field__control {
+        // line-height: 20px;
+        &::placeholder {
+          font-size: 14px;
+          color: #c0c4cc;
         }
       }
     }
   }
+}
 </style>

+ 6 - 2
apps/mobile/src/components/common/PopupLayout.vue

@@ -4,7 +4,11 @@
       <slot name="header">
         <div class="header-nav">
           <div class="header-nav-title">{{ title }}</div>
-          <van-icon class="header-nav-close" name="clear" @click="closeIconClick" />
+          <van-icon
+            class="header-nav-close"
+            name="clear"
+            @click="closeIconClick"
+          />
         </div>
       </slot>
     </div>
@@ -31,7 +35,7 @@ export default {
     }
   },
   methods: {
-    closeIconClick () {
+    closeIconClick() {
       this.$emit('closeIconClick')
     }
   }

+ 68 - 70
apps/mobile/src/components/common/SearchAssociate.vue

@@ -1,38 +1,37 @@
 <template>
-   <div class="search-associate-com">
-     <van-field
-       clearable
-       class="search-associate"
-       :size="size"
-       type="search"
-       :value="value"
-       :maxlength="maxlength"
-       :placeholder="placeholder"
-       :formatter="formatter"
-       @blur="onBlur"
-       @focus="onFocus"
-       @input="onInput($event)"
-       @clear="$emit('clear')"
-     >
-     </van-field>
-     <div class="associate-container" v-show="showAssociate">
-       <van-cell
-         class="ass-row"
-         v-for="(item, index) in associateList"
-         :title="item.label"
-         :key="'ass_' + index"
-         @click="selectedValue(item)"
-       >
-         <template #title>
-           <span v-html="replaceKeyword(item.label, value)"></span>
-         </template>
-       </van-cell>
-     </div>
-   </div>
+  <div class="search-associate-com">
+    <van-field
+      clearable
+      class="search-associate"
+      :size="size"
+      type="search"
+      :value="value"
+      :maxlength="maxlength"
+      :placeholder="placeholder"
+      :formatter="formatter"
+      @blur="onBlur"
+      @focus="onFocus"
+      @input="onInput($event)"
+      @clear="$emit('clear')"
+    >
+    </van-field>
+    <div class="associate-container" v-show="showAssociate">
+      <van-cell
+        class="ass-row"
+        v-for="(item, index) in associateList"
+        :title="item.label"
+        :key="'ass_' + index"
+        @click="selectedValue(item)"
+      >
+        <template #title>
+          <span v-html="replaceKeyword(item.label, value)"></span>
+        </template>
+      </van-cell>
+    </div>
+  </div>
 </template>
 
 <script>
-
 import { Field, Cell } from 'vant'
 import { replaceKeyword } from '@/utils'
 export default {
@@ -71,39 +70,39 @@ export default {
       default: () => []
     }
   },
-  data () {
+  data() {
     return {
       showAssociate: false,
       timer: null
     }
   },
   watch: {
-    associateList (val) {
+    associateList(val) {
       this.showAssociate = val?.length > 0
     }
   },
-  beforeDestroy () {
+  beforeDestroy() {
     if (this.timer) clearTimeout(this.timer)
   },
   methods: {
     replaceKeyword,
-    formatter (value) {
+    formatter(value) {
       return value.replace(/\s{2,}/g, ' ')
     },
-    onFocus () {
+    onFocus() {
       this.$emit('focus', this.value.trim())
     },
-    onBlur () {
+    onBlur() {
       if (this.timer) clearTimeout(this.timer)
       this.timer = setTimeout(() => {
         this.showAssociate = false
       }, 300)
       this.$emit('blur', this.value.trim())
     },
-    onInput ($event) {
+    onInput($event) {
       this.$emit('input', $event)
     },
-    selectedValue (item) {
+    selectedValue(item) {
       this.showAssociate = false
       this.$emit('selected', item.value.trim())
     }
@@ -112,39 +111,38 @@ export default {
 </script>
 
 <style lang="scss">
-  .search-associate-com{
-    position: relative;
-    width:100%;
-    .search-associate{
-      font-size:14px;
-      &::after {
-        content: unset;
-      }
-      &.van-cell{
-        background: transparent;
-        border-radius: 2px;
-        width:100%;
-        border: 0.5px solid rgba(0, 0, 0, 0.2);
-        padding:6px 12px;
-      }
+.search-associate-com {
+  position: relative;
+  width: 100%;
+  .search-associate {
+    font-size: 14px;
+    &::after {
+      content: unset;
     }
-    .associate-container{
-      padding: 8px 0;
+    &.van-cell {
+      background: transparent;
+      border-radius: 2px;
       width: 100%;
-      max-height: 240px;
-      overflow-y: auto;
-      background: #fff;
-      position: absolute;
-      top:44px;
-      transform: translateX(-50%);
-      left:50%;
-      border-radius: 8px;
-      z-index:1;
-      box-shadow: 0 4px 16px 0 rgba(8, 31, 38, 0.08);
-      .van-cell{
-        font-size:14px;
-      }
+      border: 0.5px solid rgba(0, 0, 0, 0.2);
+      padding: 6px 12px;
     }
   }
-
+  .associate-container {
+    padding: 8px 0;
+    width: 100%;
+    max-height: 240px;
+    overflow-y: auto;
+    background: #fff;
+    position: absolute;
+    top: 44px;
+    transform: translateX(-50%);
+    left: 50%;
+    border-radius: 8px;
+    z-index: 1;
+    box-shadow: 0 4px 16px 0 rgba(8, 31, 38, 0.08);
+    .van-cell {
+      font-size: 14px;
+    }
+  }
+}
 </style>

+ 8 - 4
apps/mobile/src/components/common/SpecCard.vue

@@ -1,5 +1,9 @@
 <template>
-  <div class="spec-card" :class="[mark, active ? 'active' : '']" @click="clickCard">
+  <div
+    class="spec-card"
+    :class="[mark, active ? 'active' : '']"
+    @click="clickCard"
+  >
     <slot name="default"></slot>
   </div>
 </template>
@@ -18,7 +22,7 @@ export default {
     }
   },
   methods: {
-    clickCard () {
+    clickCard() {
       this.$emit('onClick')
     }
   }
@@ -43,8 +47,8 @@ export default {
     &::after {
       content: '';
       position: absolute;
-      right: -2Px;
-      bottom: -2Px;
+      right: -2px;
+      bottom: -2px;
       width: 22px;
       height: 22px;
       background-image: url(@/assets/image/icon/icon-button-mark.png);

+ 45 - 33
apps/mobile/src/components/common/layout.vue

@@ -1,54 +1,66 @@
 <template>
-  <div id="app" class="j-container" :class="{'transparent-header': layoutConf.transparentHeader}">
+  <div
+    id="app"
+    class="j-container"
+    :class="{ 'transparent-header': layoutConf.transparentHeader }"
+  >
     <div
       v-if="showOldHeader"
       class="j-header jy-app-header common-app-header"
-      :class="{'border-line-b': borderShow, 'h5-header': $envs.inH5}"
-      :style="layoutConf.positionStyle">
+      :class="{ 'border-line-b': borderShow, 'h5-header': $envs.inH5 }"
+      :style="layoutConf.positionStyle"
+    >
       <van-icon
         class="header-left"
         :style="layoutConf.actionLeftStyle"
         :class="{ hide: layoutConf.actionLeftHide }"
         name="arrow-left"
-        @click="clickLeft" />
+        @click="clickLeft"
+      />
       <span
         class="header-title"
         v-show="showHeaderTitle"
         :style="layoutConf.titleStyle"
-        v-html="layoutConf.title"></span>
+        v-html="layoutConf.title"
+      ></span>
       <span
         class="header-right"
         :style="layoutConf.actionRightStyle"
         v-html="layoutConf.actionRightText"
-        @click="clickRight"></span>
+        @click="clickRight"
+      ></span>
     </div>
     <van-nav-bar
       v-if="showNewHeader || showHeaderInWX"
       class="j-header van-app-header common-app-header"
-      :class="{'h5-header': $envs.inH5 || showHeaderInWX}"
+      :class="{ 'h5-header': $envs.inH5 || showHeaderInWX }"
       :style="layoutConf.positionStyle"
       :border="borderShow"
       @click-left="clickLeft"
-      @click-right="clickRight">
+      @click-right="clickRight"
+    >
       <template #left>
         <van-icon
           class="header-left"
           :style="layoutConf.actionLeftStyle"
           :class="{ hide: layoutConf.actionLeftHide }"
-          name="arrow-left" />
+          name="arrow-left"
+        />
       </template>
       <template #title>
         <span
           v-show="showHeaderTitle"
           class="header-title"
           :style="layoutConf.titleStyle"
-          v-html="layoutConf.title"></span>
+          v-html="layoutConf.title"
+        ></span>
       </template>
       <template #right>
         <span
           class="header-right"
           :style="layoutConf.actionRightStyle"
-          v-html="layoutConf.actionRightText"></span>
+          v-html="layoutConf.actionRightText"
+        ></span>
       </template>
     </van-nav-bar>
     <div class="j-main">
@@ -71,7 +83,7 @@ export default {
     [NavBar.name]: NavBar,
     [Icon.name]: Icon
   },
-  data () {
+  data() {
     const { noop } = this
     return {
       useHeader: false,
@@ -110,24 +122,24 @@ export default {
     }
   },
   computed: {
-    showOldHeader () {
+    showOldHeader() {
       return this.useHeader && this.inAppOrH5 && !this.useNewHeader
     },
-    showNewHeader () {
+    showNewHeader() {
       return this.useHeader && this.inAppOrH5 && this.useNewHeader
     },
-    showHeaderInWX () {
+    showHeaderInWX() {
       const { inWX } = this.$envs
       return this.showHeaderInWXThisPage && inWX
     },
-    showHeaderTitle () {
+    showHeaderTitle() {
       // 当微信端展示头部时,头部的title部分则隐藏
       return !this.showHeaderInWX
     },
-    inAppOrH5 () {
+    inAppOrH5() {
       return this.$envs.inAppOrH5
     },
-    borderShow () {
+    borderShow() {
       return !this.layoutConf.hideBorder && !this.layoutConf.transparentHeader
     }
   },
@@ -145,36 +157,36 @@ export default {
       this.setTitle(n)
     }
   },
-  created () {
+  created() {
     this.getHeaderUseState()
     this.eventBusListening()
     this.resetLayoutConf()
   },
   methods: {
-    checkHeaderShowInWX () {
+    checkHeaderShowInWX() {
       const { actionRightText, onClickRight } = this.layoutConf
       const changedRightEvent = onClickRight !== this.noop
       if (actionRightText || changedRightEvent) {
         this.showHeaderInWXThisPage = true
       }
     },
-    getHeaderUseState () {
+    getHeaderUseState() {
       this.useHeader = this.$route.meta?.header
       return this.useHeader
     },
-    clickLeft (e) {
+    clickLeft(e) {
       const { onClickLeft } = this.layoutConf
       onClickLeft && onClickLeft(e)
     },
-    clickRight (e) {
+    clickRight(e) {
       const { onClickRight, actionRightText } = this.layoutConf
       // 如果头部右侧按钮绑定了事件但是文字为空,则不执行事件
       if (actionRightText) {
         onClickRight && onClickRight(e)
       }
     },
-    eventBusListening () {
-      EventBus.$on('headerConf:merge', conf => {
+    eventBusListening() {
+      EventBus.$on('headerConf:merge', (conf) => {
         if (!conf) return
         if (Object.keys(conf).length === 0) return
         this.mergePageConf(conf)
@@ -196,21 +208,21 @@ export default {
       })
     },
     // 从 meta 重新获取 title
-    refreshHeader () {
+    refreshHeader() {
       const { title } = this.$route.meta
       // 修改头部标题
       const setTitle = title || this.defaultLayoutConf.title
       this.layoutConf.title = setTitle
       this.setTitle(setTitle)
     },
-    setTitle (title) {
+    setTitle(title) {
       document.title = title
     },
-    mergePageConf (conf) {
+    mergePageConf(conf) {
       this.getHeaderUseState()
       Object.assign(this.layoutConf, conf)
     },
-    resetLayoutConf () {
+    resetLayoutConf() {
       // reset 时忽略 title 等
       const ignoreKeys = ['title']
       this.showHeaderInWXThisPage = false
@@ -260,7 +272,7 @@ export default {
     padding: 40px 12px 0;
     min-height: 20px;
     background-color: #fff;
-    font-family: "Avenir", Helvetica, Arial, sans-serif;
+    font-family: 'Avenir', Helvetica, Arial, sans-serif;
     &.h5-header {
       height: 40px;
       padding: 0 12px;
@@ -281,7 +293,7 @@ export default {
       }
     }
     .header-left.van-icon {
-      color: #5F5E64;
+      color: #5f5e64;
     }
     .van-nav-bar__content {
       justify-content: space-between;
@@ -334,7 +346,7 @@ export default {
   // 所有都j-main开启ios-touch
   -webkit-overflow-scrolling: touch;
   .calc-height-1px {
-    height: calc(100% + 1Px);
+    height: calc(100% + 1px);
   }
 
   // 单独关闭ios惯性滑动
@@ -354,6 +366,6 @@ export default {
 }
 
 .j-footer {
-  box-shadow: 0px -2Px 8Px rgba(54, 147, 179, 0.051);
+  box-shadow: 0px -2px 8px rgba(54, 147, 179, 0.051);
 }
 </style>

+ 199 - 128
apps/mobile/src/components/coupon/CouponItem.vue

@@ -1,69 +1,127 @@
 <template>
   <div class="coupon-item card">
     <div class="card-content">
-      <div
-        class="type"
-        :class="mold === 4 ? bgClass: ''"
-      >{{ coupon.lotteryAttribute }}</div>
+      <div class="type" :class="mold === 4 ? bgClass : ''">
+        {{ coupon.lotteryAttribute }}
+      </div>
       <label class="card-content-text">
         <div class="card-text-top">
           <div>
-            <span class="price" :class="{'gray': mold !== 4 || disabled }">
-              <span :class="{'reduce-color':  mold === 4 }" v-if="activeType === 0">
-                ¥<strong>{{coupon.reduce}}</strong>
+            <span class="price" :class="{ gray: mold !== 4 || disabled }">
+              <span
+                :class="{ 'reduce-color': mold === 4 }"
+                v-if="activeType === 0"
+              >
+                ¥<strong>{{ coupon.reduce }}</strong>
               </span>
-              <span :class="{'dis-color': mold === 4 }" v-else-if="activeType === 1">
-                <strong>{{coupon.disCount}}<em class="em-label">折</em></strong>
+              <span
+                :class="{ 'dis-color': mold === 4 }"
+                v-else-if="activeType === 1"
+              >
+                <strong
+                  >{{ coupon.disCount }}<em class="em-label">折</em></strong
+                >
               </span>
-              <span :class="{'gift-color': mold === 4}" v-else-if="activeType === 2">
+              <span
+                :class="{ 'gift-color': mold === 4 }"
+                v-else-if="activeType === 2"
+              >
                 <strong>
                   <em class="em-label">送</em>
-                  {{coupon.time}}
-                  <em class="em-label" v-if="coupon.timeType">{{timeType[coupon.timeType]}}</em>
+                  {{ coupon.time }}
+                  <em class="em-label" v-if="coupon.timeType">{{
+                    timeType[coupon.timeType]
+                  }}</em>
                 </strong>
               </span>
-              <span :class="{ 'limit-color': mold === 4 }" v-else-if="activeType> 2">
-                <strong v-if="activeType === 3"><em class="em-label">特惠价:</em>{{coupon.promotionalPrice}}<em class="em-label">元</em></strong>
-                <strong v-if="activeType === 4">{{coupon.disCount}}<em class="em-label">折</em></strong>
-                <strong v-if="activeType === 5"><em class="em-label">立减</em>{{coupon.reduce}}<em class="em-label">元</em></strong>
+              <span
+                :class="{ 'limit-color': mold === 4 }"
+                v-else-if="activeType > 2"
+              >
+                <strong v-if="activeType === 3"
+                  ><em class="em-label">特惠价:</em>{{ coupon.promotionalPrice
+                  }}<em class="em-label">元</em></strong
+                >
+                <strong v-if="activeType === 4"
+                  >{{ coupon.disCount }}<em class="em-label">折</em></strong
+                >
+                <strong v-if="activeType === 5"
+                  ><em class="em-label">立减</em>{{ coupon.reduce
+                  }}<em class="em-label">元</em></strong
+                >
               </span>
             </span>
             <span
               v-if="activeType < 2"
               class="usable"
               :class="{
-              'gray gray-bg': mold != 4 || disabled,
-              'dis-opacity': mold === 4 && activeType === 1,
-              'reduce-opacity': mold === 4 && activeType === 0}">
-              满{{coupon.full}}元可用</span>
+                'gray gray-bg': mold != 4 || disabled,
+                'dis-opacity': mold === 4 && activeType === 1,
+                'reduce-opacity': mold === 4 && activeType === 0
+              }"
+            >
+              满{{ coupon.full }}元可用</span
+            >
+          </div>
+          <div
+            class="use-time"
+            v-if="mold === 4 && !coupon.available && preTimeText"
+          >
+            <span>活动开始倒计时:{{ preTimeText }}</span>
+          </div>
+          <div class="use-time" v-else>
+            {{ formatDate(coupon.lotteryBeginDate) }} -
+            {{ formatDate(coupon.lotteryEndDate)
+            }}<span
+              v-if="expireDays(coupon.lotteryEndDate) && mold === 4"
+              class="expire-time"
+              >{{ expireDays(coupon.lotteryEndDate) }}</span
+            >
           </div>
-          <div class="use-time" v-if="mold === 4 && !coupon.available && preTimeText"><span>活动开始倒计时:{{preTimeText}}</span></div>
-          <div class="use-time" v-else>{{formatDate(coupon.lotteryBeginDate)}} - {{ formatDate(coupon.lotteryEndDate) }}<span v-if="expireDays(coupon.lotteryEndDate) && mold === 4" class="expire-time">{{expireDays(coupon.lotteryEndDate)}}</span></div>
         </div>
         <div
           v-if="mold === 4 && coupon.available"
           class="use-btn"
           :class="bgClass"
           @click="toUseFn(coupon)"
-        >去使用</div>
+        >
+          去使用
+        </div>
         <div
           v-if="mold === 4 && !coupon.available"
           class="unuse-btn"
           :class="btnClass"
-        >暂不可用</div>
+        >
+          暂不可用
+        </div>
       </label>
-      <div class="use-range ellipsis-2" :class="[ mold != 4 || disabled ? 'gray' : '']">
+      <div
+        class="use-range ellipsis-2"
+        :class="[mold != 4 || disabled ? 'gray' : '']"
+      >
         适用于:
         <span>{{ coupon.str }}</span>
       </div>
       <!-- 限时特惠名额(活动进行中)-->
-      <div class="limit-time-count" v-if="mold === 4 && coupon.available && activeType > 2">限时特惠名额:<strong>{{coupon.stockNumber}}</strong>个,欲速从购</div>
+      <div
+        class="limit-time-count"
+        v-if="mold === 4 && coupon.available && activeType > 2"
+      >
+        限时特惠名额:<strong>{{ coupon.stockNumber }}</strong
+        >个,欲速从购
+      </div>
       <!-- 活动开始倒计时(活动未开始)-->
-      <div class="active-count-down" v-if="mold === 4 && !coupon.available && preTimeText"><span class="label">活动未开始</span><span>活动开始倒计时:{{preTimeText}}</span></div>
+      <div
+        class="active-count-down"
+        v-if="mold === 4 && !coupon.available && preTimeText"
+      >
+        <span class="label">活动未开始</span
+        ><span>活动开始倒计时:{{ preTimeText }}</span>
+      </div>
       <div class="outer-race red-race" v-if="mold === 3">
         <div class="inner-race red-race">已使用</div>
       </div>
-      <div class="outer-race gray-race"  v-if="mold === 2">
+      <div class="outer-race gray-race" v-if="mold === 2">
         <div class="inner-race gray-race">已失效</div>
       </div>
       <div class="cro_left_bottom"></div>
@@ -73,13 +131,17 @@
       <div class="cro_left_top"></div>
       <div class="cro_right_top"></div>
       <van-cell
-        :title-class="coupon.isOpen ? '' : 'ellipsis' "
-        :style="{lineHeight:(coupon.isOpen ? '18px' : '')}"
+        :title-class="coupon.isOpen ? '' : 'ellipsis'"
+        :style="{ lineHeight: coupon.isOpen ? '18px' : '' }"
         :arrow-direction="coupon.isOpen ? 'down' : 'up'"
         is-link
-        @click="switchEvent" >
+        @click="switchEvent"
+      >
         <template #title>
-          <span class="custom-title" v-html="coupon.isOpen ? (activeTitle + coupon.str) : defaultTitle "></span>
+          <span
+            class="custom-title"
+            v-html="coupon.isOpen ? activeTitle + coupon.str : defaultTitle"
+          ></span>
         </template>
       </van-cell>
     </div>
@@ -97,7 +159,7 @@ export default {
   props: {
     coupon: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     },
@@ -109,10 +171,12 @@ export default {
       default: false
     }
   },
-  data () {
+  data() {
     return {
-      defaultTitle: '使用说明: 1.不与其他活动优惠同时享受,在线支付专享。 2.支付时可抵扣现金,不可拆分、不可叠加、不可找零。',
-      activeTitle: '使用说明:<br> 1.不与其他活动优惠同时享受,在线支付专享。<br> 2.支付时可抵扣现金,不可拆分、不可叠加、不可找零。<br> 适用产品:<br>',
+      defaultTitle:
+        '使用说明: 1.不与其他活动优惠同时享受,在线支付专享。 2.支付时可抵扣现金,不可拆分、不可叠加、不可找零。',
+      activeTitle:
+        '使用说明:<br> 1.不与其他活动优惠同时享受,在线支付专享。<br> 2.支付时可抵扣现金,不可拆分、不可叠加、不可找零。<br> 适用产品:<br>',
       typeList: [
         {
           activeName: '满减',
@@ -165,7 +229,7 @@ export default {
   },
   computed: {
     // 获取当前奖券类
-    bgClass () {
+    bgClass() {
       let className
       if (this.coupon.lotteryAttribute) {
         for (let i = 0; i < this.typeList.length; i++) {
@@ -179,7 +243,7 @@ export default {
       return className
     },
     // 获取当前券按钮类
-    btnClass () {
+    btnClass() {
       let className
       if (this.coupon.lotteryAttribute) {
         for (let i = 0; i < this.typeList.length; i++) {
@@ -193,7 +257,7 @@ export default {
       return className
     },
     // 获取当前类型
-    activeType () {
+    activeType() {
       let type
       if (this.coupon.lotteryAttribute) {
         for (let i = 0; i < this.typeList.length; i++) {
@@ -207,21 +271,23 @@ export default {
       return type
     }
   },
-  created () {
+  created() {
     if (this.coupon.activityStartTime) {
       this.activeCountDown()
     }
   },
-  beforeDestroy () {
+  beforeDestroy() {
     if (this.timer) {
       clearInterval(this.timer)
     }
   },
   methods: {
-    formatDate (data) {
-      return data.replace(/-/g, '.').replace(/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/g, '')
+    formatDate(data) {
+      return data
+        .replace(/-/g, '.')
+        .replace(/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/g, '')
     },
-    expireDays (endDate) {
+    expireDays(endDate) {
       const endTime = endDate.replace(/-/g, '/')
       const endTimeStamp = new Date(endTime).getTime()
       const nowDayStamp = Date.now()
@@ -234,16 +300,19 @@ export default {
         return ''
       }
     },
-    switchEvent () {
+    switchEvent() {
       this.$set(this.coupon, 'isOpen', !this.coupon.isOpen)
     },
-    toUseFn (coupon) {
+    toUseFn(coupon) {
       const id = coupon.lotteryId
       const list = coupon.products
       const isMost = this.getNewSinglePro(list)
       const url = this.getProUrl(list)
       if (isMost) {
-        openAppOrWxPage({ wx: '/weixin/frontPage/coupon/free/selectProduct?couponId=' + id, app: '/jyapp/frontPage/coupon/free/selectProduct?couponId=' + id })
+        openAppOrWxPage({
+          wx: '/weixin/frontPage/coupon/free/selectProduct?couponId=' + id,
+          app: '/jyapp/frontPage/coupon/free/selectProduct?couponId=' + id
+        })
       } else {
         if (url.indexOf('?') > -1) {
           openLinkOfOther(url + '&couponId=' + id)
@@ -253,26 +322,29 @@ export default {
       }
     },
     // 获取产品跳转的url 进行去重
-    getProUrl (list) {
+    getProUrl(list) {
       if (!list) return
-      const arr = list.map(item => {
+      const arr = list.map((item) => {
         return item.url
       })
       // 添加完父级产品id后进行去重
       return Array.from(new Set(arr)).toString()
     },
     // 通过产品的父级id判断是否属于同一个产品
-    getNewSinglePro (list) {
+    getNewSinglePro(list) {
       if (!list) return
-      const arr = list.map(item => {
+      const arr = list.map((item) => {
         return item.parentCode
       })
       // 添加完父级产品id后进行去重
       return Array.from(new Set(arr)).length > 1
     },
     // 活动开始倒计时
-    activeCountDown () {
-      const time = this.coupon.activityStartTime.toString().length === 10 ? this.coupon.activityStartTime * 1000 : this.coupon.activityStartTime
+    activeCountDown() {
+      const time =
+        this.coupon.activityStartTime.toString().length === 10
+          ? this.coupon.activityStartTime * 1000
+          : this.coupon.activityStartTime
       if (this.timer) clearInterval(this.timer)
       this.preTimeText = countDown(time)
       this.timer = setInterval(() => {
@@ -284,37 +356,37 @@ export default {
 </script>
 
 <style scoped lang="scss">
-.card{
+.card {
   margin-bottom: 20px;
 }
-.type{
+.type {
   position: absolute;
   top: 0;
   left: 0;
   //width: 56px;
-  padding:1px 12px 1px 8px;
+  padding: 1px 12px 1px 8px;
   height: 18px;
   line-height: 17px;
-  background: #EDEFF2;
+  background: #edeff2;
   border-radius: 4px 0px 16px;
   text-align: center;
-  color: #9B9CA3;
+  color: #9b9ca3;
   font-size: 12px;
 }
-.card-content{
+.card-content {
   position: relative;
   padding: 22px 24px 12px;
   background-color: #fff;
   border-radius: 4px;
-  .card-content-text{
+  .card-content-text {
     display: flex;
     justify-content: space-between;
     align-items: center;
   }
-  .card-text-top{
+  .card-text-top {
     margin-top: 4px;
   }
-  .price{
+  .price {
     font-size: 14px;
     line-height: 20px;
     /* color: #FB483D; */
@@ -322,61 +394,61 @@ export default {
       font-size: 20px;
     }
   }
-  .usable{
+  .usable {
     display: inline-block;
     margin-left: 8px;
     padding: 2px 8px;
     background: rgba(251, 72, 61, 0.1);
     border-radius: 8px;
     font-size: 10px;
-    color: #FB483D;
+    color: #fb483d;
   }
-  .use-range{
+  .use-range {
     color: #171826;
     font-size: 12px;
     line-height: 18px;
     /* max-width: 200rem; */
   }
-  .use-btn{
+  .use-btn {
     width: 80px;
     height: 30px;
     line-height: 30px;
     border-radius: 4px;
-    color: #FFFFFF;
+    color: #ffffff;
     font-size: 13px;
     text-align: center;
   }
-  .unuse-btn{
-    @extend .use-btn
+  .unuse-btn {
+    @extend .use-btn;
   }
-  .dis-opacity-btn{
-    color: #FF9F40;
+  .dis-opacity-btn {
+    color: #ff9f40;
     background: rgba(255, 159, 64, 0.15);
   }
-  .reduce-opacity-btn{
+  .reduce-opacity-btn {
     background: rgba(251, 72, 61, 0.15);
-    color: #FB483D;
+    color: #fb483d;
   }
-  .gift-opacity-btn{
-    color: #A34FF8;
+  .gift-opacity-btn {
+    color: #a34ff8;
     background: rgba(163, 79, 248, 0.15);
   }
-  .limit-opacity-btn{
+  .limit-opacity-btn {
     background: rgba(252, 67, 202, 0.15);
-    color: #FC43CA;
+    color: #fc43ca;
   }
-  .use-time{
+  .use-time {
     padding: 8px 0;
-    color: #9B9CA3;
+    color: #9b9ca3;
     font-size: 10px;
     line-height: 14px;
   }
-  .expire-time{
+  .expire-time {
     margin-left: 8px;
-    color: #FB483D;
+    color: #fb483d;
     font-size: 10px;
   }
-  .outer-race{
+  .outer-race {
     position: absolute;
     top: 24px;
     right: 25px;
@@ -389,7 +461,7 @@ export default {
     border-width: 2px;
     border-style: solid;
   }
-  .inner-race{
+  .inner-race {
     display: flex;
     align-items: center;
     justify-content: center;
@@ -402,20 +474,20 @@ export default {
     font-size: 14px;
     white-space: nowrap;
   }
-  .red-race{
-    border-color: #FB483D;
-    color: #FB483D;
+  .red-race {
+    border-color: #fb483d;
+    color: #fb483d;
   }
   .gray-race {
-    border-color: #C0C4CC;
-    color: #C0C4CC;
+    border-color: #c0c4cc;
+    color: #c0c4cc;
   }
 }
 .ellipsis {
   overflow: hidden;
   text-overflow: ellipsis;
   white-space: nowrap;
-  text-align: justify
+  text-align: justify;
 }
 .ellipsis-2 {
   overflow: hidden;
@@ -423,58 +495,58 @@ export default {
   display: -webkit-box;
   -webkit-line-clamp: 2;
   -webkit-box-orient: vertical;
-  text-align: justify
+  text-align: justify;
 }
-.card-footer{
+.card-footer {
   position: relative;
   ::v-deep {
-    .van-cell__title{
+    .van-cell__title {
       font-size: 10px;
-      color: #5F5E64;
+      color: #5f5e64;
     }
     .van-cell--clickable:active {
       background-color: #fff;
     }
-    .van-cell__right-icon{
-      color: #C0C4CC;
+    .van-cell__right-icon {
+      color: #c0c4cc;
     }
   }
 }
-.active-count-down{
-  color: #FB483D;
+.active-count-down {
+  color: #fb483d;
   font-size: 12px;
   margin-top: 8px;
   .label {
     margin-right: 12px;
   }
 }
-.limit-time-count{
+.limit-time-count {
   display: inline-block;
-  color: #FC43CA;
+  color: #fc43ca;
   background: rgba(252, 67, 202, 0.1);
   border-radius: 10px;
-  padding:2px 8px;
+  padding: 2px 8px;
   line-height: 14px;
-  font-size:10px;
+  font-size: 10px;
   text-align: center;
-  margin-top:9px;
-  strong{
+  margin-top: 9px;
+  strong {
     font-size: 12px;
     font-weight: normal;
   }
 }
 .gray {
-  color: #C0C4CC !important;
+  color: #c0c4cc !important;
 }
-.gray-bg{
-  background: #F7F9FA !important;
+.gray-bg {
+  background: #f7f9fa !important;
 }
-.cro_flag{
+.cro_flag {
   position: absolute;
   width: 8px;
   height: 8px;
   z-index: 1;
-  background: #F5F6F7;
+  background: #f5f6f7;
 }
 .cro_left_top {
   @extend .cro_flag;
@@ -501,45 +573,44 @@ export default {
   bottom: -1px;
   border-radius: 8px 0 0 0;
 }
-.dis-bg{
-  background: linear-gradient(90deg, #FFCC66 0%, #FF9F40 100%);
+.dis-bg {
+  background: linear-gradient(90deg, #ffcc66 0%, #ff9f40 100%);
   color: #fff;
 }
-.reduce-bg{
-  background: linear-gradient(180deg, #F74E29 0%, #EF3024 100%);
+.reduce-bg {
+  background: linear-gradient(180deg, #f74e29 0%, #ef3024 100%);
   color: #fff;
 }
 .gift-bg {
-  background: linear-gradient(315deg, #6759FF 0%, #FB39FF 100%);
+  background: linear-gradient(315deg, #6759ff 0%, #fb39ff 100%);
   color: #fff;
 }
 .limit-time-bg {
-  background: linear-gradient(315deg, #FF5959 0%, #FB39FF 100%);
+  background: linear-gradient(315deg, #ff5959 0%, #fb39ff 100%);
   color: #fff;
 }
 
-.dis-color{
-  color: #FF9F40;
+.dis-color {
+  color: #ff9f40;
 }
-.reduce-color{
-  color: #FB483D;
+.reduce-color {
+  color: #fb483d;
 }
-.gift-color{
-  color: #A34FF8;
+.gift-color {
+  color: #a34ff8;
 }
-.limit-color{
-  color: #FC43CA;
+.limit-color {
+  color: #fc43ca;
 }
-.dis-opacity{
-  color: #FF9F40;
+.dis-opacity {
+  color: #ff9f40;
   background: rgba(255, 159, 64, 0.1);
 }
-.reduce-opacity{
+.reduce-opacity {
   background: rgba(251, 72, 61, 0.1);
-  color: #FB483D;
+  color: #fb483d;
 }
-.em-label{
+.em-label {
   font-size: 14px;
 }
-
 </style>

+ 9 - 5
apps/mobile/src/components/coupon/CouponList.vue

@@ -1,7 +1,11 @@
 <template>
   <div class="coupon-list-template">
     <div class="card" v-for="item in couponList" :key="item.lotteryId">
-      <coupon-item :mold="mold" :coupon="item" :disabled="disabled"></coupon-item>
+      <coupon-item
+        :mold="mold"
+        :coupon="item"
+        :disabled="disabled"
+      ></coupon-item>
     </div>
   </div>
 </template>
@@ -25,12 +29,12 @@ export default {
       default: false
     }
   },
-  data () { return {} },
-  mounted () {
+  data() {
+    return {}
   },
+  mounted() {},
   methods: {}
 }
 </script>
 
-<style scoped lang="scss">
-</style>
+<style scoped lang="scss"></style>

+ 36 - 27
apps/mobile/src/components/create-order/CheckEmail.vue

@@ -11,7 +11,12 @@
         @focus="onMailFocus"
       >
         <template slot="right-icon">
-          <van-icon v-show="isAllPass && showRightIcon" name="passed" color="#2ABED1" size="18" />
+          <van-icon
+            v-show="isAllPass && showRightIcon"
+            name="passed"
+            color="#2ABED1"
+            size="18"
+          />
         </template>
       </van-field>
       <van-field
@@ -23,8 +28,10 @@
         @input="checkCode"
       >
         <template #button>
-          <span class="code-text" v-if="sendCodeBtn" @click="sendCode">发送验证码</span>
-          <span class="count-text" v-else>{{countdown}}s</span>
+          <span class="code-text" v-if="sendCodeBtn" @click="sendCode"
+            >发送验证码</span
+          >
+          <span class="count-text" v-else>{{ countdown }}s</span>
         </template>
       </van-field>
     </van-cell-group>
@@ -73,37 +80,39 @@ export default {
     isAllPass: false
   }),
   watch: {
-    inputEmail (val) {
+    inputEmail(val) {
       this.getMailPassed(val)
       this.getAllPass()
     },
-    prevEmail (val) {
+    prevEmail(val) {
       this.onMailInput(val)
       this.getMailPassed(val)
       this.getAllPass()
     }
   },
-  created () {
+  created() {
     this.getShowCode()
     this.getAllPass()
   },
   methods: {
     // 是否显示验证码输入框
-    getShowCode () {
-      const flag = this.inputEmail && this.prevEmail !== this.inputEmail && this.mailPassed
+    getShowCode() {
+      const flag =
+        this.inputEmail && this.prevEmail !== this.inputEmail && this.mailPassed
       this.showCode = flag
     },
-    getAllPass () {
+    getAllPass() {
       // 当前输入框邮箱与系统自带的一致时 通过
       const notEmpty = this.inputEmail && this.prevEmail
       const passA = this.inputEmail === this.prevEmail && notEmpty
       // 当前输入框邮箱与系统自带的邮箱不一致时,校验验证码 通过
-      const passB = this.inputEmail !== this.prevEmail && this.codePassed && this.mailPassed
+      const passB =
+        this.inputEmail !== this.prevEmail && this.codePassed && this.mailPassed
       this.isAllPass = passA || passB
       this.$emit('pass', this.isAllPass)
     },
     // 邮箱验证码是否通过校验
-    getMailPassed (val) {
+    getMailPassed(val) {
       const flag = emailRegExp.test(val)
       if (val === '' || flag) {
         if (flag) {
@@ -116,7 +125,7 @@ export default {
       }
       this.getShowCode()
     },
-    onMailBlur () {
+    onMailBlur() {
       const flag = emailRegExp.test(this.inputEmail)
       if (this.inputEmail === '' || flag) {
         this.errorMsg = ''
@@ -124,19 +133,19 @@ export default {
         this.errorMsg = '邮箱格式错误'
       }
     },
-    onMailInput (val) {
+    onMailInput(val) {
       this.$emit('input', val)
       this.getMailPassed(val)
       this.getAllPass()
     },
-    onMailFocus () {
+    onMailFocus() {
       this.errorMsg = ''
     },
-    async sendCode () {
+    async sendCode() {
       if (!this.mailPassed) return
       sendMailCode({
         email: this.inputEmail
-      }).then(res => {
+      }).then((res) => {
         if (res.success) {
           if (res.errCode === 4) {
             // 已验证过 通过
@@ -154,12 +163,12 @@ export default {
       })
     },
     // 校验邮箱验证码
-    checkCode (val) {
+    checkCode(val) {
       if (val && val.length === 6) {
         checkMailCode({
           emailVerity: this.code,
           email: this.inputEmail
-        }).then(res => {
+        }).then((res) => {
           if (res.success) {
             this.showCode = false
             this.codePassed = true
@@ -177,7 +186,7 @@ export default {
       }
     },
     // 倒计时
-    sendMailTimer (t) {
+    sendMailTimer(t) {
       this.sendCodeBtn = false
       const timeInt = setInterval(() => {
         t--
@@ -196,17 +205,17 @@ export default {
 <style lang="scss" scoped>
 .form-cell {
   margin: 0 12px;
-  .code-text{
+  .code-text {
     color: $color_main;
     font-size: 14px;
   }
-  .count-text{
+  .count-text {
     color: $color_main;
     font-size: 14px;
     opacity: 0.5;
   }
   ::v-deep {
-    .van-cell-group{
+    .van-cell-group {
       border-radius: 8px;
     }
     .van-cell {
@@ -214,17 +223,17 @@ export default {
       border-radius: 8px;
       line-height: 22px;
     }
-    .van-field__label{
+    .van-field__label {
       max-width: 80px;
-      span{
+      span {
         font-size: 15px;
-        color: #5F5E64;
+        color: #5f5e64;
       }
     }
-    .van-field__right-icon{
+    .van-field__right-icon {
       padding: 0 20px;
     }
-    .van-cell__value{
+    .van-cell__value {
       font-size: 16px;
     }
   }

+ 21 - 16
apps/mobile/src/components/create-order/CheckPhone.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="order-phone form-cell" :style="{margin: styleConf.marginSet}">
+  <div class="order-phone form-cell" :style="{ margin: styleConf.marginSet }">
     <van-field
       class="check-phone"
       :value="value"
@@ -13,10 +13,15 @@
       @input="onInput"
       @blur="onBlur"
       @focus="onFocus"
-      :class="{'need-radius': styleConf.needRadius}"
+      :class="{ 'need-radius': styleConf.needRadius }"
     >
       <template slot="right-icon">
-        <van-icon v-show="passed && showRightIcon" name="passed" color="#2ABED1" size="18" />
+        <van-icon
+          v-show="passed && showRightIcon"
+          name="passed"
+          color="#2ABED1"
+          size="18"
+        />
       </template>
     </van-field>
   </div>
@@ -64,18 +69,18 @@ export default {
     passed: false
   }),
   watch: {
-    value (n) {
+    value(n) {
       this.getPassed(n)
     }
   },
-  created () {
+  created() {
     this.getPassed(this.value)
   },
   methods: {
-    formatter (value) {
+    formatter(value) {
       return value.replace(/\D/g, '')
     },
-    getPassed (value) {
+    getPassed(value) {
       const regPass = phoneRegExp.test(value)
       if (value === '' || regPass) {
         if (regPass) {
@@ -89,10 +94,10 @@ export default {
         this.$emit('pass', false)
       }
     },
-    onInput (val) {
+    onInput(val) {
       this.$emit('input', val)
     },
-    onBlur () {
+    onBlur() {
       const flag = phoneRegExp.test(this.value)
       if (this.value === '' || flag) {
         this.errorMsg = ''
@@ -100,7 +105,7 @@ export default {
         this.errorMsg = '手机号码输入错误'
       }
     },
-    onFocus () {
+    onFocus() {
       this.errorMsg = ''
     }
   }
@@ -114,21 +119,21 @@ export default {
     .van-cell {
       padding: 15px 16px;
       line-height: 22px;
-      &.need-radius{
+      &.need-radius {
         border-radius: 8px;
       }
     }
-    .van-field__label{
+    .van-field__label {
       max-width: 80px;
-      span{
+      span {
         font-size: 15px;
-        color: #5F5E64;
+        color: #5f5e64;
       }
     }
-    .van-field__right-icon{
+    .van-field__right-icon {
       padding: 0 20px;
     }
-    .van-cell__value{
+    .van-cell__value {
       font-size: 16px;
     }
   }

+ 61 - 41
apps/mobile/src/components/create-order/Coupon.vue

@@ -24,9 +24,20 @@
         class="cur-popup-layout"
       >
         <div slot="default">
-          <van-tabs class="custom-tabs" v-model="tabIndex" color="#2abed1" title-active-color="#171826">
+          <van-tabs
+            class="custom-tabs"
+            v-model="tabIndex"
+            color="#2abed1"
+            title-active-color="#171826"
+          >
             <van-tab :title="'可用优惠券(' + canUseCoupon.length + ')'">
-              <p class="select-tips">已选择优惠券{{selectedCount}}张,共抵扣<em class="computed-price"> ¥{{deductPrice}}</em></p>
+              <p class="select-tips">
+                已选择优惠券{{ selectedCount }}张,共抵扣<em
+                  class="computed-price"
+                >
+                  ¥{{ deductPrice }}</em
+                >
+              </p>
               <div class="coupon-container">
                 <div v-if="canUseCoupon.length > 0">
                   <CouponList
@@ -65,7 +76,13 @@
         </div>
         <div slot="footer" v-if="showConfirm">
           <div class="j-button-group">
-            <button class="j-button-confirm" :disabled="isDisabled" @click="onConfirmCoupon">确定</button>
+            <button
+              class="j-button-confirm"
+              :disabled="isDisabled"
+              @click="onConfirmCoupon"
+            >
+              确定
+            </button>
           </div>
         </div>
       </PopupLayout>
@@ -92,7 +109,7 @@ export default {
     // 优惠券传值
     coupon: {
       type: Object,
-      default () {
+      default() {
         return {
           selectedVal: '', // 选中的优惠券value
           list: [], // 优惠券列表数据
@@ -113,7 +130,7 @@ export default {
   },
   computed: {
     // 优惠券单元格value的class类名(分为:圆角按钮、红色字体、默认无优惠券灰色字体)
-    className () {
+    className() {
       const len = this.canUseCoupon.length
       if (len === 0) {
         return 'default'
@@ -126,7 +143,7 @@ export default {
       }
     },
     // 优惠券单元格显示的内容
-    computedVal () {
+    computedVal() {
       const len = this.canUseCoupon.length
       if (len === 0) {
         return '暂无可用优惠券'
@@ -139,50 +156,53 @@ export default {
       }
     },
     // 是否显示确定按钮(tab标签为可用优惠券且当前有优惠券)
-    showConfirm () {
+    showConfirm() {
       return this.tabIndex === 0 && this.canUseCoupon.length > 0
     },
     // 确定按钮是否禁用
-    isDisabled () {
-      const isChecked = this.coupon.list.some(item => {
+    isDisabled() {
+      const isChecked = this.coupon.list.some((item) => {
         return item.checked
       })
       return this.showConfirm && !isChecked
     },
     // 可用优惠券列表数据
-    canUseCoupon () {
+    canUseCoupon() {
       const data = this.coupon.list
-      const canArr = data.filter(v => {
+      const canArr = data.filter((v) => {
         return v.available
       })
       return canArr
     },
     // 不可用优惠券列表数据
-    notUseCoupon () {
+    notUseCoupon() {
       const data = this.coupon.list
-      const notArr = data.filter(v => {
+      const notArr = data.filter((v) => {
         return !v.available
       })
       return notArr
     },
     // 计算抵扣了多少钱
-    deductPrice () {
+    deductPrice() {
       const data = this.canUseCoupon
-      const selectObj = data.find(v => {
+      const selectObj = data.find((v) => {
         return v.checked
       })
       if (selectObj && selectObj.reduce) {
         return selectObj.reduce
       } else if (selectObj && selectObj.disCount) {
-        return (this.fen2Yuan(this.price) * (1 - selectObj.disCount / 10)).fixed(2)
+        return (
+          this.fen2Yuan(this.price) *
+          (1 - selectObj.disCount / 10)
+        ).fixed(2)
       } else {
         return 0
       }
     },
     // 已选择优惠券数
-    selectedCount () {
+    selectedCount() {
       const data = this.canUseCoupon
-      const arr = data.filter(v => {
+      const arr = data.filter((v) => {
         return v.checked
       })
       return arr.length
@@ -195,11 +215,11 @@ export default {
   }),
   methods: {
     fen2Yuan,
-    openCoupon () {
+    openCoupon() {
       const s = this.coupon.selected
       const arr = this.canUseCoupon
       if (Object.keys(s).length > 0) {
-        arr.forEach(v => {
+        arr.forEach((v) => {
           if (s.lotteryId === v.lotteryId) {
             v.checked = true
           }
@@ -207,22 +227,22 @@ export default {
       }
       this.showPopup = true
     },
-    closePopup () {
+    closePopup() {
       this.showPopup = false
     },
     // 接收优惠券子组件radio触发的事件
-    onRadioChange (data) {
+    onRadioChange(data) {
       const list = this.canUseCoupon
-      list.forEach(item => {
+      list.forEach((item) => {
         item.checked = false
         if (item.lotteryId === data.lotteryId) {
           item.checked = true
         }
       })
     },
-    onConfirmCoupon () {
+    onConfirmCoupon() {
       const data = this.coupon.list
-      const selectData = data.find(v => {
+      const selectData = data.find((v) => {
         return v.checked
       })
       selectData.deductPrice = this.deductPrice
@@ -235,49 +255,49 @@ export default {
 </script>
 
 <style lang="scss">
-.cur-popup-layout{
+.cur-popup-layout {
   height: 500px;
-  .j-main{
-    background: #F7F9FA;
-    & > *{
+  .j-main {
+    background: #f7f9fa;
+    & > * {
       height: 100%;
     }
-    .select-tips{
+    .select-tips {
       padding: 11px 24px;
-      color: #5F5E64;
+      color: #5f5e64;
       font-size: 12px;
       background: #fff;
-      .computed-price{
+      .computed-price {
         color: $color_red;
       }
     }
-    .coupon-container{
+    .coupon-container {
       padding: 20px;
     }
-    .c-list{
+    .c-list {
       margin-bottom: 20px;
     }
-    .custom-tabs{
+    .custom-tabs {
       width: 100%;
       height: 100%;
       display: flex;
       flex-direction: column;
       overflow-y: hidden;
-      .van-tabs__content{
+      .van-tabs__content {
         flex: 1;
         overflow-y: scroll;
       }
     }
-    .van-tab{
+    .van-tab {
       font-size: 13px;
-      color: #5F5E64;
+      color: #5f5e64;
     }
-    .van-tab--active{
+    .van-tab--active {
       font-size: 14px;
       font-weight: bold;
     }
   }
-  .empty-container{
+  .empty-container {
     margin-top: 36px;
     background: transparent;
   }
@@ -307,7 +327,7 @@ export default {
     .custom-cell.van-cell {
       height: 54px;
       background: transparent url(@/assets/image/order/coupon-cell.png)
-      no-repeat center center;
+        no-repeat center center;
       background-size: 100% 100%;
       .van-cell__title {
         font-size: 16px;

+ 44 - 28
apps/mobile/src/components/create-order/CouponList.vue

@@ -1,28 +1,42 @@
 <template>
   <label class="coupon-list" @click="toggle(coupon)" :for="coupon.lotteryId">
     <div class="list-left" :class="computedType">
-      <div class="left-type" :class="computedType">{{coupon.lotteryAttribute}}</div>
+      <div class="left-type" :class="computedType">
+        {{ coupon.lotteryAttribute }}
+      </div>
       <div class="left-value">
         <span v-if="computedType == 'red-round'">
-          ¥<em class="left-value-num">{{coupon.reduce}}</em>
+          ¥<em class="left-value-num">{{ coupon.reduce }}</em>
         </span>
         <span v-else>
-          <em class="left-value-num">{{coupon.disCount}}</em>折
+          <em class="left-value-num">{{ coupon.disCount }}</em
+          >折
         </span>
       </div>
     </div>
     <div class="list-right">
       <div class="coupon-info">
         <div class="right-title">
-          <span>满{{coupon.full}}元</span>
-          <span v-if="computedType == 'red-round'">减{{coupon.reduce}}元</span>
-          <span v-else>{{coupon.disCount}}折</span>
+          <span>满{{ coupon.full }}元</span>
+          <span v-if="computedType == 'red-round'"
+            >减{{ coupon.reduce }}元</span
+          >
+          <span v-else>{{ coupon.disCount }}折</span>
+        </div>
+        <div class="right-desc">
+          {{ coupon.lotteryBeginDate }} - {{ coupon.lotteryEndDate }}
         </div>
-        <div class="right-desc">{{coupon.lotteryBeginDate}} - {{coupon.lotteryEndDate}}</div>
         <div v-if="!coupon.available" class="right-warn">不符合使用条件</div>
       </div>
       <div v-if="isAction">
-        <input :id="coupon.lotteryId" v-if="coupon.available" name="coupon" type="radio" class="j-icon checkbox" :checked="coupon.checked" />
+        <input
+          :id="coupon.lotteryId"
+          v-if="coupon.available"
+          name="coupon"
+          type="radio"
+          class="j-icon checkbox"
+          :checked="coupon.checked"
+        />
         <span v-else class="not-use">暂不可用</span>
       </div>
     </div>
@@ -40,7 +54,7 @@ export default {
     },
     coupon: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     }
@@ -51,8 +65,10 @@ export default {
     [Checkbox.name]: Checkbox
   },
   computed: {
-    computedType () {
-      const discount = this.coupon.lotteryAttribute && this.coupon.lotteryAttribute.indexOf('满减') > -1
+    computedType() {
+      const discount =
+        this.coupon.lotteryAttribute &&
+        this.coupon.lotteryAttribute.indexOf('满减') > -1
       if (discount) {
         return 'red-round'
       } else {
@@ -62,7 +78,7 @@ export default {
   },
   data: () => ({}),
   methods: {
-    toggle (item) {
+    toggle(item) {
       if (!this.isAction || !item.available) return
       this.$emit('onChange', item)
     }
@@ -71,68 +87,68 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-$red-gradient: linear-gradient(to right, #FFA674 0%, #F01212 100%);
-$yellow-gradient: linear-gradient(to right, #FFCC66 0%, #FF9F40 100%);
+$red-gradient: linear-gradient(to right, #ffa674 0%, #f01212 100%);
+$yellow-gradient: linear-gradient(to right, #ffcc66 0%, #ff9f40 100%);
 .coupon-list {
   display: flex;
   align-items: center;
-  background: #FFFFFF;
+  background: #ffffff;
   box-shadow: 0px 2px 8px 1px rgba(54, 147, 179, 0.05);
   border-radius: 4px 4px 4px 4px;
-  .red-round{
+  .red-round {
     background: $red-gradient;
   }
-  .yellow-round{
+  .yellow-round {
     background: $yellow-gradient;
   }
-  .list-left{
+  .list-left {
     width: 80px;
     height: 80px;
     border-radius: 4px;
-    .left-type{
+    .left-type {
       padding: 2px 8px;
       display: inline-block;
       border-radius: 4px 0px 16px 0px;
       font-size: 12px;
       color: #fff;
     }
-    .left-value{
+    .left-value {
       margin-top: 12px;
       text-align: center;
       color: #fff;
       font-size: 14px;
       line-height: 20px;
-      .left-value-num{
+      .left-value-num {
         font-size: 22px;
         font-weight: bold;
       }
     }
   }
-  .list-right{
+  .list-right {
     flex: 1;
     display: flex;
     align-items: center;
     justify-content: space-between;
     padding: 0 32px 0 12px;
-    .right-title{
+    .right-title {
       font-size: 12px;
       line-height: 18px;
       color: #171826;
     }
-    .right-desc{
+    .right-desc {
       margin-top: 4px;
       font-size: 10px;
-      color: #9B9CA3;
+      color: #9b9ca3;
       line-height: 14px;
     }
-    .right-warn{
+    .right-warn {
       margin-top: 8px;
       color: $color_red;
       font-size: 10px;
       line-height: 14px;
     }
-    .not-use{
-      color: #C0C4CC;
+    .not-use {
+      color: #c0c4cc;
       font-size: 12px;
     }
   }

+ 111 - 69
apps/mobile/src/components/create-order/CouponListNew.vue

@@ -1,48 +1,85 @@
 <template>
   <section class="coupon-list" @click="toggle(coupon)">
     <div class="list-left" :class="computedType">
-      <div class="left-type">{{activeName}}</div>
+      <div class="left-type">{{ activeName }}</div>
       <div class="left-value">
         <span v-if="type === 0">
-          ¥<em class="left-value-num">{{fen2Yuan(coupon.reduce)}}</em>
+          ¥<em class="left-value-num">{{ fen2Yuan(coupon.reduce) }}</em>
         </span>
         <span v-else-if="type === 1 || type === 4">
-          <em class="left-value-num" >{{coupon.discount | discountFilter}}</em>折
+          <em class="left-value-num">{{ coupon.discount | discountFilter }}</em
+          >折
         </span>
         <span v-else-if="type === 2">
           <span>
-            <em class="left-value-num">
-            {{coupon.time}}</em>
+            <em class="left-value-num"> {{ coupon.time }}</em>
             <span v-if="coupon.timeType">{{ timeType[coupon.timeType] }}</span>
           </span>
         </span>
         <span v-else-if="type === 3">
-          <em class="left-value-num">{{fen2Yuan(coupon.promotionalPrice)}}</em><br><span>特惠价</span>
+          <em class="left-value-num">{{ fen2Yuan(coupon.promotionalPrice) }}</em
+          ><br /><span>特惠价</span>
         </span>
         <span v-else-if="type === 5">
-          减<em class="left-value-num">{{fen2Yuan(coupon.reduce)}}</em>元
+          减<em class="left-value-num">{{ fen2Yuan(coupon.reduce) }}</em
+          >元
         </span>
       </div>
     </div>
     <div class="list-right">
       <div class="coupon-info">
         <div class="right-title ellipsis">
-          <span v-if="type < 2 ">满{{fen2Yuan(coupon.full)}}元</span>
-          <span v-if="type === 0">减{{fen2Yuan(coupon.reduce)}}元</span>
-          <span v-else-if="type === 1">{{coupon.discount | discountFilter}}折</span>
-          <span v-else class="use-range">适用商品:{{productStr}}</span>
+          <span v-if="type < 2">满{{ fen2Yuan(coupon.full) }}元</span>
+          <span v-if="type === 0">减{{ fen2Yuan(coupon.reduce) }}元</span>
+          <span v-else-if="type === 1"
+            >{{ coupon.discount | discountFilter }}折</span
+          >
+          <span v-else class="use-range">适用商品:{{ productStr }}</span>
         </div>
-        <div class="right-desc">{{dateFormat(coupon.starttime)}} - {{dateFormat(coupon.endtime)}}</div>
-        <div v-if="!coupon.usable && type < 2 && coupon.full > fen2Yuan(specOriginPrice) && !isActivityNoStart " class="right-warn">不符合使用条件</div>
-        <div v-if="coupon.usable && type > 2 && coupon.stockNumber > 0" class="right-tip-count">剩余优惠名额 <em class="left-value-num">{{coupon.stockNumber}}</em>个,欲速从购!</div>
-        <div v-if="!coupon.usable && type > 2 && coupon.stockNumber === 0" class="right-warn">优惠名额已抢空</div>
-        <div v-if="!coupon.usable && preTimeText && isActivityNoStart" class="active-warn">
+        <div class="right-desc">
+          {{ dateFormat(coupon.starttime) }} - {{ dateFormat(coupon.endtime) }}
+        </div>
+        <div
+          v-if="
+            !coupon.usable &&
+            type < 2 &&
+            coupon.full > fen2Yuan(specOriginPrice) &&
+            !isActivityNoStart
+          "
+          class="right-warn"
+        >
+          不符合使用条件
+        </div>
+        <div
+          v-if="coupon.usable && type > 2 && coupon.stockNumber > 0"
+          class="right-tip-count"
+        >
+          剩余优惠名额 <em class="left-value-num">{{ coupon.stockNumber }}</em
+          >个,欲速从购!
+        </div>
+        <div
+          v-if="!coupon.usable && type > 2 && coupon.stockNumber === 0"
+          class="right-warn"
+        >
+          优惠名额已抢空
+        </div>
+        <div
+          v-if="!coupon.usable && preTimeText && isActivityNoStart"
+          class="active-warn"
+        >
           <span class="label">活动未开始</span>
-          <em>活动开始倒计时:{{preTimeText}}</em>
+          <em>活动开始倒计时:{{ preTimeText }}</em>
         </div>
       </div>
       <div class="handle-area" v-if="isAction">
-        <input :id="coupon.lotteryId" v-if="coupon.usable" name="coupon" type="radio" class="j-icon checkbox" :checked="checked" />
+        <input
+          :id="coupon.lotteryId"
+          v-if="coupon.usable"
+          name="coupon"
+          type="radio"
+          class="j-icon checkbox"
+          :checked="checked"
+        />
         <span v-if="!coupon.usable" class="not-use">暂不可用</span>
       </div>
     </div>
@@ -66,7 +103,7 @@ export default {
     },
     coupon: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     },
@@ -82,11 +119,11 @@ export default {
     [Checkbox.name]: Checkbox
   },
   filters: {
-    discountFilter (val) {
+    discountFilter(val) {
       return val > 0 ? Number((val * 10).toFixed(2)) : 0
     }
   },
-  data () {
+  data() {
     return {
       typeObj: {
         0: {
@@ -128,43 +165,45 @@ export default {
     }
   },
   computed: {
-    type () {
+    type() {
       return this.coupon.type || 0
     },
     // 获取当前奖券类
-    computedType () {
+    computedType() {
       return this.typeObj[this.type].class
     },
-    activeName () {
+    activeName() {
       return this.typeObj[this.type].activeName
     },
     // 当前奖券活动是否开始
-    isActivityNoStart () {
+    isActivityNoStart() {
       return this.coupon.starttime * 1000 > this.now
     },
-    productStr () {
-      const str = this.coupon.useProductListArr ? this.coupon.useProductListArr.join(',') : ''
+    productStr() {
+      const str = this.coupon.useProductListArr
+        ? this.coupon.useProductListArr.join(',')
+        : ''
       if (str && str.includes('数据流量包-')) {
         return str.slice(str.indexOf('数据流量包-') + 6)
       }
       return str
     }
   },
-  beforeDestroy () {
+  beforeDestroy() {
     if (this.timer) {
       clearInterval(this.timer)
     }
   },
-  created () {
+  created() {
     this.startCountdownTimer()
   },
   methods: {
     fen2Yuan,
-    toggle (item) {
+    toggle(item) {
       if (!this.isAction || !item.usable) return
       this.$emit('onChange', item)
     },
-    dateFormat (time) {
+    dateFormat(time) {
       if (!time) return
       if (time.toString().length === 10) {
         return dateFormatter(time * 1000, 'yyyy.MM.dd')
@@ -172,14 +211,17 @@ export default {
         return dateFormatter(time, 'yyyy.MM.dd')
       }
     },
-    startCountdownTimer () {
-      const sTime = this.coupon.starttime && this.coupon.starttime.toString().length === 10 ? this.coupon.starttime * 1000 : 0
+    startCountdownTimer() {
+      const sTime =
+        this.coupon.starttime && this.coupon.starttime.toString().length === 10
+          ? this.coupon.starttime * 1000
+          : 0
       // 活动开始倒计时
       if (sTime > Date.now()) {
         this.countDownText(sTime)
       }
     },
-    countDownText (time) {
+    countDownText(time) {
       if (this.timer) clearInterval(this.timer)
       this.preTimeText = countDown(time)
       this.timer = setInterval(() => {
@@ -191,29 +233,29 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-$red-gradient: linear-gradient(to right, #FFA674 0%, #F01212 100%);
-$yellow-gradient: linear-gradient(to right, #FFCC66 0%, #FF9F40 100%);
-$pink-gradient: linear-gradient(315deg, #FF5959 0%, #FB39FF 100%);
-$purple-gradient: linear-gradient(315deg, #6759FF 0%, #FB39FF 100%);
+$red-gradient: linear-gradient(to right, #ffa674 0%, #f01212 100%);
+$yellow-gradient: linear-gradient(to right, #ffcc66 0%, #ff9f40 100%);
+$pink-gradient: linear-gradient(315deg, #ff5959 0%, #fb39ff 100%);
+$purple-gradient: linear-gradient(315deg, #6759ff 0%, #fb39ff 100%);
 .coupon-list {
   display: flex;
   align-items: center;
-  background: #FFFFFF;
+  background: #ffffff;
   box-shadow: 0px 2px 8px 1px rgba(54, 147, 179, 0.05);
   border-radius: 4px 4px 4px 4px;
-  .red-round{
+  .red-round {
     background: $red-gradient;
   }
-  .yellow-round{
+  .yellow-round {
     background: $yellow-gradient;
   }
-  .pink-round{
+  .pink-round {
     background: $pink-gradient;
   }
-  .purple-round{
+  .purple-round {
     background: $purple-gradient;
   }
-  .list-left{
+  .list-left {
     width: 80px;
     height: 80px;
     border-radius: 4px;
@@ -221,90 +263,90 @@ $purple-gradient: linear-gradient(315deg, #6759FF 0%, #FB39FF 100%);
     display: flex;
     align-items: center;
     justify-content: center;
-    .left-type{
+    .left-type {
       position: absolute;
-      top:0;
-      left:0;
+      top: 0;
+      left: 0;
       padding: 3px 12px 3px 8px;
       display: inline-block;
       border-radius: 4px 0px 16px 0px;
       font-size: 12px;
       color: #fff;
       line-height: 12px;
-      background: linear-gradient(98deg, #FFA674 0%, #F01212 100%);
+      background: linear-gradient(98deg, #ffa674 0%, #f01212 100%);
     }
-    .left-value{
+    .left-value {
       margin-top: 4px;
       text-align: center;
       color: #fff;
       font-size: 14px;
       line-height: 20px;
       white-space: nowrap;
-      .left-value-num{
+      .left-value-num {
         font-size: 22px;
         font-weight: bold;
       }
     }
   }
-  .list-right{
+  .list-right {
     flex: 1;
     display: flex;
     align-items: center;
     justify-content: space-between;
     padding: 0 16px 0 12px;
     position: relative;
-    min-width:0;
-    .coupon-info{
-      min-width:0;
+    min-width: 0;
+    .coupon-info {
+      min-width: 0;
     }
-    .right-title{
+    .right-title {
       font-size: 12px;
       line-height: 18px;
       color: #171826;
     }
-    .right-desc{
+    .right-desc {
       margin-top: 4px;
       font-size: 10px;
-      color: #9B9CA3;
+      color: #9b9ca3;
       line-height: 14px;
     }
-    .handle-area{
-      margin-left:10px;
+    .handle-area {
+      margin-left: 10px;
     }
-    .right-warn{
+    .right-warn {
       margin-top: 8px;
       color: $color_red;
       font-size: 10px;
       line-height: 14px;
-      .label{
+      .label {
         margin-right: 12px;
       }
     }
-    .active-warn{
+    .active-warn {
       @extend .right-warn;
       position: absolute;
-      bottom:-16px;
+      bottom: -16px;
     }
-    .not-use{
+    .not-use {
       white-space: nowrap;
-      color: #C0C4CC;
+      color: #c0c4cc;
       font-size: 12px;
     }
-    .right-tip-count{
+    .right-tip-count {
       display: inline-block;
-      color: #FC43CA;
+      color: #fc43ca;
       padding: 1px 8px;
       background: rgba(252, 67, 202, 0.1);
       border-radius: 10px;
       margin-top: 8px;
       font-size: 10px;
       white-space: nowrap;
-      em{
+      em {
         font-size: 12px;
         font-weight: bold;
       }
     }
-    .use-range{
+    .use-range {
       color: #171826;
       font-size: 12px;
       line-height: 18px;

+ 88 - 71
apps/mobile/src/components/create-order/CouponNew.vue

@@ -1,41 +1,47 @@
 <template>
-<!--  下单页奖券UI-->
+  <!--  下单页奖券UI-->
   <div class="coupon-cell">
     <div class="custom-cell" @click="openCoupon(0)">
       <div class="cell-left">
         <div>
           <span class="tag">优惠</span>
-          <span class="dis-label" v-if="canUseCoupon.length > 0 && maxDiscountInfo.preDesc">{{maxDiscountInfo.preDesc}}</span>
+          <span
+            class="dis-label"
+            v-if="canUseCoupon.length > 0 && maxDiscountInfo.preDesc"
+            >{{ maxDiscountInfo.preDesc }}</span
+          >
           <span v-if="canUseCoupon.length === 0">暂无优惠</span>
         </div>
         <!-- 折扣大于95折不展示-->
-        <div class="dis-detail" v-if="canUseCoupon.length > 0">共 <em>{{canUseCoupon.length}}</em> 个优惠可用
+        <div class="dis-detail" v-if="canUseCoupon.length > 0">
+          共 <em>{{ canUseCoupon.length }}</em> 个优惠可用
           <template v-if="maxDiscountInfo.discount <= 0.95">
-            ,最高可享 <em>{{maxDiscountInfo.discount | discountFilter }}</em>折
+            ,最高可享 <em>{{ maxDiscountInfo.discount | discountFilter }}</em
+            >折
           </template>
         </div>
       </div>
       <div class="cell-right">
-        <span>{{canUseCoupon.length === 0 ? '暂无可用优惠券' : '其他优惠'}}</span>
-        <van-icon
-          name="arrow"
-          color="#C0C4CC">
-        </van-icon>
+        <span>{{
+          canUseCoupon.length === 0 ? '暂无可用优惠券' : '其他优惠'
+        }}</span>
+        <van-icon name="arrow" color="#C0C4CC"> </van-icon>
       </div>
     </div>
-    <div class="custom-cell" v-if="preActivityList.length > 0" @click="openCoupon(1)">
+    <div
+      class="custom-cell"
+      v-if="preActivityList.length > 0"
+      @click="openCoupon(1)"
+    >
       <div class="cell-left">
         <div class="active-label ellipsis">
-          <span>{{preActivityList[0].title}}</span>
+          <span>{{ preActivityList[0].title }}</span>
         </div>
         <div class="active-time">倒计时:{{ preTimeText }}</div>
       </div>
       <div class="cell-right">
         <span>更多预热</span>
-        <van-icon
-          name="arrow"
-          color="#C0C4CC">
-        </van-icon>
+        <van-icon name="arrow" color="#C0C4CC"> </van-icon>
       </div>
     </div>
     <van-popup v-model="showPopup" position="bottom" round get-container="body">
@@ -44,7 +50,12 @@
         @closeIconClick="closePopup"
         class="cur-popup-layout"
       >
-        <van-tabs class="custom-tabs" v-model="tabIndex" color="#2abed1" title-active-color="#171826">
+        <van-tabs
+          class="custom-tabs"
+          v-model="tabIndex"
+          color="#2abed1"
+          title-active-color="#171826"
+        >
           <van-tab :name="0" :title="'可用优惠(' + canUseCoupon.length + ')'">
             <div class="coupon-container">
               <div v-if="canUseCoupon.length > 0">
@@ -85,7 +96,9 @@
           </van-tab>
         </van-tabs>
         <div slot="footer" v-if="showConfirm" class="j-button-group">
-          <button class="j-button-confirm"  @click="onConfirmCoupon">确定</button>
+          <button class="j-button-confirm" @click="onConfirmCoupon">
+            确定
+          </button>
         </div>
       </PopupLayout>
     </van-popup>
@@ -144,11 +157,11 @@ export default {
     }
   },
   filters: {
-    discountFilter (val) {
+    discountFilter(val) {
       return val > 0 ? Number((val * 10).toFixed(2)) : 0
     }
   },
-  data () {
+  data() {
     return {
       showPopup: false,
       tabIndex: 0,
@@ -159,50 +172,55 @@ export default {
   },
   computed: {
     // 是否显示确定按钮(tab标签为可用优惠券且当前有优惠券)
-    showConfirm () {
+    showConfirm() {
       return this.tabIndex === 0 && this.canUseCoupon.length > 0
     }
   },
   watch: {
     offerId: {
       immediate: true,
-      handler (n) {
+      handler(n) {
         this.selectedId = n || -1
       }
     },
-    preActivityList (newVal) {
-      const time = newVal[0]?.starttime?.toString().length === 10 ? newVal[0]?.starttime * 1000 : newVal[0]?.starttime
+    preActivityList(newVal) {
+      const time =
+        newVal[0]?.starttime?.toString().length === 10
+          ? newVal[0]?.starttime * 1000
+          : newVal[0]?.starttime
       this.countDownText(time)
     }
   },
-  beforeDestroy () {
+  beforeDestroy() {
     if (this.timer) {
       clearInterval(this.timer)
     }
   },
   methods: {
     fen2Yuan,
-    openCoupon (tabItem) {
+    openCoupon(tabItem) {
       this.tabIndex = tabItem
       this.showPopup = true
     },
-    closePopup () {
+    closePopup() {
       this.showPopup = false
     },
     // 接收优惠券子组件radio触发的事件
-    onRadioChange (data) {
+    onRadioChange(data) {
       if (this.selectedId === data.lotteryId) {
         this.selectedId = ''
       } else {
         this.selectedId = data.lotteryId
       }
     },
-    onConfirmCoupon () {
-      const selectData = this.canUseCoupon.find(v => v.lotteryId === this.selectedId)
+    onConfirmCoupon() {
+      const selectData = this.canUseCoupon.find(
+        (v) => v.lotteryId === this.selectedId
+      )
       this.$emit('selectedCoupon', selectData || {})
       this.showPopup = false
     },
-    countDownText (time) {
+    countDownText(time) {
       if (!time) return
       if (this.timer) clearInterval(this.timer)
       this.preTimeText = countDown(time)
@@ -215,50 +233,50 @@ export default {
 </script>
 
 <style lang="scss">
-.cur-popup-layout{
+.cur-popup-layout {
   height: 500px;
-  .j-main{
-    background: #F7F9FA;
-    & > *{
+  .j-main {
+    background: #f7f9fa;
+    & > * {
       height: 100%;
     }
-    .select-tips{
+    .select-tips {
       padding: 11px 24px;
-      color: #5F5E64;
+      color: #5f5e64;
       font-size: 12px;
       background: #fff;
-      .computed-price{
+      .computed-price {
         color: $color_red;
       }
     }
-    .coupon-container{
+    .coupon-container {
       padding: 20px;
     }
-    .c-list{
+    .c-list {
       margin-bottom: 20px;
     }
-    .custom-tabs{
+    .custom-tabs {
       width: 100%;
       height: 100%;
       max-height: unset;
       display: flex;
       flex-direction: column;
       overflow-y: hidden;
-      .van-tabs__content{
+      .van-tabs__content {
         flex: 1;
         overflow-y: scroll;
       }
     }
-    .van-tab{
+    .van-tab {
       font-size: 13px;
-      color: #5F5E64;
+      color: #5f5e64;
     }
-    .van-tab--active{
+    .van-tab--active {
       font-size: 14px;
       font-weight: bold;
     }
   }
-  .empty-container{
+  .empty-container {
     margin-top: 36px;
     background: transparent;
   }
@@ -284,67 +302,66 @@ export default {
     color: #5f5e64;
     font-size: 14px;
   }
-  .custom-cell{
+  .custom-cell {
     cursor: pointer;
     display: flex;
     align-items: center;
     justify-content: space-between;
     height: 64px;
-    background: linear-gradient(180deg, #FFF0F0 0%, #FFFFFF 60.42%);
+    background: linear-gradient(180deg, #fff0f0 0%, #ffffff 60.42%);
     padding: 12px 21px 8px 21px;
-    &:nth-of-type(2){
+    &:nth-of-type(2) {
       background: #fff;
     }
-    .cell-left{
+    .cell-left {
       display: flex;
       flex-direction: column;
-      font-size:13px;
+      font-size: 13px;
       overflow: hidden;
       line-height: 22px;
-      .tag{
-        color:#fff;
-        background: linear-gradient(180deg, #F74E29 0%, #EF3024 100%);
+      .tag {
+        color: #fff;
+        background: linear-gradient(180deg, #f74e29 0%, #ef3024 100%);
         border-radius: 4px;
-        padding:2px 5px;
-        margin-right:8px;
+        padding: 2px 5px;
+        margin-right: 8px;
       }
-      .dis-label{
+      .dis-label {
         color: #171826;
         line-height: 20px;
       }
-      .dis-detail{
-        color:#5F5E64;
-        margin-top:8px;
+      .dis-detail {
+        color: #5f5e64;
+        margin-top: 8px;
         line-height: 18px;
         font-size: 12px;
-        em{
+        em {
           margin: 0 1px;
-          color: #FB483D;
+          color: #fb483d;
         }
       }
-      .active-label{
+      .active-label {
         display: inline-block;
-        max-width:240px;
-        background: linear-gradient(315deg, #FF5959 0%, #FB39FF 100%);
+        max-width: 240px;
+        background: linear-gradient(315deg, #ff5959 0%, #fb39ff 100%);
         padding: 0 5px;
         color: #fff;
-        height:20px;
+        height: 20px;
         line-height: 20px;
         border-radius: 4px;
         letter-spacing: 1px;
       }
-      .active-time{
+      .active-time {
         font-size: 10px;
-        color: #5F5E64;
-        margin-top:6px;
+        color: #5f5e64;
+        margin-top: 6px;
         line-height: 14px;
       }
     }
-    .cell-right{
-      color: #5F5E64;
+    .cell-right {
+      color: #5f5e64;
       font-size: 13px;
     }
-
   }
   //::v-deep {
   //  .custom-cell.van-cell {

+ 36 - 22
apps/mobile/src/components/create-order/LimitedBanner.vue

@@ -4,7 +4,12 @@
       <div class="limited-badge">{{ getBadge }}</div>
       <div class="limited-title">{{ acName }}</div>
       <div class="count-down">
-        <Countdown :endTime="activityTime" :startText="startText" @curTime="getCurTime" ref="countdownRef"></Countdown>
+        <Countdown
+          :endTime="activityTime"
+          :startText="startText"
+          @curTime="getCurTime"
+          ref="countdownRef"
+        ></Countdown>
       </div>
       <div v-if="unStatus" class="sub-btn" @click="$emit('sub')"></div>
       <div v-else>
@@ -60,7 +65,7 @@ export default {
   components: {
     Countdown
   },
-  data () {
+  data() {
     return {
       activityTime: 0,
       startText: '开始倒计时:',
@@ -71,7 +76,7 @@ export default {
     }
   },
   computed: {
-    getBadge () {
+    getBadge() {
       const type = this.activityType
       const title = {
         0: '满减',
@@ -83,22 +88,22 @@ export default {
       }
       return title[type]
     },
-    unStatus () {
+    unStatus() {
       // 当前时间小于活动开始时间且未预约状态且还有库存
       return !this.isStart && this.status === 0 && this.stockNumber > 0
     },
-    alreadyStatus () {
+    alreadyStatus() {
       return !this.isStart && this.status === 1 && this.stockNumber > 0
     },
-    emptyStatus () {
+    emptyStatus() {
       return this.stockNumber === 0 && this.isStart
     }
   },
   watch: {
-    activityName (val) {
+    activityName(val) {
       this.acName = val
     },
-    curTime (val) {
+    curTime(val) {
       if (val < this.startTime) {
         this.isStart = false
       } else {
@@ -112,16 +117,25 @@ export default {
     }
   },
   methods: {
-    getCurTime (data) {
-      const beginDate = this.startTime.toString().length === 10 ? this.startTime * 1000 : this.startTime
-      const endDate = this.endTime.toString().length === 10 ? this.endTime * 1000 : this.endTime
+    getCurTime(data) {
+      const beginDate =
+        this.startTime.toString().length === 10
+          ? this.startTime * 1000
+          : this.startTime
+      const endDate =
+        this.endTime.toString().length === 10
+          ? this.endTime * 1000
+          : this.endTime
       if (beginDate > data) {
         this.activityTime = beginDate
         this.startText = '开始倒计时:'
       } else if (data > beginDate && data < endDate) {
         this.activityTime = endDate
         this.startText = '倒计时:'
-        this.acName = this.stockNumber > 0 ? `优惠仅剩${this.stockNumber}个,快抢快抢!` : '优惠名额已抢空'
+        this.acName =
+          this.stockNumber > 0
+            ? `优惠仅剩${this.stockNumber}个,快抢快抢!`
+            : '优惠名额已抢空'
       }
       this.curTime = data
       this.$emit('curTime', data)
@@ -133,24 +147,24 @@ export default {
 <style lang="scss" scoped>
 .limited {
   width: 100%;
-  background: linear-gradient(98deg, #FF7C32 0%, #F33838 100%);
-  .limited-bg{
+  background: linear-gradient(98deg, #ff7c32 0%, #f33838 100%);
+  .limited-bg {
     position: relative;
     height: 64px;
     background: url('@/assets/image/order/limited-bg.png') no-repeat center;
     background-size: contain;
   }
-  .limited-badge{
+  .limited-badge {
     width: 80px;
     height: 24px;
     line-height: 24px;
     font-size: 12px;
     color: #fff;
     text-align: center;
-    background: linear-gradient(93.18deg, #CB1313 0%, #F82424 94.73%);
+    background: linear-gradient(93.18deg, #cb1313 0%, #f82424 94.73%);
     border-radius: 0px 0px 24px 0px;
   }
-  .limited-title{
+  .limited-title {
     position: absolute;
     width: 100%;
     top: 16px;
@@ -161,7 +175,7 @@ export default {
     text-align: center;
     transform: translateX(-50%);
   }
-  .count-down{
+  .count-down {
     position: absolute;
     bottom: 0;
     left: 50%;
@@ -175,7 +189,7 @@ export default {
     color: #fff;
     text-align: center;
   }
-  .sub-btn{
+  .sub-btn {
     position: absolute;
     top: 6px;
     right: 16px;
@@ -184,7 +198,7 @@ export default {
     background: url('@/assets/image/order/limited-sub.png') no-repeat center;
     background-size: contain;
   }
-  .limited-handle{
+  .limited-handle {
     position: absolute;
     bottom: -10px;
     right: 6px;
@@ -194,10 +208,10 @@ export default {
     background-repeat: no-repeat;
     background-size: contain;
     transform: rotateZ(-15deg);
-    &.limited-empty{
+    &.limited-empty {
       background-image: url('@/assets/image/order/limited-empty.png');
     }
-    &.limited-already{
+    &.limited-already {
       background-image: url('@/assets/image/order/limited-already.png');
     }
   }

+ 37 - 27
apps/mobile/src/components/create-order/OrderEmail.vue

@@ -11,7 +11,12 @@
         @focus="onMailFocus"
       >
         <template slot="right-icon">
-          <van-icon v-show="isAllPass && showRightIcon" name="passed" color="#2ABED1" size="18" />
+          <van-icon
+            v-show="isAllPass && showRightIcon"
+            name="passed"
+            color="#2ABED1"
+            size="18"
+          />
         </template>
       </van-field>
       <van-field
@@ -23,8 +28,10 @@
         @input="checkCode"
       >
         <template #button>
-          <span class="code-text" v-if="sendCodeBtn" @click="sendCode">发送验证码</span>
-          <span class="count-text" v-else>{{countdown}}s</span>
+          <span class="code-text" v-if="sendCodeBtn" @click="sendCode"
+            >发送验证码</span
+          >
+          <span class="count-text" v-else>{{ countdown }}s</span>
         </template>
       </van-field>
     </van-cell-group>
@@ -72,34 +79,36 @@ export default {
     isAllPass: false
   }),
   watch: {
-    email (val) {
+    email(val) {
       this.mail = val
       this.getMailPassed(val)
       this.getAllPass()
     }
   },
-  created () {
+  created() {
     this.getShowCode()
   },
   methods: {
     // 是否显示验证码输入框
-    getShowCode () {
+    getShowCode() {
       const flag = this.mail && this.email !== this.mail && this.mailPassed
       this.showCode = flag
     },
-    getAllPass () {
+    getAllPass() {
       // const lastEmail = sessionStorage.getItem('send_email')
       // 当前输入框邮箱与系统自带的一致时 通过
       const passA = this.mail === this.email && this.mailPassed
       // 当前输入框邮箱与系统自带的邮箱不一致时,校验验证码 通过
-      const passB = this.mail !== this.email && this.codePassed && this.mailPassed
+      const passB =
+        this.mail !== this.email && this.codePassed && this.mailPassed
       this.isAllPass = passA || passB
       // console.log(this.mail, this.email, this.isAllPass, '--', passA, passB)
       this.$emit('pass', this.isAllPass)
     },
     // 邮箱验证码是否通过校验
-    getMailPassed (val) {
-      const flag = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test(val)
+    getMailPassed(val) {
+      const flag =
+        /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test(val)
       if (val === '' || flag) {
         if (flag) {
           this.mailPassed = true
@@ -111,29 +120,30 @@ export default {
       }
       this.getShowCode()
     },
-    onMailBlur () {
-      const flag = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test(this.mail)
+    onMailBlur() {
+      const flag =
+        /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/.test(this.mail)
       if (this.mail === '' || flag) {
         this.errorMsg = ''
       } else {
         this.errorMsg = '邮箱格式错误'
       }
     },
-    onMailInput (val) {
+    onMailInput(val) {
       this.getMailPassed(val)
       this.getAllPass()
     },
-    onMailFocus () {
+    onMailFocus() {
       this.errorMsg = ''
     },
-    async sendCode () {
+    async sendCode() {
       if (!this.mailPassed) return
       // this.sendMailTimer(100)
       // sessionStorage.setItem('send_email', this.mail)
       // sessionStorage.setItem('send_code_time', Date.parse(new Date()) / 1000)
       sendMailCode({
         email: this.mail
-      }).then(res => {
+      }).then((res) => {
         if (res.success) {
           if (res.errCode === 4) {
             // 已验证过 通过
@@ -153,12 +163,12 @@ export default {
       })
     },
     // 校验邮箱验证码
-    checkCode (val) {
+    checkCode(val) {
       if (val && val.length === 6) {
         checkMailCode({
           emailVerity: this.code,
           email: this.mail
-        }).then(res => {
+        }).then((res) => {
           if (res.success) {
             this.showCode = false
             this.codePassed = true
@@ -176,7 +186,7 @@ export default {
       }
     },
     // 倒计时
-    sendMailTimer (t) {
+    sendMailTimer(t) {
       this.sendCodeBtn = false
       const timeInt = setInterval(() => {
         t--
@@ -195,17 +205,17 @@ export default {
 <style lang="scss" scoped>
 .order-email {
   margin: 0 12px;
-  .code-text{
+  .code-text {
     color: $color_main;
     font-size: 14px;
   }
-  .count-text{
+  .count-text {
     color: $color_main;
     font-size: 14px;
     opacity: 0.5;
   }
   ::v-deep {
-    .van-cell-group{
+    .van-cell-group {
       border-radius: 8px;
     }
     .van-cell {
@@ -213,17 +223,17 @@ export default {
       border-radius: 8px;
       line-height: 22px;
     }
-    .van-field__label{
+    .van-field__label {
       max-width: 80px;
-      span{
+      span {
         font-size: 15px;
-        color: #5F5E64;
+        color: #5f5e64;
       }
     }
-    .van-field__right-icon{
+    .van-field__right-icon {
       padding: 0 20px;
     }
-    .van-cell__value{
+    .van-cell__value {
       font-size: 16px;
     }
   }

+ 18 - 13
apps/mobile/src/components/create-order/OrderPhone.vue

@@ -14,7 +14,12 @@
       @focus="onPhoneFocus"
     >
       <template slot="right-icon">
-        <van-icon v-show="passed && showRightIcon" name="passed" color="#2ABED1" size="18" />
+        <van-icon
+          v-show="passed && showRightIcon"
+          name="passed"
+          color="#2ABED1"
+          size="18"
+        />
       </template>
     </van-field>
   </div>
@@ -53,19 +58,19 @@ export default {
     passed: false
   }),
   watch: {
-    phone (val) {
+    phone(val) {
       this.tel = val
       this.getPassed(val)
     }
   },
-  created () {
+  created() {
     this.getPassed(this.tel)
   },
   methods: {
-    formatter (value) {
+    formatter(value) {
       return value.replace(/\D/g, '')
     },
-    getPassed (val) {
+    getPassed(val) {
       const flag = /^[1][3-9][0-9]{9}$/.test(val)
       if (val === '' || flag) {
         if (flag) {
@@ -79,10 +84,10 @@ export default {
         this.$emit('pass', false)
       }
     },
-    onPhoneInput (val) {
+    onPhoneInput(val) {
       this.getPassed(val)
     },
-    onPhoneBlur () {
+    onPhoneBlur() {
       const flag = /^[1][3-9][0-9]{9}$/.test(this.tel)
       if (this.tel === '' || flag) {
         this.errorMsg = ''
@@ -90,7 +95,7 @@ export default {
         this.errorMsg = '手机号码输入错误'
       }
     },
-    onPhoneFocus () {
+    onPhoneFocus() {
       this.errorMsg = ''
     }
   }
@@ -106,17 +111,17 @@ export default {
       border-radius: 8px;
       line-height: 22px;
     }
-    .van-field__label{
+    .van-field__label {
       max-width: 80px;
-      span{
+      span {
         font-size: 15px;
-        color: #5F5E64;
+        color: #5f5e64;
       }
     }
-    .van-field__right-icon{
+    .van-field__right-icon {
       padding: 0 20px;
     }
-    .van-cell__value{
+    .van-cell__value {
       font-size: 16px;
     }
   }

+ 37 - 22
apps/mobile/src/components/create-order/SpecList.vue

@@ -10,8 +10,13 @@
           :key="spec.id"
           :mark="spec.markType"
           :active="calcActive(spec)"
-          @onClick="clickSpec(spec)">
-          <span class="float-tip left" :class="spec.tipType" v-if="!!spec.tipText">
+          @onClick="clickSpec(spec)"
+        >
+          <span
+            class="float-tip left"
+            :class="spec.tipType"
+            v-if="!!spec.tipText"
+          >
             <slot name="float-tip">
               <span v-if="spec.tipText">
                 <i class="j-icon icon-crown"></i>
@@ -23,14 +28,23 @@
             <div class="spec-c-label">
               <span>{{ spec.label }}</span>
               <!-- spec.giftInfo && calcActive(spec) -->
-              <span class="highlight-text" v-if="spec.giftInfo">&nbsp;{{ spec.giftInfo }}</span>
-              <div class="activity-badge" v-if="spec.activityInfo"> <span class="j-icon icon-crown"></span>&nbsp;{{ spec.activityInfo }}</div>
+              <span class="highlight-text" v-if="spec.giftInfo"
+                >&nbsp;{{ spec.giftInfo }}</span
+              >
+              <div class="activity-badge" v-if="spec.activityInfo">
+                <span class="j-icon icon-crown"></span>&nbsp;{{
+                  spec.activityInfo
+                }}
+              </div>
             </div>
             <div class="spec-c-price">
               <span>&yen;</span>
               <span class="spec-c-price-text">{{ spec.price }}</span>
             </div>
-            <div class="spec-c-lineprice-box" v-if="spec.lineprice > spec.price">
+            <div
+              class="spec-c-lineprice-box"
+              v-if="spec.lineprice > spec.price"
+            >
               <span class="spec-c-lineprice">{{ spec.lineprice }}元</span>
             </div>
             <div class="spec-c-desc" v-html="spec.desc"></div>
@@ -64,7 +78,7 @@ export default {
     },
     list: {
       type: Array,
-      default () {
+      default() {
         return [
           // {
           //   id: 1,
@@ -87,18 +101,18 @@ export default {
     prop: 'active',
     event: 'activeChange'
   },
-  data () {
+  data() {
     return {}
   },
   computed: {
-    hasTip () {
-      const index = this.list.findIndex(spec => {
+    hasTip() {
+      const index = this.list.findIndex((spec) => {
         return !!spec.tipText
       })
       return index !== -1
     },
-    activeItem () {
-      return this.list.find(spec => spec[this.activeType] === this.active)
+    activeItem() {
+      return this.list.find((spec) => spec[this.activeType] === this.active)
     }
   },
   watch: {
@@ -107,11 +121,11 @@ export default {
     }
   },
   methods: {
-    calcActive (spec) {
+    calcActive(spec) {
       return spec[this.activeType] === this.active
     },
     // v-model专用自定义事件
-    clickSpec (spec) {
+    clickSpec(spec) {
       this.$emit('activeChange', spec[this.activeType])
     }
   }
@@ -126,9 +140,10 @@ export default {
     color: #171826;
     line-height: 20px;
   }
-  &-ft {}
+  &-ft {
+  }
 }
-.spec-card{
+.spec-card {
   padding: 12px 0;
 }
 .spec-list-content {
@@ -176,13 +191,13 @@ export default {
     white-space: nowrap;
   }
 }
-.spec-c-lineprice{
+.spec-c-lineprice {
   font-size: 11px;
-  color: #9B9CA3;
+  color: #9b9ca3;
   line-height: 22px;
   text-decoration: line-through;
 }
-.spec-c-lineprice-box{
+.spec-c-lineprice-box {
   height: 22px;
 }
 
@@ -204,7 +219,7 @@ export default {
     right: -6px;
     top: -6px;
     border-radius: 10px 0px 10px 0px;
-    background: linear-gradient(98deg, #FF7C32 0%, #F33838 100%);
+    background: linear-gradient(98deg, #ff7c32 0%, #f33838 100%);
     &.tip-text {
       margin-left: 4px;
     }
@@ -218,7 +233,7 @@ export default {
     padding: 2px 6px;
     height: 18px;
     color: #fff;
-    background: linear-gradient(102deg,#ffa674, #f01212 100%);
+    background: linear-gradient(102deg, #ffa674, #f01212 100%);
     border-radius: 0;
     border-top-left-radius: 4px;
     border-bottom-left-radius: 4px;
@@ -235,14 +250,14 @@ export default {
     }
   }
 }
-.activity-badge{
+.activity-badge {
   position: absolute;
   top: -8px;
   right: -8px;
   display: flex;
   align-items: center;
   padding: 2px 5px;
-  background: linear-gradient(98deg, #FF7C32 0%, #F33838 100%);
+  background: linear-gradient(98deg, #ff7c32 0%, #f33838 100%);
   border-radius: 9px 0px;
   text-align: center;
   color: #fff;

+ 128 - 81
apps/mobile/src/components/create-order/SubmitBar.vue

@@ -1,22 +1,35 @@
 <template>
   <div class="submit-bar">
     <div class="bar-content">
-      <van-overlay :show="showMask" duration="0.5" @click="onCloseDetail"></van-overlay>
+      <van-overlay
+        :show="showMask"
+        duration="0.5"
+        @click="onCloseDetail"
+      ></van-overlay>
       <slot></slot>
       <transition name="van-slide-up">
         <div class="bar-hide" v-show="showDetail">
           <div class="detail-title">
             <span class="detail-title-label">优惠明细</span>
-            <van-icon name="clear" color="#C0C4CC" size="18px" @click="onCloseDetail" />
+            <van-icon
+              name="clear"
+              color="#C0C4CC"
+              size="18px"
+              @click="onCloseDetail"
+            />
           </div>
           <div>
             <p class="detail-item">
               <span class="detail-item-label">原价</span>
-              <span class="detail-item-value">¥{{formatMoney(fen2Yuan(params.origin))}}</span>
+              <span class="detail-item-value"
+                >¥{{ formatMoney(fen2Yuan(params.origin)) }}</span
+              >
             </p>
             <p class="detail-item" v-if="params.giftName">
               <span class="detail-item-label">赠品</span>
-              <span class="detail-item-value blue-value">{{params.giftName}}</span>
+              <span class="detail-item-value blue-value">{{
+                params.giftName
+              }}</span>
             </p>
             <!-- <p class="detail-item" v-if="params.origin !== params.pay">
               <span class="detail-item-label">折扣价</span>
@@ -24,11 +37,15 @@
             </p> -->
             <p class="detail-item" v-if="params.discount">
               <span class="detail-item-label">优惠</span>
-              <span class="detail-item-value red-value">-¥{{formatMoney(fen2Yuan(params.discount))}}</span>
+              <span class="detail-item-value red-value"
+                >-¥{{ formatMoney(fen2Yuan(params.discount)) }}</span
+              >
             </p>
             <p class="detail-item">
               <span class="detail-item-label">实付</span>
-              <span class="detail-item-value red-value">¥{{formatMoney(payPrice)}}</span>
+              <span class="detail-item-value red-value"
+                >¥{{ formatMoney(payPrice) }}</span
+              >
             </p>
           </div>
         </div>
@@ -41,17 +58,17 @@
               <van-popover
                 :value="params.showPoints"
                 placement="top-start"
-                :offset="[18,8]"
+                :offset="[18, 8]"
                 :close-on-click-outside="false"
                 get-container="#app"
               >
                 <div class="j-points-popover">
                   <i class="j-icon wh24 icon-points"></i>
-                  {{params.score}}
+                  {{ params.score }}
                 </div>
                 <template #reference>
                   <span class="amount-value">
-                    ¥<em>{{formatMoney(payPrice)}}</em>
+                    ¥<em>{{ formatMoney(payPrice) }}</em>
                   </span>
                 </template>
               </van-popover>
@@ -63,21 +80,46 @@
               </div>
               <div class="other-original">
                 <span class="o-label">原价:</span>
-                <span class="o-value">¥{{formatMoney(fen2Yuan(params.origin))}}</span>
+                <span class="o-value"
+                  >¥{{ formatMoney(fen2Yuan(params.origin)) }}</span
+                >
               </div>
             </div>
           </div>
-          <div class="num-sub" v-else>本次扣除:<span style="color: #2ABED1">{{params.deductCount}}</span>条</div>
+          <div class="num-sub" v-else>
+            本次扣除:<span style="color: #2abed1">{{
+              params.deductCount
+            }}</span
+            >条
+          </div>
           <div class="btn-group">
-            <van-button type="default" size="large" v-if="showCancelBtn" @click="onCancelBtn">{{cancelBtnText}}</van-button>
-            <van-button id="btn" type="primary" size="large" :disabled="confirmDisabled" @click="onConfirmBtn">
-              <div class="confirm-button-text">{{confirmBtnText}}</div>
-              <div class="confirm-button-tip-text" v-if="confirmBtnTipText">{{confirmBtnTipText}}</div>
+            <van-button
+              type="default"
+              size="large"
+              v-if="showCancelBtn"
+              @click="onCancelBtn"
+              >{{ cancelBtnText }}</van-button
+            >
+            <van-button
+              id="btn"
+              type="primary"
+              size="large"
+              :disabled="confirmDisabled"
+              @click="onConfirmBtn"
+            >
+              <div class="confirm-button-text">{{ confirmBtnText }}</div>
+              <div class="confirm-button-tip-text" v-if="confirmBtnTipText">
+                {{ confirmBtnTipText }}
+              </div>
             </van-button>
           </div>
         </div>
         <div class="bar-bottom">
-          <van-checkbox :value="checked" @input="onCheckboxInput" @change="onExChange">
+          <van-checkbox
+            :value="checked"
+            @input="onCheckboxInput"
+            @change="onExChange"
+          >
             <div class="terms">
               <span>我已阅读,理解并接受</span>
               <span
@@ -86,11 +128,14 @@
                 :key="item.url"
                 @click.stop="toLink(item)"
               >
-                {{item.text}}
+                {{ item.text }}
               </span>
             </div>
             <template #icon>
-              <div class="j-icon checkbox" :class="checked ? 'checked': '' "></div>
+              <div
+                class="j-icon checkbox"
+                :class="checked ? 'checked' : ''"
+              ></div>
             </template>
           </van-checkbox>
         </div>
@@ -129,7 +174,7 @@ export default {
     // 产品业务范围参数
     params: {
       type: Object,
-      default () {
+      default() {
         return {
           // giftName: '',
           // pay: 0,
@@ -172,7 +217,7 @@ export default {
     // 协议
     links: {
       type: Array,
-      default () {
+      default() {
         return []
       }
     },
@@ -183,62 +228,64 @@ export default {
     }
   },
   computed: {
-    getLinks () {
+    getLinks() {
       const flag = this.links && this.links.length > 0
       return flag ? this.defaultLink.concat(this.links) : this.defaultLink
     },
     // 计算实付价
-    payPrice () {
+    payPrice() {
       return fen2Yuan(this.params.origin - this.params.discount)
     }
   },
-  data () {
+  data() {
     return {
       showMask: false,
-      defaultLink: [{
-        text: '《剑鱼标讯线上购买与服务条款》',
-        url: '/static/online_terms'
-      }],
+      defaultLink: [
+        {
+          text: '《剑鱼标讯线上购买与服务条款》',
+          url: '/static/online_terms'
+        }
+      ],
       showDetail: false
     }
   },
-  created () {
+  created() {
     this.$emit('pass', this.checked)
   },
   methods: {
     fen2Yuan,
     // 处理金额加逗号
-    formatMoney (price) {
+    formatMoney(price) {
       return formatPrice(price, -1, true)
     },
     // 关闭优惠明细
-    onCloseDetail () {
+    onCloseDetail() {
       this.showDetail = false
       this.showMask = false
     },
     // 展开优惠明细
-    onOpenDetail () {
+    onOpenDetail() {
       this.showMask = !this.showMask
       this.showDetail = !this.showDetail
     },
     // 协议条款跳转
-    toLink (data) {
+    toLink(data) {
       this.$emit('toLink', data)
       this.$router.push(data.url)
     },
     // 左侧按钮事件
-    onCancelBtn () {
+    onCancelBtn() {
       this.$emit('cancelBtn')
     },
     // 右侧提交事件
-    onConfirmBtn () {
+    onConfirmBtn() {
       this.$emit('confirmBtn')
     },
-    onCheckboxInput (v) {
+    onCheckboxInput(v) {
       this.$emit('input', v)
     },
     // checkbox事件
-    onExChange (val) {
+    onExChange(val) {
       this.$emit('pass', val)
     }
   }
@@ -246,165 +293,165 @@ export default {
 </script>
 
 <style lang="scss">
-  .icon-points{
-    margin-right: 4px;
-  }
+.icon-points {
+  margin-right: 4px;
+}
 </style>
 <style lang="scss" scoped>
-.submit-bar{
-  .bar-content{
+.submit-bar {
+  .bar-content {
     position: relative;
   }
   .bar-show,
-  .bar-hide{
+  .bar-hide {
     position: relative;
     padding: 0 16px;
     background: #fff;
     z-index: 99;
   }
-  .bar-hide{
+  .bar-hide {
     position: absolute;
     top: 0;
     width: 100%;
     transform: translate(0, -100%);
     border-radius: 8px 8px 0 0;
-    .detail-title{
+    .detail-title {
       display: flex;
       justify-content: space-between;
       align-items: center;
       padding: 22px 0 12px;
       line-height: 30px;
-      .detail-title-label{
+      .detail-title-label {
         font-size: 20px;
         color: #171826;
       }
     }
-    .detail-item{
+    .detail-item {
       display: flex;
       justify-content: space-between;
       align-items: center;
       padding: 10px 0;
       .detail-item-label,
-      .detail-item-value{
+      .detail-item-value {
         font-size: 14px;
         color: #171826;
       }
-      .red-value{
+      .red-value {
         color: $color_red;
       }
     }
   }
-  .bar-top{
+  .bar-top {
     display: flex;
     align-items: center;
     justify-content: space-between;
     padding: 12px 0;
     height: 70px;
     box-sizing: border-box;
-    .price-group{
+    .price-group {
       margin-right: 4px;
       height: 100%;
       display: flex;
       flex-direction: column;
       justify-content: space-around;
-      .p-amount{
+      .p-amount {
         display: flex;
         align-items: center;
       }
-      .amount-label{
+      .amount-label {
         padding-right: 8px;
-        color: #9B9CA3;
+        color: #9b9ca3;
         font-size: 12px;
       }
-      .amount-value{
-        color: #FB483D;
+      .amount-value {
+        color: #fb483d;
         font-size: 16px;
-        em{
+        em {
           font-size: 20px;
         }
       }
-      .p-other{
+      .p-other {
         display: flex;
         align-items: center;
         font-size: 12px;
       }
-      .other-detail{
+      .other-detail {
         display: flex;
         align-items: center;
         padding: 0 3px;
         height: 14px;
-        background: #F5F7F7;
+        background: #f5f7f7;
         border-radius: 2px;
         font-size: 10px;
         white-space: nowrap;
-        color: #9B9CA3;
+        color: #9b9ca3;
       }
-      .other-original{
+      .other-original {
         margin-left: 8px;
-        color: #9B9CA3;
+        color: #9b9ca3;
         font-size: 10px;
-        .o-value{
+        .o-value {
           text-decoration: line-through;
         }
       }
     }
-    .num-sub{
+    .num-sub {
       font-size: 13px;
-      color: #9B9CA3;
+      color: #9b9ca3;
       /*margin-right: 21px;*/
       width: 30.33vw;
     }
-    .btn-group{
+    .btn-group {
       display: flex;
       align-items: center;
       justify-content: flex-end;
       flex: 1;
     }
   }
-  .bar-bottom{
+  .bar-bottom {
     padding: 8px 0 12px;
-    .terms{
+    .terms {
       font-size: 12px;
-      color: #5F5E64;
+      color: #5f5e64;
       text-align: justify;
     }
-    .href{
+    .href {
       color: $color_main;
     }
-    .checkbox{
+    .checkbox {
       width: 18px;
       height: 18px;
       &.checked,
-      &:checked{
+      &:checked {
         width: 18px;
         height: 18px;
       }
     }
   }
-  ::v-deep{
-    .van-popover__content{
-      color: #FB483D;
+  ::v-deep {
+    .van-popover__content {
+      color: #fb483d;
     }
-    .van-button{
+    .van-button {
       min-height: 40px;
       flex: 1;
       padding: 5px 10px;
       white-space: nowrap;
     }
-    .van-button--default{
+    .van-button--default {
       margin-right: 8px;
-      background-color: #EDEFF2;
+      background-color: #edeff2;
       border-color: transparent;
     }
-    .van-button--primary{
+    .van-button--primary {
       max-width: 165px;
     }
-    .van-checkbox__label{
+    .van-checkbox__label {
       margin-left: 4px;
       line-height: normal;
     }
     .van-icon-arrow-down,
-    .van-icon-arrow-up{
+    .van-icon-arrow-up {
       margin-left: 1px;
       font-size: 10px;
     }

+ 116 - 78
apps/mobile/src/components/create-order/SubmitBarOld.vue

@@ -7,24 +7,37 @@
         <div class="bar-hide" v-show="showDetail">
           <div class="detail-title">
             <span class="detail-title-label">优惠明细</span>
-            <van-icon name="clear" color="#C0C4CC" size="18px" @click="onCloseDetail" />
+            <van-icon
+              name="clear"
+              color="#C0C4CC"
+              size="18px"
+              @click="onCloseDetail"
+            />
           </div>
           <div>
             <p class="detail-item">
               <span class="detail-item-label">原价</span>
-              <span class="detail-item-value">¥{{formatMoney(initPrice)}}</span>
+              <span class="detail-item-value"
+                >¥{{ formatMoney(initPrice) }}</span
+              >
             </p>
             <p class="detail-item" v-if="params.giftName">
               <span class="detail-item-label">赠品</span>
-              <span class="detail-item-value blue-value">{{params.giftName}}</span>
+              <span class="detail-item-value blue-value">{{
+                params.giftName
+              }}</span>
             </p>
             <p class="detail-item" v-if="initPrice !== fen2Yuan(params.pay)">
               <span class="detail-item-label">折扣价</span>
-              <span class="detail-item-value">¥{{formatMoney(fen2Yuan(params.pay))}}</span>
+              <span class="detail-item-value"
+                >¥{{ formatMoney(fen2Yuan(params.pay)) }}</span
+              >
             </p>
             <p class="detail-item" v-if="realPrice !== fen2Yuan(params.pay)">
               <span class="detail-item-label">优惠</span>
-              <span class="detail-item-value red-value">-¥{{formatMoney(discountPrice)}}</span>
+              <span class="detail-item-value red-value"
+                >-¥{{ formatMoney(discountPrice) }}</span
+              >
             </p>
             <!-- <p class="detail-item" v-if="params.couponVal > 0">
               <span class="detail-item-label">优惠券</span>
@@ -32,7 +45,9 @@
             </p> -->
             <p class="detail-item">
               <span class="detail-item-label">实付</span>
-              <span class="detail-item-value red-value">¥{{formatMoney(realPrice)}}</span>
+              <span class="detail-item-value red-value"
+                >¥{{ formatMoney(realPrice) }}</span
+              >
             </p>
           </div>
         </div>
@@ -45,17 +60,17 @@
               <van-popover
                 :value="params.showPoints"
                 placement="top-start"
-                :offset="[18,8]"
+                :offset="[18, 8]"
                 :close-on-click-outside="false"
                 get-container="#app"
               >
                 <div class="j-points-popover">
                   <i class="j-icon wh24 icon-points"></i>
-                  {{params.score}}
+                  {{ params.score }}
                 </div>
                 <template #reference>
                   <span class="amount-value">
-                    ¥<em>{{formatMoney(realPrice)}}</em>
+                    ¥<em>{{ formatMoney(realPrice) }}</em>
                   </span>
                 </template>
               </van-popover>
@@ -67,14 +82,32 @@
               </div>
               <div class="other-original">
                 <span class="o-label">原价:</span>
-                <span class="o-value">¥{{formatMoney(initPrice)}}</span>
+                <span class="o-value">¥{{ formatMoney(initPrice) }}</span>
               </div>
             </div>
           </div>
-          <div class="num-sub" v-else>本次扣除:<span style="color: #2ABED1">{{params.deductCount}}</span>条</div>
+          <div class="num-sub" v-else>
+            本次扣除:<span style="color: #2abed1">{{
+              params.deductCount
+            }}</span
+            >条
+          </div>
           <div class="btn-group">
-            <van-button type="default" size="large" v-if="showCancelBtn" @click="onCancelBtn">{{cancelBtnText}}</van-button>
-            <van-button id="btn" type="primary" size="large" :disabled="confirmDisabled" @click="onConfirmBtn">{{confirmBtnText}}</van-button>
+            <van-button
+              type="default"
+              size="large"
+              v-if="showCancelBtn"
+              @click="onCancelBtn"
+              >{{ cancelBtnText }}</van-button
+            >
+            <van-button
+              id="btn"
+              type="primary"
+              size="large"
+              :disabled="confirmDisabled"
+              @click="onConfirmBtn"
+              >{{ confirmBtnText }}</van-button
+            >
           </div>
         </div>
         <div class="bar-bottom">
@@ -87,11 +120,14 @@
                 :key="item.url"
                 @click.stop="toLink(item)"
               >
-                {{item.text}}
+                {{ item.text }}
               </span>
             </div>
             <template #icon>
-              <div class="j-icon checkbox" :class="checked ? 'checked': '' "></div>
+              <div
+                class="j-icon checkbox"
+                :class="checked ? 'checked' : ''"
+              ></div>
             </template>
           </van-checkbox>
         </div>
@@ -108,7 +144,7 @@ export default {
     // 产品业务范围参数
     params: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     },
@@ -135,7 +171,7 @@ export default {
     // 协议
     links: {
       type: Array,
-      default () {
+      default() {
         return []
       }
     },
@@ -154,12 +190,12 @@ export default {
     [Popup.name]: Popup
   },
   computed: {
-    getLinks () {
+    getLinks() {
       const flag = this.links && this.links.length > 0
       return flag ? this.defaultLink.concat(this.links) : this.defaultLink
     },
     // 计算原价
-    initPrice () {
+    initPrice() {
       if (this.params.pay === this.params.total) {
         return fen2Yuan(this.params.pay)
       } else {
@@ -167,7 +203,7 @@ export default {
       }
     },
     // 计算实付价
-    realPrice () {
+    realPrice() {
       const couponPrice = yuan2Fen(this.params.couponVal)
       const { reduce, promotionalPrice, discount } = this.params
       // 有优惠金额减去优惠金额(转换成分)
@@ -184,54 +220,56 @@ export default {
       }
     },
     // 计算优惠金额
-    discountPrice () {
+    discountPrice() {
       return fen2Yuan(this.params.pay) - this.realPrice
     }
   },
   watch: {},
   data: () => ({
     showMask: false,
-    defaultLink: [{
-      text: '《剑鱼标讯线上购买与服务条款》',
-      url: '/static/online_terms'
-    }],
+    defaultLink: [
+      {
+        text: '《剑鱼标讯线上购买与服务条款》',
+        url: '/static/online_terms'
+      }
+    ],
     checked: false,
     showDetail: false
   }),
-  created () {
+  created() {
     this.$emit('pass', this.checked)
   },
   methods: {
     fen2Yuan,
     // 处理金额加逗号
-    formatMoney (price) {
+    formatMoney(price) {
       return formatPrice(price, -1, true)
     },
     // 关闭优惠明细
-    onCloseDetail () {
+    onCloseDetail() {
       this.showDetail = false
       this.showMask = false
     },
     // 展开优惠明细
-    onOpenDetail () {
+    onOpenDetail() {
       this.showMask = !this.showMask
       this.showDetail = !this.showDetail
     },
     // 协议条款跳转
-    toLink (data) {
+    toLink(data) {
       this.$emit('toLink', data)
       this.$router.push(data.url)
     },
     // 左侧按钮事件
-    onCancelBtn () {
+    onCancelBtn() {
       this.$emit('cancelBtn')
     },
     // 右侧提交事件
-    onConfirmBtn () {
+    onConfirmBtn() {
       this.$emit('confirmBtn')
     },
     // checkbox事件
-    onExChange (val) {
+    onExChange(val) {
       this.$emit('pass', val)
     }
   }
@@ -239,159 +277,159 @@ export default {
 </script>
 
 <style lang="scss">
-  .icon-points{
-    margin-right: 4px;
-  }
+.icon-points {
+  margin-right: 4px;
+}
 </style>
 <style lang="scss" scoped>
-.submit-bar{
-  .bar-content{
+.submit-bar {
+  .bar-content {
     position: relative;
   }
   .bar-show,
-  .bar-hide{
+  .bar-hide {
     position: relative;
     padding: 0 16px;
     background: #fff;
     z-index: 99;
   }
-  .bar-hide{
+  .bar-hide {
     position: absolute;
     top: 0;
     width: 100%;
     transform: translate(0, -100%);
     border-radius: 8px 8px 0 0;
-    .detail-title{
+    .detail-title {
       display: flex;
       justify-content: space-between;
       align-items: center;
       padding: 22px 0 12px;
       line-height: 30px;
-      .detail-title-label{
+      .detail-title-label {
         font-size: 20px;
         color: #171826;
       }
     }
-    .detail-item{
+    .detail-item {
       display: flex;
       justify-content: space-between;
       align-items: center;
       padding: 10px 0;
       .detail-item-label,
-      .detail-item-value{
+      .detail-item-value {
         font-size: 14px;
         color: #171826;
       }
-      .red-value{
+      .red-value {
         color: $color_red;
       }
     }
   }
-  .bar-top{
+  .bar-top {
     display: flex;
     align-items: center;
     justify-content: space-between;
     padding: 12px 0;
     box-sizing: border-box;
-    .price-group{
+    .price-group {
       margin-right: 4px;
-      .p-amount{
+      .p-amount {
         display: flex;
         align-items: center;
       }
-      .amount-label{
+      .amount-label {
         padding-right: 8px;
-        color: #9B9CA3;
+        color: #9b9ca3;
         font-size: 12px;
       }
-      .amount-value{
-        color: #FB483D;
+      .amount-value {
+        color: #fb483d;
         font-size: 16px;
-        em{
+        em {
           font-size: 20px;
         }
       }
-      .p-other{
+      .p-other {
         display: flex;
         align-items: center;
         font-size: 12px;
       }
-      .other-detail{
+      .other-detail {
         display: flex;
         align-items: center;
         padding: 0 3px;
         height: 14px;
-        background: #F5F7F7;
+        background: #f5f7f7;
         border-radius: 2px;
         font-size: 10px;
         white-space: nowrap;
-        color: #9B9CA3;
+        color: #9b9ca3;
       }
-      .other-original{
+      .other-original {
         margin-left: 8px;
-        color: #9B9CA3;
+        color: #9b9ca3;
         font-size: 10px;
-        .o-value{
+        .o-value {
           text-decoration: line-through;
         }
       }
     }
-    .num-sub{
+    .num-sub {
       font-size: 13px;
-      color: #9B9CA3;
+      color: #9b9ca3;
       /*margin-right: 21px;*/
       width: 30.33vw;
     }
-    .btn-group{
+    .btn-group {
       display: flex;
       align-items: center;
       justify-content: flex-end;
       flex: 1;
     }
   }
-  .bar-bottom{
+  .bar-bottom {
     padding: 8px 0 12px;
-    .terms{
+    .terms {
       font-size: 12px;
-      color: #5F5E64;
+      color: #5f5e64;
       text-align: justify;
     }
-    .href{
+    .href {
       color: $color_main;
     }
-    .checkbox{
+    .checkbox {
       width: 18px;
       height: 18px;
       &.checked,
-      &:checked{
+      &:checked {
         width: 18px;
         height: 18px;
       }
     }
   }
-  ::v-deep{
-    .van-popover__content{
-      color: #FB483D;
+  ::v-deep {
+    .van-popover__content {
+      color: #fb483d;
     }
-    .van-button{
+    .van-button {
       flex: 1;
       padding: 0 10px;
       white-space: nowrap;
     }
-    .van-button--default{
+    .van-button--default {
       margin-right: 8px;
-      background-color: #EDEFF2;
+      background-color: #edeff2;
       border-color: transparent;
     }
-    .van-button--primary{
+    .van-button--primary {
       max-width: 165px;
     }
-    .van-checkbox__label{
+    .van-checkbox__label {
       margin-left: 4px;
       line-height: normal;
     }
     .van-icon-arrow-down,
-    .van-icon-arrow-up{
+    .van-icon-arrow-up {
       margin-left: 1px;
       font-size: 10px;
     }

+ 82 - 74
apps/mobile/src/components/custom-report/index.vue

@@ -2,10 +2,12 @@
   <div class="custom-report">
     <div class="custom-header" v-if="showTitle">
       <div class="c-h-title">市场分析报告</div>
-      <div class="c-h-label van-hairline--bottom">量身定制个性化报告,分析市场竞争格局,为企业找准市场机会!</div>
+      <div class="c-h-label van-hairline--bottom">
+        量身定制个性化报告,分析市场竞争格局,为企业找准市场机会!
+      </div>
     </div>
     <div class="custom-main">
-      <div class="custom-chart-title">{{chartTitle}}</div>
+      <div class="custom-chart-title">{{ chartTitle }}</div>
       <div class="custom-chart-main">
         <div id="chartMain" ref="chartBox">
           <div></div>
@@ -39,22 +41,22 @@ export default {
     },
     chartData: {
       type: Object,
-      default () {
+      default() {
         return {}
       }
     }
   },
-  data () {
+  data() {
     return {
       chartTitle: ''
     }
   },
-  mounted () {
+  mounted() {
     this.initData(this.chartData)
   },
   watch: {
     chartData: {
-      handler (newval) {
+      handler(newval) {
         this.initData(newval)
       },
       deep: true
@@ -62,14 +64,14 @@ export default {
   },
   methods: {
     // 初始化数据
-    initData (newval) {
+    initData(newval) {
       let data
       const chartKeyArr = Object.keys(newval)
       const fieldText = chartKeyArr[random(chartKeyArr.length - 1)]
       const mountedNode = this.$refs.chartBox.childNodes[0]
       if (fieldText === 'customer_scale') {
         this.chartTitle = '客户分布'
-        data = newval.customer_scale.map(item => {
+        data = newval.customer_scale.map((item) => {
           return {
             ...item,
             name: item.buyclass,
@@ -96,12 +98,15 @@ export default {
             [data.columns[1]]: 'total_amount',
             [data.columns[2]]: 'total_number'
           }
-          chartLIst.forEach(item => {
+          chartLIst.forEach((item) => {
             const row = {}
-            data.columns.forEach(column => {
-              if (field[column] === 'total_amount' || field[column] === 'total_number') {
+            data.columns.forEach((column) => {
+              if (
+                field[column] === 'total_amount' ||
+                field[column] === 'total_number'
+              ) {
                 row[column] = (item[field[column]] * 100).toFixed(2)
-                total += (item[field[column]] - 0)
+                total += item[field[column]] - 0
               } else {
                 row[column] = item[field[column]]
               }
@@ -133,12 +138,15 @@ export default {
             [data.columns[1]]: 'total_amount',
             [data.columns[2]]: 'total_number'
           }
-          buyerclassList.forEach(item => {
+          buyerclassList.forEach((item) => {
             const row = {}
-            data.columns.forEach(column => {
-              if (field[column] === 'total_amount' || field[column] === 'total_number') {
+            data.columns.forEach((column) => {
+              if (
+                field[column] === 'total_amount' ||
+                field[column] === 'total_number'
+              ) {
                 row[column] = (item[field[column]] * 100).toFixed(2)
-                total += (item[field[column]] - 0)
+                total += item[field[column]] - 0
               } else {
                 row[column] = item[field[column]]
               }
@@ -159,7 +167,7 @@ export default {
       }
     },
     // 感兴趣点我
-    async clickEvent () {
+    async clickEvent() {
       this.$emit('do-leave', 'button')
 
       try {
@@ -175,7 +183,7 @@ export default {
       })
     },
     // 查看报告
-    async viewReport () {
+    async viewReport() {
       this.$emit('do-leave', 'report')
 
       try {
@@ -190,67 +198,67 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .custom-report{
-    padding: 18px 0;
-    background: #fff;
-    .custom-header{
-      padding: 0 16px;
-      font-family: 'PingFang SC';
-      font-style: normal;
-      font-weight: 400;
-      .c-h-title{
-        color: #171826;
-        font-size: 16px;
-        line-height: 22px;
-      }
-      .c-h-label{
-        padding-top: 2px;
-        color: #9B9CA3;
-        font-size: 12px;
-        line-height: 18px;
-        padding-bottom: 8px;
-      }
+.custom-report {
+  padding: 18px 0;
+  background: #fff;
+  .custom-header {
+    padding: 0 16px;
+    font-family: 'PingFang SC';
+    font-style: normal;
+    font-weight: 400;
+    .c-h-title {
+      color: #171826;
+      font-size: 16px;
+      line-height: 22px;
     }
-    .custom-main{
-      display: flex;
-      flex-direction: column;
-      align-items: center;
-      .custom-chart-title{
-        padding: 8px 0;
-      }
-      .custom-chart-main{
+    .c-h-label {
+      padding-top: 2px;
+      color: #9b9ca3;
+      font-size: 12px;
+      line-height: 18px;
+      padding-bottom: 8px;
+    }
+  }
+  .custom-main {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    .custom-chart-title {
+      padding: 8px 0;
+    }
+    .custom-chart-main {
+      width: 100%;
+      height: 280px;
+      #chartMain {
         width: 100%;
         height: 280px;
-        #chartMain{
-          width: 100%;
-          height: 280px;
-        }
       }
     }
-    .custom-footer{
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 0 16px;
-      button {
-        width: 165px;
-        height: 40px;
-        border-radius: 4px;
-        font-family: 'PingFang SC';
-        font-style: normal;
-        font-weight: 400;
-        font-size: 16px;
-        line-height: 24px;
-      }
-      .click-me{
-        background: #2ABED1;
-        color: #F7F9FA;
-      }
-      .view-report {
-        border: 1px solid #2ABED1;
-        background: #fff;
-        color: #2ABED1;
-      }
+  }
+  .custom-footer {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0 16px;
+    button {
+      width: 165px;
+      height: 40px;
+      border-radius: 4px;
+      font-family: 'PingFang SC';
+      font-style: normal;
+      font-weight: 400;
+      font-size: 16px;
+      line-height: 24px;
+    }
+    .click-me {
+      background: #2abed1;
+      color: #f7f9fa;
+    }
+    .view-report {
+      border: 1px solid #2abed1;
+      background: #fff;
+      color: #2abed1;
     }
   }
+}
 </style>

+ 106 - 99
apps/mobile/src/components/dataExport/popupDataexport.vue

@@ -5,13 +5,24 @@
         <div class="close" @click="show = false"></div>
         <div class="content_box">
           <p class="title">温馨提示</p>
-          <div class="text_box">您选择的数据超过了导出数据最大值<span class="blue">20,000</span>,请优化条件后导出。您也可联系客服:<span @click="call_phone('400-108-6670')">400-108-6670</span>,或添加<span class="blue">客服微信</span>进行定制化导出。</div>
+          <div class="text_box">
+            您选择的数据超过了导出数据最大值<span class="blue">20,000</span
+            >,请优化条件后导出。您也可联系客服:<span
+              @click="call_phone('400-108-6670')"
+              >400-108-6670</span
+            >,或添加<span class="blue">客服微信</span>进行定制化导出。
+          </div>
           <div class="qr_box">
-            <img :src="img" alt="">
+            <img :src="img" alt="" />
           </div>
           <div class="desc">客服微信</div>
           <div class="btn_box">
-            <div class="btn"><div :class="choose?'choosed':'nochoose'" @click="btnClick"></div></div>
+            <div class="btn">
+              <div
+                :class="choose ? 'choosed' : 'nochoose'"
+                @click="btnClick"
+              ></div>
+            </div>
             <p class="text">后续不再提醒</p>
           </div>
         </div>
@@ -19,84 +30,82 @@
           <span>继续导出20000条</span>
         </div>
       </div>
-    </van-popup>  
+    </van-popup>
   </div>
 </template>
 <script>
-import { Popup } from 'vant';
-import { mapState ,mapActions} from 'vuex'
+import { Popup } from 'vant'
+import { mapState, mapActions } from 'vuex'
 import { callPhone } from '@/utils/callFn'
 import { debounce } from 'lodash'
-import {setDontPromptAgain, getDontPromptAgain } from '@/api/modules'
+import { setDontPromptAgain, getDontPromptAgain } from '@/api/modules'
 export default {
   name: 'popupDataexport',
   components: {
-    [Popup.name]: Popup,
-  },
-  props: {
-
+    [Popup.name]: Popup
   },
+  props: {},
   computed: {
-    ...mapState('user', [
-      'power',
-    ])
+    ...mapState('user', ['power'])
   },
-  data () {
-    return{
+  data() {
+    return {
       show: false,
-      choose:false,
-      img:'',
-      isPrompt:true
+      choose: false,
+      img: '',
+      isPrompt: true
     }
   },
-  created (){
-    getDontPromptAgain().then(res=>{
-      if(!res){
+  created() {
+    getDontPromptAgain().then((res) => {
+      if (!res) {
         return
       }
       this.isPrompt = res.isPrompt
     })
   },
-  mounted () {
+  mounted() {
     this.getQRimg()
   },
   methods: {
-    ...mapActions('user',[
-      'getPower'
-    ]),
-    btnClick(){
+    ...mapActions('user', ['getPower']),
+    btnClick() {
       this.choose = !this.choose
       this.setDontPrompt()
     },
     setDontPrompt: debounce(function () {
-      if(this.choose){
-        setDontPromptAgain({status:1}).then(res=>{this.isPrompt = false})
-      }else{
-        setDontPromptAgain({status:0}).then(res=>{this.isPrompt = true})
+      if (this.choose) {
+        setDontPromptAgain({ status: 1 }).then((res) => {
+          this.isPrompt = false
+        })
+      } else {
+        setDontPromptAgain({ status: 0 }).then((res) => {
+          this.isPrompt = true
+        })
       }
     }, 300),
-    call_phone(tel){
-      if(this.$envs.inApp || this.$envs.inWX){
+    call_phone(tel) {
+      if (this.$envs.inApp || this.$envs.inWX) {
         callPhone(tel)
       }
     },
-    next(){
-      this.$emit('next',{choose:this.choose})
+    next() {
+      this.$emit('next', { choose: this.choose })
     },
-    async getQRimg(){
-      if(this.power){
-        if(this.power.customers && this.power.customers.length>0){
+    async getQRimg() {
+      if (this.power) {
+        if (this.power.customers && this.power.customers.length > 0) {
           let customer = this.power.customers
-          customer.forEach(e => {
-            if(e.remark === '客户经理'){
+          customer.forEach((e) => {
+            if (e.remark === '客户经理') {
               this.img = e.wxer
             }
           })
-          if(this.img == ''){
+          if (this.img == '') {
             this.img = customer[0].wxer
           }
         }
-      }else{
+      } else {
         await this.getPower()
         this.getQRimg()
       }
@@ -106,113 +115,111 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.popupDataexport{
-  .van-popup{
-    background-color:  rgba(0, 0, 0, 0);
+.popupDataexport {
+  .van-popup {
+    background-color: rgba(0, 0, 0, 0);
   }
-  .warm{
+  .warm {
     width: 303px;
     height: 445px;
-    background-color: #FFF;
+    background-color: #fff;
     border-radius: 8px;
     position: relative;
-  .close{
-  width: 20px;
-  height: 20px;
-  display: block;
-  position: absolute;
-  right: 8px;
-  top: 8px;
-  z-index: 2;
-  background-image: url(@/assets/image/dataExport/close.png);
-  background-size: contain;
-  }
-    .content_box{
+    .close {
+      width: 20px;
+      height: 20px;
+      display: block;
+      position: absolute;
+      right: 8px;
+      top: 8px;
+      z-index: 2;
+      background-image: url(@/assets/image/dataExport/close.png);
+      background-size: contain;
+    }
+    .content_box {
       padding: 24px 30px 16px 30px;
-      .title{
+      .title {
         font-size: 18px;
         font-weight: 400;
         line-height: 26px;
         text-align: center;
         color: #171826;
       }
-      .text_box{
+      .text_box {
         font-size: 14px;
         font-weight: 400;
         line-height: 20px;
-        color: #5F5E64;
+        color: #5f5e64;
         margin-top: 8px;
-        .blue{
-          color: #2ABED1;
+        .blue {
+          color: #2abed1;
         }
       }
-      .qr_box{
-       border: 1px solid #0000001A;
-       border-radius: 8px;
-       width: 141px;
-       height: 141px;
-       display: flex;
-       justify-content: center;
-       align-items: center;
-       margin: auto;
-       margin-top: 24px;
-       img{
-        width: 134px;
-        height: 134px;
-
-       }
+      .qr_box {
+        border: 1px solid #0000001a;
+        border-radius: 8px;
+        width: 141px;
+        height: 141px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        margin: auto;
+        margin-top: 24px;
+        img {
+          width: 134px;
+          height: 134px;
+        }
       }
-      .desc{
-      text-align: center;
-      font-size: 14px;
-      font-weight: 400;
-      line-height: 20px;
-      color: #1B1A2A;
-      margin-top: 12px;
+      .desc {
+        text-align: center;
+        font-size: 14px;
+        font-weight: 400;
+        line-height: 20px;
+        color: #1b1a2a;
+        margin-top: 12px;
       }
     }
-    .btn_box{
+    .btn_box {
       display: flex;
       align-items: center;
       justify-content: center;
       margin-top: 24px;
-      .btn{
+      .btn {
         width: 24px;
         height: 24px;
         justify-content: center;
         display: flex;
         align-items: center;
       }
-      .choosed{
+      .choosed {
         width: 24px;
         height: 24px;
         background-image: url('@/assets/image/dataExport/choose_right.png');
         background-size: contain;
       }
-      .nochoose{
+      .nochoose {
         width: 18px;
         height: 18px;
         border-radius: 50%;
-        border: 1px solid #0000001A;
+        border: 1px solid #0000001a;
       }
-      .text{     
+      .text {
         font-size: 12px;
-        font-weight:400;
-        line-height:18px;
-        color: #9B9CA3;
+        font-weight: 400;
+        line-height: 18px;
+        color: #9b9ca3;
         margin-left: 4px;
       }
     }
-    .footer{
-      border-top: 1px solid #0000001A;
+    .footer {
+      border-top: 1px solid #0000001a;
       display: flex;
       justify-content: center;
       align-items: center;
-      color: #2ABED1;
+      color: #2abed1;
       font-size: 18px;
       height: 45px;
     }
   }
 }
-
 </style>

+ 23 - 30
apps/mobile/src/components/footer-tabbar/index.vue

@@ -10,17 +10,13 @@
     @change="onChange"
   >
     <van-tabbar-item
-      v-for="(item) in navs"
+      v-for="item in navs"
       :name="item.key"
       :badge="getNavBadges[item.key] || ''"
       :key="item.key"
     >
-      <div
-        class="tabbar-image"
-        slot="icon"
-        slot-scope="props"
-      >
-        <AppIcon v-show="!props.active" :name="item.icon"/>
+      <div class="tabbar-image" slot="icon" slot-scope="props">
+        <AppIcon v-show="!props.active" :name="item.icon" />
         <div
           v-show="props.active"
           class="lottie-an-tabbar"
@@ -30,9 +26,10 @@
       </div>
       <span
         class="tabbar-title"
-        :class="{active: props.active}"
+        :class="{ active: props.active }"
         slot-scope="props"
-      >{{ item.label }}</span>
+        >{{ item.label }}</span
+      >
     </van-tabbar-item>
   </van-tabbar>
 </template>
@@ -98,44 +95,40 @@ export default {
     }
   },
   computed: {
-    getNavBadges () {
+    getNavBadges() {
       return {
-        'message': this.getMessageBadgeNum
+        message: this.getMessageBadgeNum
       }
     },
-    getTabbarKeys () {
-      return this.navs.map(v => v.key)
+    getTabbarKeys() {
+      return this.navs.map((v) => v.key)
     },
-    getNowActiveKey () {
+    getNowActiveKey() {
       const nowKey = this.$route.meta?.tabbar
       if (this.isMounted) {
         this.refreshActiveIndex()
       }
       return nowKey
     },
-    getMessageBadgeNum () {
+    getMessageBadgeNum() {
       const count = this.allMsgCount
       if (count > 99) {
         return '99+'
       } else if (count > 0) {
         return String(count)
       } else {
-        return  ''
+        return ''
       }
     },
-    ...mapGetters('user', [
-      'isLogin'
-    ]),
-    ...mapGetters('message', [
-      'allMsgCount'
-    ])
+    ...mapGetters('user', ['isLogin']),
+    ...mapGetters('message', ['allMsgCount'])
   },
-  created () {
+  created() {
     if (this.isLogin) {
       this.getCount()
     }
   },
-  mounted () {
+  mounted() {
     this._LottieItems = this.navs.map((v, index) => {
       return {
         op: TabbarAnimationData[v.lottie].op,
@@ -153,22 +146,22 @@ export default {
   },
   methods: {
     ...mapActions('message', ['getMsgCountAction', 'getLetterCountAction']),
-    async getCount () {
+    async getCount() {
       await this.getMsgCountAction()
       await this.getLetterCountAction()
     },
-    getIndex (key) {
+    getIndex(key) {
       return this.getTabbarKeys.indexOf(key)
     },
-    refreshActiveIndex () {
+    refreshActiveIndex() {
       this.nowNavKey = this.$route.meta?.tabbar
       this.setActiveIcon(this.nowNavKey)
     },
-    setActiveIcon (key) {
+    setActiveIcon(key) {
       const index = this.getIndex(key)
       this._LottieItems[index].lottie.goToAndPlay(0, true)
     },
-    onChange (key) {
+    onChange(key) {
       const item = this.navs[this.getIndex(key)]
       this.setActiveIcon(key)
       this.$emit('change', item)
@@ -181,7 +174,7 @@ export default {
 <style lang="scss" scoped>
 $icon-size: 24px;
 $label-color: #171826;
-$label-color--active: #2ABED1;
+$label-color--active: #2abed1;
 
 .footer-box {
   background: #fff;

+ 183 - 118
apps/mobile/src/components/home/list.vue

@@ -1,11 +1,19 @@
 <template>
   <div class="home-list">
     <p class="title">最新标讯</p>
-    <van-loading v-if="loading" style="text-align: center"/>
+    <van-loading v-if="loading" style="text-align: center" />
     <div class="to-setting-container" v-if="showToSettingTip">
       <div class="to-setting-content">
-        <div class="to-setting-text">为了使您接收更多信息,可对关键词进行新增或修改。</div>
-        <van-button size="mini" class="setting-button" type="confirm" @click="gotoKeySettingPage">去设置</van-button>
+        <div class="to-setting-text">
+          为了使您接收更多信息,可对关键词进行新增或修改。
+        </div>
+        <van-button
+          size="mini"
+          class="setting-button"
+          type="confirm"
+          @click="gotoKeySettingPage"
+          >去设置</van-button
+        >
       </div>
     </div>
     <div class="list">
@@ -25,7 +33,11 @@
         @click="onClick(item)"
       >
         <template slot="icon" v-if="item.isCB.id">
-          <div class="right-event" :class="{'cb_blue': item.isCB.value}" @click.stop="setCanBiaoStatus(item)">
+          <div
+            class="right-event"
+            :class="{ cb_blue: item.isCB.value }"
+            @click.stop="setCanBiaoStatus(item)"
+          >
             <AppIcon
               style="margin-right: 4px"
               svg
@@ -33,7 +45,9 @@
               size="20"
               name="canbiao"
             />
-            <span class="label-icon">{{ item.isCB.value ? '终止参标' : '参标'}}</span>
+            <span class="label-icon">{{
+              item.isCB.value ? '终止参标' : '参标'
+            }}</span>
           </div>
         </template>
         <template slot="icon">
@@ -49,8 +63,19 @@
         </template>
       </project-cell>
       <div>
-        <van-popup :style="popupHeight" v-model="showBidStatus" get-container="body"  round position="bottom">
-          <bid-status-node @cancel-update="cancelUpdate" @save-success="saveSuccess" :project-cell-info="projectCellInfo" @set-height="setHeight"></bid-status-node>
+        <van-popup
+          :style="popupHeight"
+          v-model="showBidStatus"
+          get-container="body"
+          round
+          position="bottom"
+        >
+          <bid-status-node
+            @cancel-update="cancelUpdate"
+            @save-success="saveSuccess"
+            :project-cell-info="projectCellInfo"
+            @set-height="setHeight"
+          ></bid-status-node>
         </van-popup>
       </div>
     </div>
@@ -60,32 +85,56 @@
         <template v-if="getStatus.hasMore">
           <!-- 是VIP -->
           <template v-if="!isFree">
-            <van-button size="mini" type="text" @click="onClickTip('goSubAll')">查看全部</van-button>
+            <van-button size="mini" type="text" @click="onClickTip('goSubAll')"
+              >查看全部</van-button
+            >
           </template>
           <!-- 不是VIP -->
           <template v-else>
             <p>立即使用超级订阅,商机获取能力提升30倍。</p>
-            <van-button size="mini" type="confirm" @click="onClickTip('goSubInfo')">了解详情</van-button>
+            <van-button
+              size="mini"
+              type="confirm"
+              @click="onClickTip('goSubInfo')"
+              >了解详情</van-button
+            >
           </template>
         </template>
         <!-- 是否订阅关键词 -->
-        <template v-else-if="getStatus.hasList && !getStatus.hasSubscribe && false">
+        <template
+          v-else-if="getStatus.hasList && !getStatus.hasSubscribe && false"
+        >
           <!-- 是VIP -->
           <template v-if="!isFree">
             <p>您未设置关键词,设置后接收信息更精准!</p>
-            <van-button size="mini" type="confirm" @click="onClickTip('goSubSetting')">去设置</van-button>
+            <van-button
+              size="mini"
+              type="confirm"
+              @click="onClickTip('goSubSetting')"
+              >去设置</van-button
+            >
           </template>
           <!-- 不是VIP -->
           <template v-else>
             <p>设置订阅关键词,随时接收最新招标信息。</p>
-            <van-button size="mini" type="confirm" @click="onClickTip('goSubKey')">去订阅</van-button>
+            <van-button
+              size="mini"
+              type="confirm"
+              @click="onClickTip('goSubKey')"
+              >去订阅</van-button
+            >
           </template>
         </template>
         <!-- 空状态 -->
         <template v-else-if="false">
-            <AppEmpty v-if="!getStatus.hasList"></AppEmpty>
-            <p>为了使您接收更多信息,可对关键词进行新增或修改。</p>
-            <van-button size="mini" type="confirm" @click="onClickTip(isFree ? 'goSubSetting' : 'goSubKey')">去设置</van-button>
+          <AppEmpty v-if="!getStatus.hasList"></AppEmpty>
+          <p>为了使您接收更多信息,可对关键词进行新增或修改。</p>
+          <van-button
+            size="mini"
+            type="confirm"
+            @click="onClickTip(isFree ? 'goSubSetting' : 'goSubKey')"
+            >去设置</van-button
+          >
         </template>
       </div>
     </div>
@@ -96,8 +145,17 @@
 import { Button, Loading, Popup } from 'vant'
 import bidStatusNode from '@/components/bid-update/BidUpdate'
 import { AppEmpty, AppIcon, ProjectCell } from '@/ui'
-import { ajaxGetIndexList, ajaxCanBiaoStatus, ajaxCanBiaoAction } from '@/api/modules'
-import { callChangeTab, formatMoney, openAppOrWxPage, openLinkOfOther } from '@/utils'
+import {
+  ajaxGetIndexList,
+  ajaxCanBiaoStatus,
+  ajaxCanBiaoAction
+} from '@/api/modules'
+import {
+  callChangeTab,
+  formatMoney,
+  openAppOrWxPage,
+  openLinkOfOther
+} from '@/utils'
 import { LINKS } from '@/data'
 import qs from 'qs'
 import { mapState, mapGetters } from 'vuex'
@@ -113,7 +171,7 @@ export default {
     [Loading.name]: Loading,
     bidStatusNode
   },
-  data () {
+  data() {
     return {
       info: {
         vSwitch: '',
@@ -137,39 +195,34 @@ export default {
     }
   },
   computed: {
-    ...mapState('user', [
-      'mySelectEntInfo'
-    ]),
-    entId () {
+    ...mapState('user', ['mySelectEntInfo']),
+    entId() {
       return this.mySelectEntInfo?.ent_id
     },
-    getStatus () {
+    getStatus() {
       return {
         hasMore: this.info.listLength >= 50,
         hasList: this.info.listLength > 0,
         hasSubscribe: this.info.hasSubscribe
       }
     },
-    getTimeFmt () {
+    getTimeFmt() {
       return 'yyyy-MM-dd'
     },
-    showToSettingTip () {
+    showToSettingTip() {
       return this.showTip === 2
     },
-    ...mapGetters('user', [
-      'isLogin',
-      'isFree'
-    ])
+    ...mapGetters('user', ['isLogin', 'isFree'])
   },
   watch: {
     entId: {
       immediate: true,
-      handler (n) {
+      handler(n) {
         this.info.entId = n
       }
     }
   },
-  created () {
+  created() {
     // 解决微信端ios13弹窗被底部导航覆盖问题
     if (this.$envs.inWX && this.$envs.inIOS) {
       this.popupHeight = 'height: 490px;padding-bottom: 50px'
@@ -179,7 +232,7 @@ export default {
     this.doRecovery()
   },
   methods: {
-    onHeaderClick () {
+    onHeaderClick() {
       const host = location.host
       const dev = host.includes('jydev') || ipRegExp.test(host)
       if (dev) {
@@ -190,7 +243,7 @@ export default {
      * 根据缓存的 playback 数据回放对应函数, 该页面数据恢复在 doRecovery, 所以无需二次操作
      * @returns {Promise<void>}
      */
-    async doPlayBack () {
+    async doPlayBack() {
       if (this.playback.methods) {
         const canPlayBack = typeof this[this.playback.methods] === 'function'
         console.log('检查是否需要回放操作', canPlayBack)
@@ -209,14 +262,14 @@ export default {
      * @param methods - 回调函数名称
      * @param args - 回调函数需要的参数
      */
-    doSavePlayBack ({ methods = '', args = [] } = {}) {
+    doSavePlayBack({ methods = '', args = [] } = {}) {
       this.playback.methods = methods
       this.playback.args = Array.from(args)
     },
     /**
      * 保存页面数据
      */
-    doSave () {
+    doSave() {
       console.log('doSave home-list')
       this.$storage.set('home-list', this._data, {
         storage: sessionStorage,
@@ -226,7 +279,7 @@ export default {
     /**
      * 恢复页面数据
      */
-    async doRecovery () {
+    async doRecovery() {
       console.log('doRecovery home-list')
       const storage = this.$storage.get('home-list', false, {
         storage: sessionStorage,
@@ -238,7 +291,7 @@ export default {
         let actionCBInfo = sessionStorage.getItem('actionCBInfo')
         if (actionCBInfo) {
           actionCBInfo = JSON.parse(actionCBInfo)
-          storage.list.forEach(v => {
+          storage.list.forEach((v) => {
             if (v.id === actionCBInfo.id) {
               v.isCB = actionCBInfo
             }
@@ -250,7 +303,9 @@ export default {
           this._data.showBidStatus = false
         }
         // 是否需要回放操作
-        const salesBackData = JSON.parse(sessionStorage.getItem('salesBackData') || false)
+        const salesBackData = JSON.parse(
+          sessionStorage.getItem('salesBackData') || false
+        )
         if (salesBackData) {
           await this.doPlayBack()
         }
@@ -269,7 +324,7 @@ export default {
         this.loadList()
       }
     },
-    setHeight (data) {
+    setHeight(data) {
       if (data === 2) {
         if (this.$envs.inWX && this.$envs.inIOS) {
           this.popupHeight = 'height: 596px;padding-bottom: 50px'
@@ -285,15 +340,15 @@ export default {
       }
     },
     // 更新投标状态成功
-    saveSuccess () {
+    saveSuccess() {
       this.showBidStatus = false
     },
     // 取消更新投标状态
-    cancelUpdate () {
+    cancelUpdate() {
       this.showBidStatus = false
     },
     // 参标操作
-    async setCanBiaoStatus (item) {
+    async setCanBiaoStatus(item) {
       if (!this.isLogin) {
         return openLinkOfOther(LINKS.APP登录页.app, {
           query: {
@@ -306,7 +361,9 @@ export default {
         return
       }
       try {
-        const { error_code: code, data } = await ajaxCanBiaoAction('in', { bidIds: item.id })
+        const { error_code: code, data } = await ajaxCanBiaoAction('in', {
+          bidIds: item.id
+        })
         if (code === 0 && data) {
           // this.$toast('已参标,请前往我的参标项目列表查看。')
           this.projectCellInfo = item
@@ -316,17 +373,16 @@ export default {
           })
           this.showBidStatus = true
         }
-      } catch (e) {
-      }
+      } catch (e) {}
     },
-    async getCanBiaoStatus (arr) {
-      let idArr = arr.map(item => item.id)
+    async getCanBiaoStatus(arr) {
+      let idArr = arr.map((item) => item.id)
       if (idArr.length > 0) {
         idArr = idArr.join(',')
       }
       const { data, error_code: code } = await ajaxCanBiaoStatus({ ids: idArr })
       if (code === 0 && data) {
-        this.list.filter(item1 => {
+        this.list.filter((item1) => {
           data.forEach((v, index) => {
             if (v.id === item1.id) {
               Object.assign(item1.isCB, v)
@@ -337,7 +393,7 @@ export default {
         })
       }
     },
-    onKeep (item, index) {
+    onKeep(item, index) {
       if (!this.isLogin) {
         return openLinkOfOther(LINKS.APP登录页.app, {
           query: {
@@ -362,7 +418,7 @@ export default {
         }
       })
     },
-    onClick (item) {
+    onClick(item) {
       // if (!this.isLogin) {
       //   return openLinkOfOther(LINKS.APP登录页.app, {
       //     query: {
@@ -379,14 +435,14 @@ export default {
         app: LINKS.标讯详情页前缀.app + item.id + '.html?' + qs.stringify(query)
       })
     },
-    gotoKeySettingPage () {
+    gotoKeySettingPage() {
       if (this.isFree) {
         this.onClickTip('goSubKey')
       } else {
         this.onClickTip('goSubSetting')
       }
     },
-    onClickTip (type) {
+    onClickTip(type) {
       if (!this.isLogin) {
         return openLinkOfOther(LINKS.APP登录页.app, {
           query: {
@@ -416,69 +472,78 @@ export default {
     /**
      * 获取最新标讯
      */
-    loadList () {
+    loadList() {
       this.loading = true
       this.ajaxCount++
       ajaxGetIndexList({
         city: '',
-        isSearch: (this.isLogin || this.isHasFreeKey) ? 1 : 2,
+        isSearch: this.isLogin || this.isHasFreeKey ? 1 : 2,
         noToast: true
-      }).then(res => {
-        const { data = {} } = res
-        if (Object.keys(data).length === 0 && this.ajaxCount < 2) {
-          // 如果第一次请求没有返回值(超时),再请求一次 最多请求两次
-          this.loadList()
-        }
-        const {
-          hasSubKeys = false,
-          hasHistory = false,
-          count = 0,
-          history: historyKeys = [],
-          list = []
-        } = (data || {})
+      })
+        .then((res) => {
+          const { data = {} } = res
+          if (Object.keys(data).length === 0 && this.ajaxCount < 2) {
+            // 如果第一次请求没有返回值(超时),再请求一次 最多请求两次
+            this.loadList()
+          }
+          const {
+            hasSubKeys = false,
+            hasHistory = false,
+            count = 0,
+            history: historyKeys = [],
+            list = []
+          } = data || {}
 
-        this.showTip = data.showTip
-        this.info.vSwitch = data.subFlag
-        this.info.hasSubscribe = hasSubKeys
-        this.info.hasHistory = hasHistory
-        this.info.listLength = count
+          this.showTip = data.showTip
+          this.info.vSwitch = data.subFlag
+          this.info.hasSubscribe = hasSubKeys
+          this.info.hasHistory = hasHistory
+          this.info.listLength = count
 
-        this.list = list.map(v => {
-          const buyerClass = v.buyerclass && v.buyerclass !== '其它' ? v.buyerclass : undefined
-          return {
-            id: v.id,
-            title: v.title,
-            keys: [].concat(v?.matchkeys || historyKeys),
-            isCollected: v?.isCol || false,
-            hasFile: v?.fileExists || false,
-            isCB: {
-              id: '',
-              value: 0
-            },
-            leftTopBadgeText: v?.site === '剑鱼信息发布平台' ? '用户发布' : '',
-            tags: [
-              v?.area || '全国',
-              buyerClass,
-              v?.type || v?.subtype,
-              // 有中标金额取中标金额,没有取预算,预算没有置空
-              v?.bidamount ? formatMoney(v?.bidamount) : (v?.budget ? formatMoney(v?.budget) : '')
-            ].filter(v => v),
-            time: v?.publishTime ? v.publishTime * 1000 : '',
-            data: v
+          this.list = list.map((v) => {
+            const buyerClass =
+              v.buyerclass && v.buyerclass !== '其它' ? v.buyerclass : undefined
+            return {
+              id: v.id,
+              title: v.title,
+              keys: [].concat(v?.matchkeys || historyKeys),
+              isCollected: v?.isCol || false,
+              hasFile: v?.fileExists || false,
+              isCB: {
+                id: '',
+                value: 0
+              },
+              leftTopBadgeText:
+                v?.site === '剑鱼信息发布平台' ? '用户发布' : '',
+              tags: [
+                v?.area || '全国',
+                buyerClass,
+                v?.type || v?.subtype,
+                // 有中标金额取中标金额,没有取预算,预算没有置空
+                v?.bidamount
+                  ? formatMoney(v?.bidamount)
+                  : v?.budget
+                  ? formatMoney(v?.budget)
+                  : ''
+              ].filter((v) => v),
+              time: v?.publishTime ? v.publishTime * 1000 : '',
+              data: v
+            }
+          })
+          if (this.isLogin) {
+            this.getCanBiaoStatus(this.list)
+          }
+        })
+        .finally(() => {
+          this.loading = false
+          this.loaded = true
+        })
+        .catch(() => {
+          // 如果第一次请求失败,再请求一次 最多请求两次
+          if (this.ajaxCount < 2) {
+            this.loadList()
           }
         })
-        if (this.isLogin) {
-          this.getCanBiaoStatus(this.list)
-        }
-      }).finally(() => {
-        this.loading = false
-        this.loaded = true
-      }).catch(() => {
-        // 如果第一次请求失败,再请求一次 最多请求两次
-        if (this.ajaxCount < 2) {
-          this.loadList()
-        }
-      })
     }
   }
 }
@@ -487,22 +552,22 @@ export default {
 <style lang="scss" scoped>
 .home-list {
   .list {
-    background: #F5F6F7;
+    background: #f5f6f7;
+  }
+  .title {
+    font-size: 18px;
+    line-height: 26px;
+    color: #171826;
+    padding: 16px 16px 2px 16px;
   }
-   .title {
-     font-size: 18px;
-     line-height: 26px;
-     color: #171826;
-     padding: 16px 16px 2px 16px;
-   }
-  .right-event{
+  .right-event {
     margin-left: 24px;
-    .label-icon{
+    .label-icon {
       font-size: 14px;
-      color: #5F5E64;
+      color: #5f5e64;
     }
-    &.cb_blue{
-      color: #2ABED1;
+    &.cb_blue {
+      color: #2abed1;
       //.label-icon{
       //  color: #2ABED1;
       //}

+ 140 - 115
apps/mobile/src/components/invoice/PopupSelect.vue

@@ -5,19 +5,31 @@
     round
     close-icon="clear"
     position="bottom"
-    :style="{ height: getHeight}"
+    :style="{ height: getHeight }"
     class="popup-select"
     get-container="body"
   >
     <div class="pop-container j-container">
       <div class="j-header pop-title">{{ popTitle }}</div>
       <div class="j-main pop-content">
-        <van-cell v-for="(item, index) in selectList" :key="index" :title="item.title" @click="changeHandle(item)" :class="{checked: item.checked}">
+        <van-cell
+          v-for="(item, index) in selectList"
+          :key="index"
+          :title="item.title"
+          @click="changeHandle(item)"
+          :class="{ checked: item.checked }"
+        >
           <template #right-icon>
-            <i class="iconfont icon-duihao" v-if="item.checked && !isMultiple"></i>
+            <i
+              class="iconfont icon-duihao"
+              v-if="item.checked && !isMultiple"
+            ></i>
             <span v-if="isMultiple">
-               <i class="self-icon iconfont icon-choose1" v-if="item.checked"></i>
-               <i class="self-icon iconfont icon-unchoose1" v-else></i>
+              <i
+                class="self-icon iconfont icon-choose1"
+                v-if="item.checked"
+              ></i>
+              <i class="self-icon iconfont icon-unchoose1" v-else></i>
             </span>
           </template>
         </van-cell>
@@ -25,16 +37,29 @@
       <div class="j-footer footer" v-if="okBtn">
         <div class="multiple-btn" v-if="resetBtn">
           <div class="default-btn clickable" @click="resetHandle">重置</div>
-          <div class="confirm-btn clickable" :class="{'disabled-btn': disabledBtn}" @click="confirmHandle">确定</div>
+          <div
+            class="confirm-btn clickable"
+            :class="{ 'disabled-btn': disabledBtn }"
+            @click="confirmHandle"
+          >
+            确定
+          </div>
+        </div>
+        <div
+          class="confirm-btn clickable"
+          v-if="okBtn"
+          :class="{ 'disabled-btn': disabledBtn }"
+          @click="confirmHandle"
+        >
+          确定
         </div>
-        <div class="confirm-btn clickable" v-if="okBtn" :class="{'disabled-btn': disabledBtn}" @click="confirmHandle">确定</div>
       </div>
     </div>
   </van-popup>
 </template>
 
 <script>
-import { Popup,  Cell } from 'vant'
+import { Popup, Cell } from 'vant'
 export default {
   components: {
     [Popup.name]: Popup,
@@ -67,45 +92,45 @@ export default {
     okBtn: {
       type: Boolean,
       default: true
-
     }
   },
-  data () {
+  data() {
     return {
       visiblePopup: false
     }
   },
-  computed:{
-    getHeight () {
+  computed: {
+    getHeight() {
       let height = 480
-      if(this.selectList.length > 0) {
-        height = this.selectList.length < 7 ? 44 * this.selectList.length + 130 : 480
+      if (this.selectList.length > 0) {
+        height =
+          this.selectList.length < 7 ? 44 * this.selectList.length + 130 : 480
       } else {
         height = 200
       }
-      return height.toString()+'px'
+      return height.toString() + 'px'
     },
-    disabledBtn () {
-      return !this.selectList.some(item => item.checked)
+    disabledBtn() {
+      return !this.selectList.some((item) => item.checked)
     }
   },
   methods: {
-    visibleHandle (val) {
+    visibleHandle(val) {
       this.visiblePopup = val
     },
-    changeHandle (item) {
+    changeHandle(item) {
       this.$emit('changeHandle', item, this.isMultiple)
-      if(!this.okBtn && !this.isMultiple){
+      if (!this.okBtn && !this.isMultiple) {
         this.visibleHandle(false)
       }
     },
-    confirmHandle () {
-      if(this.disabledBtn) return
+    confirmHandle() {
+      if (this.disabledBtn) return
       this.$emit('confirmHandle')
     },
     // 重置
-    resetHandle () {
-      if(this.disabledBtn) return
+    resetHandle() {
+      if (this.disabledBtn) return
       this.$emit('resetHandle')
     }
   }
@@ -113,105 +138,105 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .popup-select{
-    z-index: 3000 !important;
-    .pop-title{
-      height: 64px;
-      font-size: 20px;
-      line-height: 64px;
-      padding-left: 16px;
-      color: #171826;
-    }
-    .van-cell{
-      padding: 10px 16px;
-      font-size: 14px;
-      line-height: 24px;
-      &::after{
-        border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-        right: 0;
-      }
-      &.checked{
-        .van-cell__title {
-          color: #2ABED1;
-        }
-      }
-    }
-    .pop-content{
-      display: unset;
-      padding-bottom: 16px;
-    }
-    .van-cell:nth-last-child(1){
-      &::before{
-          position: absolute;
-          box-sizing: border-box;
-          content: ' ';
-          pointer-events: none;
-          right: 0;
-          bottom: 0;
-          left: 16px;
-          border-bottom: 1px solid rgba(0, 0, 0, 0.1);
-          -webkit-transform: scaleY(0.5);
-          transform: scaleY(0.5);
+.popup-select {
+  z-index: 3000 !important;
+  .pop-title {
+    height: 64px;
+    font-size: 20px;
+    line-height: 64px;
+    padding-left: 16px;
+    color: #171826;
+  }
+  .van-cell {
+    padding: 10px 16px;
+    font-size: 14px;
+    line-height: 24px;
+    &::after {
+      border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+      right: 0;
+    }
+    &.checked {
+      .van-cell__title {
+        color: #2abed1;
       }
     }
-    ::v-deep {
-      .j-footer{
-        position: relative;
-        background: #fff !important;
-        height: 66px;
-        width: 100%;
-        padding: 8px 16px 12px 16px;
-      }
+  }
+  .pop-content {
+    display: unset;
+    padding-bottom: 16px;
+  }
+  .van-cell:nth-last-child(1) {
+    &::before {
+      position: absolute;
+      box-sizing: border-box;
+      content: ' ';
+      pointer-events: none;
+      right: 0;
+      bottom: 0;
+      left: 16px;
+      border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+      -webkit-transform: scaleY(0.5);
+      transform: scaleY(0.5);
     }
-    .j-container{
-      min-height:100px;
+  }
+  ::v-deep {
+    .j-footer {
+      position: relative;
+      background: #fff !important;
+      height: 66px;
+      width: 100%;
+      padding: 8px 16px 12px 16px;
     }
-    .confirm-btn{
+  }
+  .j-container {
+    min-height: 100px;
+  }
+  .confirm-btn {
+    height: 46px;
+    border-radius: 8px;
+    background: #2abed1;
+    text-align: center;
+    font-size: 18px;
+    line-height: 46px;
+    color: #fff;
+  }
+  .multiple-btn {
+    display: grid;
+    grid-template-columns: 50% 50%;
+    grid-column-gap: 13px;
+    .default-btn {
       height: 46px;
-      border-radius: 8px;
-      background: #2ABED1;
-      text-align: center;
-      font-size: 18px;
       line-height: 46px;
-      color: #fff;
-    }
-    .multiple-btn{
-      display: grid;
-      grid-template-columns: 50% 50%;
-      grid-column-gap: 13px;
-      .default-btn{
-        height: 46px;
-        line-height: 46px;
-        border-radius: 4px;
-        background: #EDEFF2;
-        color: #5F5E64;
-        text-align: center;
-        font-size: 16px;
-      }
-      .confirm-btn{
-        border-radius: 4px;
-      }
-    }
-    .disabled-btn{
-      opacity: .5;
-    }
-    .icon-duihao {
-      display: flex;
-      width: 24px;
-      height: 24px;
-      color: #2ABED1;
-      font-size: 24px;
-    }
-    .icon-choose1{
-      color: #2ABED1;
+      border-radius: 4px;
+      background: #edeff2;
+      color: #5f5e64;
+      text-align: center;
+      font-size: 16px;
     }
-    .self-icon{
-      font-size:24px;
+    .confirm-btn {
+      border-radius: 4px;
     }
-    ::v-deep {
-      .van-popup__close-icon{
-        font-size:20px;
-      }
+  }
+  .disabled-btn {
+    opacity: 0.5;
+  }
+  .icon-duihao {
+    display: flex;
+    width: 24px;
+    height: 24px;
+    color: #2abed1;
+    font-size: 24px;
+  }
+  .icon-choose1 {
+    color: #2abed1;
+  }
+  .self-icon {
+    font-size: 24px;
+  }
+  ::v-deep {
+    .van-popup__close-icon {
+      font-size: 20px;
     }
   }
+}
 </style>

+ 5 - 5
apps/mobile/src/components/invoice/popupTip.vue

@@ -6,13 +6,13 @@
     confirm-button-color="#2abed1"
     class="question-tip"
     :style="{ top: '50%' }"
-    @confirm="onConfirm">
+    @confirm="onConfirm"
+  >
     <slot></slot>
     <div class="content-list">
       <div class="content-item">
         <div class="content-label" v-html="title"></div>
-        <div class="content-text" v-html="text">
-        </div>
+        <div class="content-text" v-html="text"></div>
       </div>
     </div>
   </van-dialog>
@@ -39,7 +39,7 @@ export default {
     event: 'change'
   },
   methods: {
-    onConfirm () {
+    onConfirm() {
       this.$emit('change', false)
     }
   }
@@ -64,7 +64,7 @@ export default {
   .content-text {
     font-size: 16px;
     line-height: 26px;
-    color: rgba(0,0,0,.9);
+    color: rgba(0, 0, 0, 0.9);
   }
 }
 </style>

+ 23 - 21
apps/mobile/src/components/invoice/radioGroup.vue

@@ -1,8 +1,13 @@
 <template>
   <div class="radioGroup">
-    <div class="item" v-for="(item,index) in list" :key="index" @click="choose(item)">
-      <div :class="{checkbox_:true,active:item.value===value}"></div>
-      <p class="text">{{item.text}}</p>
+    <div
+      class="item"
+      v-for="(item, index) in list"
+      :key="index"
+      @click="choose(item)"
+    >
+      <div :class="{ checkbox_: true, active: item.value === value }"></div>
+      <p class="text">{{ item.text }}</p>
     </div>
   </div>
 </template>
@@ -11,8 +16,8 @@ export default {
   name: 'radioGroup',
   props: {
     value: {},
-    list:{
-     type: Array,
+    list: {
+      type: Array,
       default: () => []
     }
   },
@@ -21,7 +26,7 @@ export default {
     event: 'change'
   },
   methods: {
-    choose (item) {
+    choose(item) {
       this.$emit('change', item.value)
     }
   }
@@ -29,39 +34,36 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.radioGroup{
+.radioGroup {
   overflow: hidden;
   display: flex;
   flex-wrap: wrap;
   flex: 1;
-  .item{
+  .item {
     align-items: center;
     display: flex;
     margin-right: 24px;
     margin-bottom: 12px;
     // float: left;
-    .checkbox_{
+    .checkbox_ {
       width: 24px;
       height: 24px;
       background-image: url(@/assets/image/invoice/unchoose.png);
       background-size: 100% 100%;
       margin-right: 3px;
     }
-    .active{
-      background-image:url(@/assets/image/invoice/choose.png);
-
+    .active {
+      background-image: url(@/assets/image/invoice/choose.png);
     }
-    .text{
+    .text {
       font-family: PingFang SC;
-font-size: 12px;
-font-weight: 400;
-line-height: 18px;
-letter-spacing: 0em;
-text-align: left;
-color: #5F5E64;
-
+      font-size: 12px;
+      font-weight: 400;
+      line-height: 18px;
+      letter-spacing: 0em;
+      text-align: left;
+      color: #5f5e64;
     }
   }
 }
-
 </style>

+ 18 - 14
apps/mobile/src/components/limited-countdown/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="countdown">
-    <span v-if="showStartText">{{startText}}</span>
-    <span>{{content}}</span>
+    <span v-if="showStartText">{{ startText }}</span>
+    <span>{{ content }}</span>
   </div>
 </template>
 
@@ -46,7 +46,7 @@ export default {
       default: true
     }
   },
-  data () {
+  data() {
     return {
       serverInitTime: null,
       localInitTime: null,
@@ -55,15 +55,15 @@ export default {
     }
   },
   watch: {
-    endTime (val) {
+    endTime(val) {
       this.countdown(val)
     }
   },
-  created () {
+  created() {
     this._timeFn = null
     this.countdown(this.endTime)
   },
-  mounted () {
+  mounted() {
     document.addEventListener('visibilitychange', () => {
       if (document.visibilityState === 'visible') {
         // console.log('切出当前页')
@@ -71,17 +71,18 @@ export default {
       }
     })
   },
-  beforeDestroy () {
+  beforeDestroy() {
     clearInterval(this._timeFn)
   },
   methods: {
-    async initAdjustTime () {
+    async initAdjustTime() {
       this.serverInitTime = Date.now()
       // 接口响应时服务端的本地时间
       try {
         const { data } = await getServerInitTime()
         if (data) {
-          this.serverInitTime = data?.time.toString().length === 10 ? data?.time * 1000 : data?.time
+          this.serverInitTime =
+            data?.time.toString().length === 10 ? data?.time * 1000 : data?.time
         } else {
           this.serverInitTime = Date.now()
         }
@@ -94,19 +95,22 @@ export default {
        */
       this.localInitTime = performance.now()
     },
-    getCurrentTime () {
+    getCurrentTime() {
       if (!this.serverInitTime) {
         console.error('日期校验暂未初始化')
         // return
       }
       const localCurrentTime = performance.now()
-      const curTime = Math.floor(this.serverInitTime + (localCurrentTime - this.localInitTime))
+      const curTime = Math.floor(
+        this.serverInitTime + (localCurrentTime - this.localInitTime)
+      )
       this.$emit('curTime', curTime)
       return curTime
     },
-    updateInfo (timestamp) {
+    updateInfo(timestamp) {
       const nowTime = this.getCurrentTime()
-      const stopTime = timestamp.toString().length === 10 ? timestamp * 1000 : timestamp
+      const stopTime =
+        timestamp.toString().length === 10 ? timestamp * 1000 : timestamp
       const t = stopTime - nowTime
       if (t > 0) {
         this.showStartText = true
@@ -138,7 +142,7 @@ export default {
         this.content = this.endText
       }
     },
-    async countdown (timestamp) {
+    async countdown(timestamp) {
       this.initAdjustTime()
       clearInterval(this._timeFn)
       this.updateInfo(timestamp)

+ 70 - 54
apps/mobile/src/components/message/message-card.vue

@@ -1,22 +1,34 @@
 <template>
   <div class="message-bg" v-if="list.length">
-    <div class="message-main" :style="{height: setHeight + 'vw'}">
+    <div class="message-main" :style="{ height: setHeight + 'vw' }">
       <div class="message-unread" v-if="msgData.unread > 0">
         {{ setUnRead }}条未读
       </div>
-      <div class="message-card" :class="{'have-one': list.length === 1}" ref="msgCard">
-        <div class="message-group" :style="{ transform: `translateY(-${offsetHeight}px)`, height: groupHeight + 'px' }">
-          <div class="message-item"
-          style="height: 26px;"
-              v-for="(item, index) in list"
-              :key="index" :class="{ 'visited': item.visited }"
-              ref="listItem"
-              @click="goMessage(item)"
+      <div
+        class="message-card"
+        :class="{ 'have-one': list.length === 1 }"
+        ref="msgCard"
+      >
+        <div
+          class="message-group"
+          :style="{
+            transform: `translateY(-${offsetHeight}px)`,
+            height: groupHeight + 'px'
+          }"
+        >
+          <div
+            class="message-item"
+            style="height: 26px"
+            v-for="(item, index) in list"
+            :key="index"
+            :class="{ visited: item.visited }"
+            ref="listItem"
+            @click="goMessage(item)"
           >
             <span class="dot"></span>
-            <span class="type">{{item.type}}</span>
-            <div class="van-ellipsis title">{{item.title}}</div>
-            <span class="time">{{item.time}}</span>
+            <span class="type">{{ item.type }}</span>
+            <div class="van-ellipsis title">{{ item.title }}</div>
+            <span class="time">{{ item.time }}</span>
           </div>
         </div>
         <div class="icon-box" @click="goMore">
@@ -28,7 +40,11 @@
 </template>
 
 <script>
-import { ajaxMessageList, ajaxMarkRead, ajaxMessageOpenLog } from '@/api/modules/message'
+import {
+  ajaxMessageList,
+  ajaxMarkRead,
+  ajaxMessageOpenLog
+} from '@/api/modules/message'
 import { AppIcon } from '@/ui'
 import { dateMatter } from '@/utils/date'
 import { appCallReloadTab } from '@/utils/callFn/appFn'
@@ -42,7 +58,7 @@ export default {
   components: {
     [AppIcon.name]: AppIcon
   },
-  data () {
+  data() {
     return {
       list: [],
       msgData: {
@@ -61,13 +77,11 @@ export default {
     }
   },
   computed: {
-    ...mapGetters('user', [
-      'isLogin'
-    ]),
-    setUnRead () {
+    ...mapGetters('user', ['isLogin']),
+    setUnRead() {
       return this.msgData.unread > 99 ? '99+' : this.msgData.unread
     },
-    setHeight () {
+    setHeight() {
       const height = !this.msgData.unread
       if (height) {
         return 76 / 3.75
@@ -76,29 +90,29 @@ export default {
       }
     }
   },
-  created () {
+  created() {
     if (this.isLogin) {
       this.loadList()
     }
   },
-  mounted () {
+  mounted() {
     setTimeout(() => {
       this.$nextTick(() => {
         this.startScrolling()
       })
     }, 1000)
   },
-  destroyed () {
+  destroyed() {
     this.stopScrolling()
   },
   methods: {
-    decimalValue (numberValue) {
+    decimalValue(numberValue) {
       // 将数值转换为字符串并截取前两位小数
       const decimalValue = numberValue.toString().match(/^\d+(?:\.\d{0,1})?/)
       // 返回处理后的数值字符串
       return decimalValue ? decimalValue[0] : ''
     },
-    startScrolling () {
+    startScrolling() {
       let listItem
       if (this.$refs.listItem) {
         listItem = this.$refs.listItem[1] // 列表项高度
@@ -108,10 +122,10 @@ export default {
         }
       }
       const listItemHeight = (listItem?.offsetHeight || 26) * 2
-      this.groupHeight = this.list.length / 2 * listItemHeight
+      this.groupHeight = (this.list.length / 2) * listItemHeight
       this.scrollInterval = setInterval(() => {
         this.offsetHeight += listItemHeight // 每次滚动的距离,根据需求调整
-        if (-(this.offsetHeight) <= -(this.list.length / 2 * listItemHeight)) {
+        if (-this.offsetHeight <= -((this.list.length / 2) * listItemHeight)) {
           this.offsetHeight = 0
         }
       }, this.msgData.rollingTiming * 1000) // 滚动间隔,单位为秒
@@ -119,11 +133,11 @@ export default {
         this.stopScrolling()
       }
     },
-    stopScrolling () {
+    stopScrolling() {
       clearInterval(this.scrollInterval)
     },
-    loadList () {
-      ajaxMessageList(this.msgListParams).then(res => {
+    loadList() {
+      ajaxMessageList(this.msgListParams).then((res) => {
         this.msgData = res
         let { data = [], column } = res
         if (!Array.isArray(data)) {
@@ -132,19 +146,21 @@ export default {
         if (!column) {
           column = []
         }
-        this.list = [].concat(data.map(v => {
-          const MSG_TYPE = column.filter(m => m.msg_type === v.msg_type)
-          return {
-            title: v.title,
-            visited: v.isRead === 1,
-            time: dateMatter(v.createtime, 'nor'),
-            type: MSG_TYPE && MSG_TYPE.length !== 0 ? MSG_TYPE[0].name : '',
-            data: v
-          }
-        }))
+        this.list = [].concat(
+          data.map((v) => {
+            const MSG_TYPE = column.filter((m) => m.msg_type === v.msg_type)
+            return {
+              title: v.title,
+              visited: v.isRead === 1,
+              time: dateMatter(v.createtime, 'nor'),
+              type: MSG_TYPE && MSG_TYPE.length !== 0 ? MSG_TYPE[0].name : '',
+              data: v
+            }
+          })
+        )
       })
     },
-    goVisited (item) {
+    goVisited(item) {
       this.$router.push({
         path: '/message/msgDetail',
         query: {
@@ -153,20 +169,20 @@ export default {
         }
       })
     },
-    goMore () {
+    goMore() {
       callChangeTab('message', this.$router)
     },
     // 消息点击
-    async onClickMsg (logId) {
+    async onClickMsg(logId) {
       await ajaxMessageOpenLog({
         msgLogId: logId,
         platform: this.getPlatformType()
       })
     },
-    getPlatformType () {
+    getPlatformType() {
       return this.$envs.inWX ? 3 : 2
     },
-    goMessage (item) {
+    goMessage(item) {
       this.onClickMsg(item.data.msgLogId)
       if (item.visited) {
         return this.goVisited(item)
@@ -174,7 +190,7 @@ export default {
         this.changeMessageStatus(item)
       }
     },
-    changeMessageStatus (item) {
+    changeMessageStatus(item) {
       ajaxMarkRead({
         msgId: Number(item.data.id)
       }).then(() => {
@@ -185,7 +201,7 @@ export default {
       })
     },
     // 链接跳转
-    async msgLinkAction (item) {
+    async msgLinkAction(item) {
       const url = item.data.url
       const { inWX, inIOS } = this.$envs
       if (inWX) {
@@ -208,7 +224,7 @@ export default {
       }
     },
     // 微信端跳转
-    wxLocationTo (url) {
+    wxLocationTo(url) {
       // 链接中如果是www.jianyu360.cn域名,微信中会唤起app,该用window.open
       // window.open(url)
       // window.open在安卓正常,但是ios无法跳转。改为location.href跳转
@@ -221,7 +237,7 @@ export default {
 
 <style lang="scss" scoped>
 .message-bg {
-  background-color: #F5F6F7;
+  background-color: #f5f6f7;
   padding: 8px 0;
 }
 .message-main {
@@ -237,7 +253,7 @@ export default {
     width: fit-content;
     height: 15px;
     line-height: 15px;
-    background: #FB483D;
+    background: #fb483d;
     color: #ffffff;
     border-radius: 0px 40px 40px 0px;
     font-size: 11px;
@@ -253,7 +269,7 @@ export default {
   padding: 0 16px;
   height: 52px;
   overflow: hidden;
-  &.have-one{
+  &.have-one {
     align-items: center;
   }
   .message-group {
@@ -267,7 +283,7 @@ export default {
     line-height: 24px;
     &.visited {
       .dot {
-        background-color: #C0C4CC;
+        background-color: #c0c4cc;
       }
     }
     .dot {
@@ -275,7 +291,7 @@ export default {
       width: 4px;
       height: 4px;
       border-radius: 50%;
-      background: #2ABED1;
+      background: #2abed1;
       margin-right: 4px;
     }
     .type {
@@ -296,7 +312,7 @@ export default {
       flex-shrink: 0;
       font-size: 11px;
       line-height: 24px;
-      color: #9B9CA3;
+      color: #9b9ca3;
     }
   }
   .icon-box {
@@ -306,7 +322,7 @@ export default {
   }
   .icon-youbian {
     font-size: 16px;
-    color: #C0C4CC;
+    color: #c0c4cc;
   }
 }
 </style>

+ 139 - 85
apps/mobile/src/components/mine/MineHeader.vue

@@ -8,59 +8,101 @@
         </span>
       </div>
     </van-sticky>
-    <div class="header-info" :class="{'pt' : $envs.inWX}">
+    <div class="header-info" :class="{ pt: $envs.inWX }">
       <div class="user-img">
-        <img :src="pageUserInfo.headimageurl || pageUserInfo.avatar" @error="errorImgFun">
+        <img
+          :src="pageUserInfo.headimageurl || pageUserInfo.avatar"
+          @error="errorImgFun"
+        />
       </div>
       <div class="user-info-container">
         <div class="user-info-top">
-          <span class="ellipsis user-name" v-if="pageUserInfo.nickname || pageUserInfo.phone || pageUserInfo.jyname">{{ getName }}</span>
-          <span class="j-icon base-icon icon-super-sub" v-if="pageUserInfo.subscribeVip && pageUserInfo.subscribeVip > 0"></span>
-          <span class="j-icon base-icon big-vip-icon" v-if="pageUserInfo.bigmemberVip && pageUserInfo.bigmemberVip > 0"  :style="'background-image:url(' + setBigVipPic + ')'"></span>
+          <span
+            class="ellipsis user-name"
+            v-if="
+              pageUserInfo.nickname || pageUserInfo.phone || pageUserInfo.jyname
+            "
+            >{{ getName }}</span
+          >
+          <span
+            class="j-icon base-icon icon-super-sub"
+            v-if="pageUserInfo.subscribeVip && pageUserInfo.subscribeVip > 0"
+          ></span>
+          <span
+            class="j-icon base-icon big-vip-icon"
+            v-if="pageUserInfo.bigmemberVip && pageUserInfo.bigmemberVip > 0"
+            :style="'background-image:url(' + setBigVipPic + ')'"
+          ></span>
         </div>
         <div class="user-info-bottom">
-          <span class="ellipsis user-phone" v-if="pageUserInfo.nickname && pageUserInfo.phone">{{pageUserInfo.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1 **** $2')}}</span>
-          <span class="set-phone" @click="bindPhone({})" v-if="!pageUserInfo.phone">绑定手机号</span>
+          <span
+            class="ellipsis user-phone"
+            v-if="pageUserInfo.nickname && pageUserInfo.phone"
+            >{{
+              pageUserInfo.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1 **** $2')
+            }}</span
+          >
+          <span
+            class="set-phone"
+            @click="bindPhone({})"
+            v-if="!pageUserInfo.phone"
+            >绑定手机号</span
+          >
         </div>
       </div>
-      <div class="wx-header-set clickable" @click="jumpSetting" v-if="$envs.inWX">
+      <div
+        class="wx-header-set clickable"
+        @click="jumpSetting"
+        v-if="$envs.inWX"
+      >
         <AppIcon name="Setting" size="25" />
       </div>
     </div>
     <div
       class="change-identity plr12"
-      :class="(userCurrentIdentity && userCurrentIdentity.positionType !== 1) ? 'id-bg-one' : 'id-bg-two'">
-      <span class="identity-name ellipsis">{{ userCurrentIdentity ?  userCurrentIdentity.name : ''}}</span>
+      :class="
+        userCurrentIdentity && userCurrentIdentity.positionType !== 1
+          ? 'id-bg-one'
+          : 'id-bg-two'
+      "
+    >
+      <span class="identity-name ellipsis">{{
+        userCurrentIdentity ? userCurrentIdentity.name : ''
+      }}</span>
       <div class="change-right" @click="changeIdentityHandle">
-        <span  v-if="userIdentityList.length > 1">
+        <span v-if="userIdentityList.length > 1">
           <AppIcon name="qiehuan" size="14" color="#33373B" />
           <span class="text">切换身份</span>
         </span>
         <span class="identity-keep-inset" v-else @click.stop="jumpIdentityKeep">
           <span>身份信息维护</span>
-          <AppIcon name="youbian" size="16" color="#2ABED1"/>
+          <AppIcon name="youbian" size="16" color="#2ABED1" />
         </span>
       </div>
-      <div v-if="userIdentityList.length > 1" class="identity-keep" @click.stop="jumpIdentityKeep">
+      <div
+        v-if="userIdentityList.length > 1"
+        class="identity-keep"
+        @click.stop="jumpIdentityKeep"
+      >
         <span>身份信息维护</span>
-        <AppIcon name="youbian" size="10" color="#fff"/>
+        <AppIcon name="youbian" size="10" color="#fff" />
       </div>
     </div>
     <div class="order-tabs">
       <div class="order-tab-item clickable" @click="jumpOrderPage(1)">
-        <AppIcon name="dingdan_daifukuan" size="36" color="33373B"/>
+        <AppIcon name="dingdan_daifukuan" size="36" color="33373B" />
         <div class="tab-item-text">待付款</div>
       </div>
       <div class="order-tab-item clickable" @click="jumpOrderPage(2)">
-        <AppIcon name="dingdan_yiwancheng" size="36" color="33373B"/>
+        <AppIcon name="dingdan_yiwancheng" size="36" color="33373B" />
         <div class="tab-item-text">已完成</div>
       </div>
       <div class="order-tab-item clickable" @click="jumpOrderPage(3)">
-        <AppIcon name="dingdan_yiquxiao" size="36" color="33373B"/>
+        <AppIcon name="dingdan_yiquxiao" size="36" color="33373B" />
         <div class="tab-item-text">已取消</div>
       </div>
       <div class="order-tab-item clickable" @click="jumpOrderPage(0)">
-        <AppIcon name="dingdan_quanbudingdan" size="36" color="33373B"/>
+        <AppIcon name="dingdan_quanbudingdan" size="36" color="33373B" />
         <div class="tab-item-text">全部订单</div>
       </div>
     </div>
@@ -79,7 +121,7 @@ export default {
     [Sticky.name]: Sticky,
     [AppIcon.name]: AppIcon
   },
-  data () {
+  data() {
     return {
       pageUserInfo: {
         avatar: new URL('@/assets/image/public/auto.png', import.meta.url).href, // 头像默认地址
@@ -90,7 +132,7 @@ export default {
     }
   },
   computed: {
-    getName () {
+    getName() {
       let name
       const { nickname, phone, jyname } = this.pageUserInfo
       if (nickname) {
@@ -102,38 +144,48 @@ export default {
       }
       return name
     },
-    setBigVipPic () {
-      let url = new URL('@/assets/image/icon/big-member/icon-shiyonghy.png', import.meta.url).href
+    setBigVipPic() {
+      let url = new URL(
+        '@/assets/image/icon/big-member/icon-shiyonghy.png',
+        import.meta.url
+      ).href
       const { bigmemberVip } = this.pageUserInfo
       if (bigmemberVip === 1 || bigmemberVip === 5 || bigmemberVip === 7) {
-        url = new URL('@/assets/image/icon/big-member/icon-gaojihy.png', import.meta.url).href
+        url = new URL(
+          '@/assets/image/icon/big-member/icon-gaojihy.png',
+          import.meta.url
+        ).href
       } else if (bigmemberVip === 2) {
-        url = new URL('@/assets/image/icon/big-member/icon-biaozhunhy.png', import.meta.url).href
+        url = new URL(
+          '@/assets/image/icon/big-member/icon-biaozhunhy.png',
+          import.meta.url
+        ).href
       } else if (bigmemberVip === 3 || bigmemberVip === 6) {
-        url = new URL('@/assets/image/icon/big-member/icon-putonghy.png', import.meta.url).href
+        url = new URL(
+          '@/assets/image/icon/big-member/icon-putonghy.png',
+          import.meta.url
+        ).href
       } else if (bigmemberVip === 4) {
-        url = new URL('@/assets/image/icon/big-member/icon-shiyonghy.png', import.meta.url).href
+        url = new URL(
+          '@/assets/image/icon/big-member/icon-shiyonghy.png',
+          import.meta.url
+        ).href
       }
       return url
     },
-    ...mapGetters('user', [
-      'userCurrentIdentity',
-      'userIdentityList'
-    ])
+    ...mapGetters('user', ['userCurrentIdentity', 'userIdentityList'])
   },
-  created () {
+  created() {
     this.init()
   },
   methods: {
-    ...mapActions('user', [
-      'getUserIdentityList'
-    ]),
-    async init () {
+    ...mapActions('user', ['getUserIdentityList']),
+    async init() {
       await this.getUserInfo()
       // await this.getUserIdentityList()
     },
     // 获取用户信息
-    async getUserInfo () {
+    async getUserInfo() {
       try {
         const { error_code: code, data = {} } = await getAccountInfo()
         if (code === 0) {
@@ -145,7 +197,7 @@ export default {
         return {}
       }
     },
-    checkUserHasBindPhone () {
+    checkUserHasBindPhone() {
       const { phone } = this.pageUserInfo
       if (!phone) {
         const query = {
@@ -155,30 +207,33 @@ export default {
       }
     },
     // 加载默认头像
-    errorImgFun (e) {
-      e.target.src = new URL('@/assets/image/public/auto.png', import.meta.url).href
+    errorImgFun(e) {
+      e.target.src = new URL(
+        '@/assets/image/public/auto.png',
+        import.meta.url
+      ).href
     },
     // 跳转到设置页
-    jumpSetting () {
+    jumpSetting() {
       openAppOrWxPage(LINKS.设置页面)
     },
     // 绑定手机号
-    bindPhone (query = {}) {
+    bindPhone(query = {}) {
       openAppOrWxPage(LINKS.绑定手机号, { query })
     },
     // 跳转到订单页
-    jumpOrderPage (type) {
+    jumpOrderPage(type) {
       openAppOrWxPage(LINKS.我的订单页面, {
         query: { active: type }
       })
     },
-    changeIdentityHandle () {
+    changeIdentityHandle() {
       this.$router.push('/mine/change/identity')
     },
     // 身份信息维护
-    jumpIdentityKeep () {
+    jumpIdentityKeep() {
       this.$router.push('/identity/keep')
-    },
+    }
   }
 }
 </script>
@@ -196,7 +251,7 @@ export default {
   &.app-header-padding-top {
     padding-top: ($app-header-padding-top - 8px);
   }
-  .set-icon{
+  .set-icon {
     display: flex;
     align-items: center;
     justify-content: center;
@@ -213,7 +268,7 @@ export default {
     min-width: 20px;
     background: #fff;
   }
-  .van-sticky--fixed{
+  .van-sticky--fixed {
     .app-header-set {
       padding: 16px;
     }
@@ -224,7 +279,7 @@ export default {
     justify-content: space-between;
     align-items: center;
     background: #fff;
-    padding-bottom:12px;
+    padding-bottom: 12px;
     .user-info-container {
       display: flex;
       flex-direction: column;
@@ -241,12 +296,12 @@ export default {
       display: inline-block;
       font-size: 21px;
       line-height: 29px;
-      color: #33373C;
+      color: #33373c;
       text-overflow: ellipsis;
       overflow: hidden;
       white-space: nowrap;
       word-break: break-all;
-      margin-right:8px;
+      margin-right: 8px;
     }
     .user-phone {
       width: auto;
@@ -261,14 +316,14 @@ export default {
       display: inline-block;
       position: relative;
       border-radius: 13px;
-      line-height:24px;
-      color: #64696F;
-      padding:0 10px;
-      border: 1px solid rgba(0, 0, 0, .07);
+      line-height: 24px;
+      color: #64696f;
+      padding: 0 10px;
+      border: 1px solid rgba(0, 0, 0, 0.07);
       text-align: center;
-      font-size:13px;
+      font-size: 13px;
     }
-    .wx-header-set{
+    .wx-header-set {
       margin-left: 8px;
       padding: 10px;
       align-self: flex-start;
@@ -288,8 +343,8 @@ export default {
       height: 21px;
       line-height: 24px;
       text-align: center;
-      background: linear-gradient(270deg, #F1D090 0%, #FAE7CA 100%);
-      color: #1B1A2A;
+      background: linear-gradient(270deg, #f1d090 0%, #fae7ca 100%);
+      color: #1b1a2a;
       font-size: 11px;
       border-radius: 12px;
     }
@@ -303,20 +358,20 @@ export default {
       background-repeat: no-repeat;
       background-position: center;
       background-size: contain;
-      margin-right:8px;
+      margin-right: 8px;
     }
-    .icon-super-sub{
-      background-image:url(@/assets/image/icon/vip/icon-vip-gold-deep.png);
+    .icon-super-sub {
+      background-image: url(@/assets/image/icon/vip/icon-vip-gold-deep.png);
     }
   }
-  .pt{
-    padding-top:24px;
+  .pt {
+    padding-top: 24px;
   }
-  .plr12{
-    padding-left:12px;
-    padding-right:12px;
+  .plr12 {
+    padding-left: 12px;
+    padding-right: 12px;
   }
-  .change-identity{
+  .change-identity {
     position: relative;
     height: 44px;
     display: flex;
@@ -326,49 +381,49 @@ export default {
     background-position: center;
     background-size: 100%;
     border-radius: 6px;
-    .change-right{
+    .change-right {
       min-width: 80px;
       text-align: right;
-      .identity-keep-inset{
-        color:#5F5E64;
+      .identity-keep-inset {
+        color: #5f5e64;
         text-align: center;
         font-size: 14px;
       }
     }
-    .identity-name{
+    .identity-name {
       font-size: 15px;
       line-height: 22px;
       color: #171826;
     }
-    .text{
+    .text {
       font-size: 14px;
       line-height: 20px;
-      color: #5F5E64;
+      color: #5f5e64;
     }
 
     &.id-bg-one {
-      background-image: url("@/assets/image/mine/idBg@2x.png");
-      box-shadow: 0 0 0 0.5px #86E1ED !important;
+      background-image: url('@/assets/image/mine/idBg@2x.png');
+      box-shadow: 0 0 0 0.5px #86e1ed !important;
     }
     &.id-bg-two {
-      background-image: url("@/assets/image/mine/IdBg@2x-2.png");
-      box-shadow: 0 0 0 0.5px #F1D090 !important;
+      background-image: url('@/assets/image/mine/IdBg@2x-2.png');
+      box-shadow: 0 0 0 0.5px #f1d090 !important;
     }
-    .identity-keep{
+    .identity-keep {
       position: absolute;
       border-radius: 4px 4px 0 0;
-      background: #2ABED1;
+      background: #2abed1;
       padding: 5px 8px;
-      color: #FFF;
+      color: #fff;
       font-size: 10px;
       line-height: 14px;
       right: 0;
       top: -25px;
     }
   }
-  .order-tabs{
-    margin-top:12px;
-    margin-bottom:4px;
+  .order-tabs {
+    margin-top: 12px;
+    margin-bottom: 4px;
     display: flex;
     justify-content: space-around;
     .order-tab-item {
@@ -383,9 +438,8 @@ export default {
       margin-top: 8px;
       font-size: 13px;
       line-height: 18px;
-      color: #33373C;
+      color: #33373c;
     }
   }
-
 }
 </style>

+ 167 - 146
apps/mobile/src/components/mine/MineList.vue

@@ -1,36 +1,59 @@
 <template>
   <div class="mine-list-component">
     <!--    账号数据合并-->
-        <van-cell-group class="merge-cell cell-group mt16" :border="false" v-if="mergeInfo.show">
-          <van-cell
-            :title="mergeInfo.title"
-            @click="goLink(mergeInfo)">
-            <template #extra>
-              <span class="to-merge">去合并</span>
-            </template>
-          </van-cell>
-        </van-cell-group>
-        <van-cell-group
-          v-for="(mItem, mIndex) in menuList"
-          :key="'group—' + mIndex" class="cell-group mt16" :border="false">
-          <van-cell
-            v-for="item in mItem.child || []"
-            :key="item.id"
-            :title="item.name"
-            is-link
-            @click="goLink(item)"
-            :value="item.name ? item.name.split('--')[1] : null"
+    <van-cell-group
+      class="merge-cell cell-group mt16"
+      :border="false"
+      v-if="mergeInfo.show"
+    >
+      <van-cell :title="mergeInfo.title" @click="goLink(mergeInfo)">
+        <template #extra>
+          <span class="to-merge">去合并</span>
+        </template>
+      </van-cell>
+    </van-cell-group>
+    <van-cell-group
+      v-for="(mItem, mIndex) in menuList"
+      :key="'group—' + mIndex"
+      class="cell-group mt16"
+      :border="false"
+    >
+      <van-cell
+        v-for="item in mItem.child || []"
+        :key="item.id"
+        :title="item.name"
+        is-link
+        @click="goLink(item)"
+        :value="item.name ? item.name.split('--')[1] : null"
+      >
+        <template #title>
+          <span
+            class="icon-partner left-icon"
+            v-if="item.name && item.name.includes('伙伴计划')"
+          ></span>
+          <span
+            class="icon-customer left-icon"
+            v-else-if="item.name === '人工客服'"
+          ></span>
+          <AppIcon
+            v-else
+            :name="item.icon"
+            class="left-icon"
+            size="20"
+            color="#64696F"
+          />
+          <span class="custom-title">{{
+            item.name ? item.name.split('--')[0] : null
+          }}</span>
+          <span class="preferential-tag" v-if="item.name === '我的附件下载包'"
+            ><i>NEW</i></span
           >
-            <template #title>
-              <span class="icon-partner left-icon" v-if="item.name && item.name.includes('伙伴计划')"></span>
-              <span class="icon-customer left-icon" v-else-if="item.name === '人工客服'"></span>
-              <AppIcon v-else :name="item.icon" class="left-icon" size="20" color="#64696F"/>
-              <span class="custom-title">{{ item.name ? item.name.split('--')[0] : null }}</span>
-              <span class="preferential-tag" v-if="item.name === '我的附件下载包'"><i>NEW</i></span>
-              <span class="jypoints-tag" v-if="item.name === '我的剑鱼币'">做任务赚剑鱼币</span>
-            </template>
-          </van-cell>
-        </van-cell-group>
+          <span class="jypoints-tag" v-if="item.name === '我的剑鱼币'"
+            >做任务赚剑鱼币</span
+          >
+        </template>
+      </van-cell>
+    </van-cell-group>
   </div>
 </template>
 
@@ -50,29 +73,28 @@ export default {
     [AppIcon.name]: AppIcon
   },
   filters: {
-    showData (data) {
+    showData(data) {
       if (!data) return
-      return data.filter(item => item.show)
+      return data.filter((item) => item.show)
     }
   },
-  data () {
+  data() {
     return {
       // 账号数据合并
       mergeInfo: {
         title: '账号数据合并',
-        url: this.$envs.inAppOrH5 ? '/jyapp/frontPage/userMerge/free/index' : '/weixin/frontPage/userMerge/free/index',
+        url: this.$envs.inAppOrH5
+          ? '/jyapp/frontPage/userMerge/free/index'
+          : '/weixin/frontPage/userMerge/free/index',
         show: false
       },
       menuList: []
     }
   },
   computed: {
-    ...mapState('user', [
-      'power',
-      'userCurrentIdentity'
-    ])
+    ...mapState('user', ['power', 'userCurrentIdentity'])
   },
-  created () {
+  created() {
     this.init()
     // 商机管理购买成功:记录从哪个页面跳到去购买的
     sessionStorage.setItem('paySuccessNextStepLink', location.pathname)
@@ -82,12 +104,12 @@ export default {
     sessionStorage.removeItem('vip-cur-select-size')
   },
   methods: {
-    init () {
+    init() {
       this.getAccountMergeInfo()
       this.getFeatureList()
     },
     // 获取功能列表
-    async getFeatureList () {
+    async getFeatureList() {
       try {
         const params = {
           platform: this.$env.platform?.toUpperCase(),
@@ -103,7 +125,7 @@ export default {
       }
     },
     // 获取用户是否需要合并数据
-    async getAccountMergeInfo () {
+    async getAccountMergeInfo() {
       try {
         const { error_code: code, data = {} } = await getAccountMergeInfo()
         if (code === 0) {
@@ -115,7 +137,7 @@ export default {
       }
     },
     // 链接跳转
-    goLink (item) {
+    goLink(item) {
       if (!item.url) return
       if (item.name === '机构中心') {
         sessionStorage.setItem('pagesource', 'enterprise')
@@ -139,120 +161,119 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .mine-list-component{
-    .cell-group {
-      .left-icon{
-        margin-right:16px;
-      }
-      .icon-partner, .icon-customer{
-        display: inline-block;
-        width:20px;
-        height:20px;
-        background: url(@/assets/image/mine/icon-partner.png) no-repeat center;
-        background-size:contain;
-      }
-      .icon-customer{
-        background-image: url(@/assets/image/mine/icon-customer.png);
-      }
+.mine-list-component {
+  .cell-group {
+    .left-icon {
+      margin-right: 16px;
     }
-    .merge-cell{
-      background: #2ABED1;
-      .van-cell__title{
-        color: #fff;
-      }
-      .van-cell{
-        background:transparent;
-      }
-      .to-merge {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        width: 55px;
-        height: 24px;
-        font-size: 13px;
-        line-height: 24px;
-        color: rgba(44,183,202,1);
-        background: #fff;
-        border-radius: 24px;
-        border: 1px solid #fff;
-      }
-
+    .icon-partner,
+    .icon-customer {
+      display: inline-block;
+      width: 20px;
+      height: 20px;
+      background: url(@/assets/image/mine/icon-partner.png) no-repeat center;
+      background-size: contain;
     }
-    .van-cell__value{
-      color: #2ABED1;
-      font-size: 15px;
+    .icon-customer {
+      background-image: url(@/assets/image/mine/icon-customer.png);
     }
-    .preferential-tag {
-      font-size:12px;
-      margin-left:8px;
-      position: relative;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      padding: 2px 4px;
-      height: 16px;
-      line-height:16px;
+  }
+  .merge-cell {
+    background: #2abed1;
+    .van-cell__title {
       color: #fff;
-      background: linear-gradient(102deg,#ffa674, #f01212 100%);
-      border-top-left-radius: 4px;
-      border-bottom-left-radius: 4px;
-      i{
-        transform: skewX(-15deg) scale(.8);
-      }
     }
-    .preferential-tag::after {
-      content: '';
-      position: absolute;
-      top: 0;
-      right: -5px;
-      width: 0;
-      height: 0;
-      border-left: 1px solid #f01212;
-      border-top: 8px solid #f01212;
-      border-right: 5px solid transparent;
-      border-bottom: 9px solid #f01212;
+    .van-cell {
+      background: transparent;
     }
-    .jypoints-tag{
-      padding: 2px 8px;
-      border-radius: 4px;
-      background: linear-gradient(270deg, #F1D090 0%, #FAE7CA 100%);
-      color: #1B1A2A;
-      text-align: right;
-      font-size: 14px;
-      line-height: 20px;
-      position: absolute;
-      right:0;
+    .to-merge {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 55px;
+      height: 24px;
+      font-size: 13px;
+      line-height: 24px;
+      color: rgba(44, 183, 202, 1);
+      background: #fff;
+      border-radius: 24px;
+      border: 1px solid #fff;
     }
   }
-  ::v-deep {
-    .van-cell-group {
-      border-radius: 8px;
-      overflow: hidden;
-    }
-    .van-cell{
-      height:54px;
-      align-items: center;
-      &:not(:last-child):after {
-        position: absolute;
-        box-sizing: border-box;
-        content: ' ';
-        pointer-events: none;
-        right: 0;
-        bottom: 0;
-        left: 16px;
-        border-bottom: 1px solid #ebedf0;
-        -webkit-transform: scaleY(0.5);
-        transform: scaleY(0.5);
-      }
+  .van-cell__value {
+    color: #2abed1;
+    font-size: 15px;
+  }
+  .preferential-tag {
+    font-size: 12px;
+    margin-left: 8px;
+    position: relative;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    padding: 2px 4px;
+    height: 16px;
+    line-height: 16px;
+    color: #fff;
+    background: linear-gradient(102deg, #ffa674, #f01212 100%);
+    border-top-left-radius: 4px;
+    border-bottom-left-radius: 4px;
+    i {
+      transform: skewX(-15deg) scale(0.8);
     }
-    .van-cell__title{
-      position: relative;
-      display: flex;
-      align-items: center;
+  }
+  .preferential-tag::after {
+    content: '';
+    position: absolute;
+    top: 0;
+    right: -5px;
+    width: 0;
+    height: 0;
+    border-left: 1px solid #f01212;
+    border-top: 8px solid #f01212;
+    border-right: 5px solid transparent;
+    border-bottom: 9px solid #f01212;
+  }
+  .jypoints-tag {
+    padding: 2px 8px;
+    border-radius: 4px;
+    background: linear-gradient(270deg, #f1d090 0%, #fae7ca 100%);
+    color: #1b1a2a;
+    text-align: right;
+    font-size: 14px;
+    line-height: 20px;
+    position: absolute;
+    right: 0;
+  }
+}
+::v-deep {
+  .van-cell-group {
+    border-radius: 8px;
+    overflow: hidden;
+  }
+  .van-cell {
+    height: 54px;
+    align-items: center;
+    &:not(:last-child):after {
+      position: absolute;
+      box-sizing: border-box;
+      content: ' ';
+      pointer-events: none;
+      right: 0;
+      bottom: 0;
+      left: 16px;
+      border-bottom: 1px solid #ebedf0;
+      -webkit-transform: scaleY(0.5);
+      transform: scaleY(0.5);
     }
   }
-  .mt16{
-    margin-top:16px;
+  .van-cell__title {
+    position: relative;
+    display: flex;
+    align-items: center;
   }
-
+}
+.mt16 {
+  margin-top: 16px;
+}
 </style>

+ 212 - 194
apps/mobile/src/components/mine/SignIn.vue

@@ -4,22 +4,35 @@
       <div class="days">
         已连续签到 <em>{{ signInfo.days }} </em> 天
       </div>
-      <span class="btn" :class="signInfo.state ? 'normal-btn' : 'sign-btn'" @click="signHandle">{{signInfo.state ? '已签到' : '立即签到'}}</span>
+      <span
+        class="btn"
+        :class="signInfo.state ? 'normal-btn' : 'sign-btn'"
+        @click="signHandle"
+        >{{ signInfo.state ? '已签到' : '立即签到' }}</span
+      >
     </div>
     <div class="sign-data">
-      <div class="sign-list" v-for="(item,index) in signData" :key="index">
+      <div class="sign-list" v-for="(item, index) in signData" :key="index">
         <div
-          :class="['circle',
-          {'circle-active': index <= getToday - 1,
-          'circle-today' : index === getToday && !signInfo.state,
-          'active-right': index <= getToday - 1 && !showAnimate}]">+{{item}}
+          :class="[
+            'circle',
+            {
+              'circle-active': index <= getToday - 1,
+              'circle-today': index === getToday && !signInfo.state,
+              'active-right': index <= getToday - 1 && !showAnimate
+            }
+          ]"
+        >
+          +{{ item }}
         </div>
-        <div :class="['sun', {animate: index === getToday - 1 && showAnimate}]"></div>
+        <div
+          :class="['sun', { animate: index === getToday - 1 && showAnimate }]"
+        ></div>
       </div>
     </div>
     <div class="points-record" @click="viewMoreRecord" v-if="showMoreRecord">
       <span>查看记录</span>
-      <AppIcon name="youbian" size="14" color="#C0C4CC"/>
+      <AppIcon name="youbian" size="14" color="#C0C4CC" />
     </div>
     <van-dialog
       class="sign-success-dialog"
@@ -32,7 +45,9 @@
       </div>
       <div class="info">
         <p class="success-text">签到成功</p>
-        <p class="num-text">恭喜获得 <em>{{ addHowPoints() }}</em> 枚剑鱼币</p>
+        <p class="num-text">
+          恭喜获得 <em>{{ addHowPoints() }}</em> 枚剑鱼币
+        </p>
         <p class="iknow-btn" @click="closeDialog">我知道了</p>
       </div>
     </van-dialog>
@@ -57,7 +72,7 @@ export default {
       default: false
     }
   },
-  data () {
+  data() {
     return {
       showAnimate: false,
       signData: [],
@@ -77,10 +92,8 @@ export default {
     }
   },
   computed: {
-    ...mapGetters('points', [
-      'pointsInfo'
-    ]),
-    getToday () {
+    ...mapGetters('points', ['pointsInfo']),
+    getToday() {
       const { days, state: bool } = this.signInfo
       if (days < 7) {
         // 今天已签到 || 未签到
@@ -91,18 +104,16 @@ export default {
       }
     }
   },
-  async created () {
-    if(!this.pointsInfo || Object.keys(this.pointsInfo).length === 0){
+  async created() {
+    if (!this.pointsInfo || Object.keys(this.pointsInfo).length === 0) {
       await this.getPoints()
     }
     this.getPointsInfo()
   },
   methods: {
-    ...mapActions('points', [
-      'getPoints'
-    ]),
+    ...mapActions('points', ['getPoints']),
     // 获取积分信息
-    getPointsInfo () {
+    getPointsInfo() {
       this.signInfo.days = this.pointsInfo?.signInfo?.c_days
       this.signInfo.state = this.pointsInfo?.signInfo?.s_bool
       this.everyDayPoints()
@@ -118,7 +129,7 @@ export default {
       this.signData = this.typeArr[days] || this.typeArr[6]
     },
     // 签到更新积分
-    async signHandle () {
+    async signHandle() {
       if (this.signInfo.state) return
       const _this = this
       try {
@@ -160,11 +171,11 @@ export default {
       return points
     },
     // 查看更多积分
-    viewMoreRecord () {
+    viewMoreRecord() {
       this.$router.push('/points/detail')
     },
     // 关闭签到成功弹窗
-    closeDialog () {
+    closeDialog() {
       this.visibleDialog = false
     }
   }
@@ -172,195 +183,202 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-  .mine-sign-in{
-    background: #fff;
-    position: relative;
-    //margin: 12px 16px 0;
-    margin-top:12px;
-    padding: 16px;
-    border-radius: 8px;
-    background: url(@/assets/image/mine/dateGetBg@2x.png) no-repeat center center;
-    background-size: cover;
-    box-shadow: 0px 2px 8px 0px rgb(54 147 179 / 5%);
-    z-index: 3;
+.mine-sign-in {
+  background: #fff;
+  position: relative;
+  //margin: 12px 16px 0;
+  margin-top: 12px;
+  padding: 16px;
+  border-radius: 8px;
+  background: url(@/assets/image/mine/dateGetBg@2x.png) no-repeat center center;
+  background-size: cover;
+  box-shadow: 0px 2px 8px 0px rgb(54 147 179 / 5%);
+  z-index: 3;
+}
+.continuous {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .days {
+    font-size: 12px;
+    color: #5f5e64;
+    em {
+      color: #ff7a00;
+      font-weight: 600;
+      font-size: 16px;
+    }
   }
-  .continuous{
+  .btn {
     display: flex;
-    justify-content: space-between;
     align-items: center;
-    .days{
-      font-size: 12px;
-      color: #5F5E64;
-      em {
-        color: #FF7A00;
-        font-weight: 600;
-        font-size:16px;
-      }
-    }
-    .btn{
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      height: 24px;
-      padding: 0;
-      border-radius: 4px;
-      font-size: 12px;
-      box-sizing: border-box;
-    }
-    .sign-btn{
-      min-width: 60px;
-      background: #33323A;
-      color: #F1D090;
-    }
-    .normal-btn{
-      width: 48px;
-      border: 1px solid #D69E55;
-      color: #D69E55;
-      box-sizing: border-box;
-    }
+    justify-content: center;
+    height: 24px;
+    padding: 0;
+    border-radius: 4px;
+    font-size: 12px;
+    box-sizing: border-box;
+  }
+  .sign-btn {
+    min-width: 60px;
+    background: #33323a;
+    color: #f1d090;
   }
-  .sign-data{
+  .normal-btn {
+    width: 48px;
+    border: 1px solid #d69e55;
+    color: #d69e55;
+    box-sizing: border-box;
+  }
+}
+.sign-data {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding-top: 16px;
+  .sign-list {
+    position: relative;
     display: flex;
-    justify-content: space-between;
     align-items: center;
-    padding-top:16px;
-    .sign-list{
-      position: relative;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      width: 32px;
-      height: 32px;
-      border-radius: 50%;
+    justify-content: center;
+    width: 32px;
+    height: 32px;
+    border-radius: 50%;
+  }
+  .sun {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    &.animate {
+      animation: turn 6s linear infinite;
+      background: url(@/assets/image/mine/dateGetClick@2x.png) center center
+        no-repeat transparent;
+      background-size: 100% 100%;
     }
-    .sun{
+  }
+  .circle {
+    width: 32px;
+    height: 32px;
+    line-height: 32px;
+    text-align: center;
+    border-radius: 50%;
+    background: url(@/assets/image/mine/iconUnGot@2x.png) center center
+      no-repeat;
+    background-size: contain;
+    font-size: 12px;
+    overflow: hidden;
+  }
+  .circle-today {
+    background: url(@/assets/image/mine/iconGetToday@2x.png) center center
+      no-repeat;
+    background-size: contain;
+  }
+  .circle-active {
+    background: url(@/assets/image/mine/iconGot@2x.png) center center no-repeat;
+    background-size: contain;
+    color: #fff;
+  }
+  .active-right {
+    &:after {
+      content: '';
       position: absolute;
-      top: 0;
-      left: 0;
+      width: 12px;
+      height: 12px;
       right: 0;
-      bottom: 0;
-      &.animate{
-        animation: turn 6s linear infinite;
-        background: url(@/assets/image/mine/dateGetClick@2x.png) center center no-repeat transparent;
-        background-size: 100% 100%;
-      }
-    }
-    .circle{
-      width: 32px;
-      height: 32px;
-      line-height: 32px;
-      text-align: center;
-      border-radius: 50%;
-      background: url(@/assets/image/mine/iconUnGot@2x.png) center center no-repeat;
-      background-size: contain;
-      font-size: 12px;
-      overflow: hidden;
-    }
-    .circle-today{
-      background: url(@/assets/image/mine/iconGetToday@2x.png) center center no-repeat;
-      background-size: contain;
-    }
-    .circle-active{
-      background: url(@/assets/image/mine/iconGot@2x.png) center center no-repeat;
+      top: 0;
+      background: url(@/assets/image/icon/icon-yiqiandao.png) center center
+        no-repeat;
       background-size: contain;
-      color: #fff;
-    }
-    .active-right{
-      &:after{
-        content: '';
-        position: absolute;
-        width:12px;
-        height:12px;
-        right:0;
-        top:0;
-        background: url(@/assets/image/icon/icon-yiqiandao.png) center center no-repeat;
-        background-size: contain;
-      }
     }
   }
-  .points-record{
+}
+.points-record {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  font-size: 12px;
+  color: #5f5e64;
+  margin-top: 16px;
+}
+@keyframes turn {
+  0% {
+    -webkit-transform: rotate(0deg);
+  }
+  25% {
+    -webkit-transform: rotate(90deg);
+  }
+  50% {
+    -webkit-transform: rotate(180deg);
+  }
+  75% {
+    -webkit-transform: rotate(270deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+  }
+}
+.sign-success-dialog {
+  background: transparent;
+  .title {
+    text-align: right;
+  }
+  .icon-close {
+    color: #fff;
+    font-size: 28px;
+    cursor: pointer;
+  }
+  .info {
+    background: url(@/assets/image/jy-points/signed-bg.png) center center
+      no-repeat;
+    background-size: contain;
+    height: 383px;
     display: flex;
-    justify-content: center;
+    justify-content: flex-end;
     align-items: center;
-    font-size: 12px;
-    color: #5F5E64;
-    margin-top:16px;
+    flex-direction: column;
+    text-align: center;
+    color: #fff;
+    padding-bottom: 45px;
   }
-  @keyframes turn{
-    0%{
-      -webkit-transform:rotate(0deg);
-    }
-    25%{
-      -webkit-transform:rotate(90deg);
+  .success-text {
+    color: #be5d16;
+    font-size: 22px;
+    line-height: 32px;
+    &:after,
+    &:before {
+      display: inline-block;
+      content: '';
+      width: 24px;
+      height: 1px;
+      margin-bottom: 8px;
+      background: linear-gradient(270deg, #f4b07e 0%, #ffdb94 100%);
+      margin-right: 12px;
     }
-    50%{
-      -webkit-transform:rotate(180deg);
-    }
-    75%{
-      -webkit-transform:rotate(270deg);
-    }
-    100%{
-      -webkit-transform:rotate(360deg);
+    &:after {
+      margin-left: 12px;
+      background: linear-gradient(270deg, #ffdb94 0%, #f4b07e 100%);
     }
   }
-  .sign-success-dialog{
-    background: transparent;
-    .title{
-      text-align: right;
-    }
-    .icon-close{
-      color:#fff;
-      font-size: 28px;
-      cursor: pointer;
-    }
-    .info{
-      background: url(@/assets/image/jy-points/signed-bg.png) center center no-repeat;
-      background-size: contain;
-      height:383px;
-      display: flex;
-      justify-content: flex-end;
-      align-items: center;
-      flex-direction: column;
-      text-align: center;
-      color:#fff;
-      padding-bottom:45px;
-    }
-    .success-text{
-      color: #BE5D16;
-      font-size: 22px;
-      line-height: 32px;
-      &:after, &:before{
-        display: inline-block;
-        content: '';
-        width:24px;
-        height:1px;
-        margin-bottom:8px;
-        background: linear-gradient(270deg, #F4B07E 0%, #FFDB94 100%);
-        margin-right: 12px;
-      }
-      &:after{
-        margin-left: 12px;
-        background: linear-gradient(270deg, #FFDB94 0%, #F4B07E 100%);
-      }
-    }
-    .num-text{
-      color: #5F5E64;
-      text-align: center;
-      font-size: 16px;
-      line-height: 24px;
-      margin: 8px 0 38px;
-      em{
-        color: #BE5D16;
-      }
-    }
-    .iknow-btn{
-      cursor: pointer;
-      background: url(@/assets/image/jy-points/iknow-btn.png) center center no-repeat;
-      width: 236px;
-      height: 87px;
-      line-height: 48px;
-      background-size: 100% 100%;
-      font-size: 18px;
+  .num-text {
+    color: #5f5e64;
+    text-align: center;
+    font-size: 16px;
+    line-height: 24px;
+    margin: 8px 0 38px;
+    em {
+      color: #be5d16;
     }
   }
+  .iknow-btn {
+    cursor: pointer;
+    background: url(@/assets/image/jy-points/iknow-btn.png) center center
+      no-repeat;
+    width: 236px;
+    height: 87px;
+    line-height: 48px;
+    background-size: 100% 100%;
+    font-size: 18px;
+  }
+}
 </style>

+ 40 - 36
apps/mobile/src/components/mine/featureMoveDialog.vue

@@ -1,12 +1,18 @@
 <template>
   <div class="feature-move-dialog" v-if="show">
-    <div class="tip-box" :style="{'bottom': $envs.inAppOrH5 ? '16px' : '10%'}">
+    <div class="tip-box" :style="{ bottom: $envs.inAppOrH5 ? '16px' : '10%' }">
       <h3>功能搬家提醒</h3>
       <div class="tip-content">
-        <span v-if="tipTimes < 1">“百宝箱”全新升级,“我的”部分功能(例如:项目关注、数据导出记录等)已搬家至“百宝箱”,请前往“百宝箱”了解并使用剑鱼全部功能。</span>
-         <span v-else>超级订阅、数据导出已搬家至“百宝箱”,请前往“百宝箱”了解并使用剑鱼全部功能</span>
+        <span v-if="tipTimes < 1"
+          >“百宝箱”全新升级,“我的”部分功能(例如:项目关注、数据导出记录等)已搬家至“百宝箱”,请前往“百宝箱”了解并使用剑鱼全部功能。</span
+        >
+        <span v-else
+          >超级订阅、数据导出已搬家至“百宝箱”,请前往“百宝箱”了解并使用剑鱼全部功能</span
+        >
+      </div>
+      <div class="tip-confirm-btn" @click="showMoveDialog('know')">
+        我知道了
       </div>
-      <div class="tip-confirm-btn" @click="showMoveDialog('know')">我知道了</div>
       <div class="triangle"></div>
     </div>
   </div>
@@ -16,18 +22,18 @@
 import { getMoveDialog } from '@/api/modules/mine'
 
 export default {
-  data () {
+  data() {
     return {
       show: false,
       tipTimes: 0
     }
   },
-  created () {
+  created() {
     this.showMoveDialog()
   },
   methods: {
     // 展示功能搬家提醒弹窗
-    async  showMoveDialog (know) {
+    async showMoveDialog(know) {
       try {
         const params = {
           tipName: 'box_moving',
@@ -47,18 +53,17 @@ export default {
     }
   }
 }
-
 </script>
 
 <style lang="scss" scoped>
-.feature-move-dialog{
-  position:absolute;
-  top:0;
-  bottom:0;
-  width:100%;
-  background: rgba(0,0,0,0);
-  z-index:10;
-  .tip-box{
+.feature-move-dialog {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  width: 100%;
+  background: rgba(0, 0, 0, 0);
+  z-index: 10;
+  .tip-box {
     position: fixed;
     width: 274px;
     height: 198px;
@@ -67,48 +72,47 @@ export default {
     flex-direction: column;
     align-items: center;
     padding: 16px 24px;
-    background: linear-gradient(180deg, #14D8D8 0%, #14B4D8 100%);
+    background: linear-gradient(180deg, #14d8d8 0%, #14b4d8 100%);
     border-radius: 12px;
     color: #fff;
-    h3{
+    h3 {
       font-weight: 400;
       font-size: 18px;
       line-height: 24px;
       text-align: center;
     }
-    .tip-content{
+    .tip-content {
       font-size: 14px;
       line-height: 20px;
-      color: #FFFFFF;
-      width:226px;
+      color: #ffffff;
+      width: 226px;
       margin: 5px;
     }
-    .tip-confirm-btn{
-      position:absolute;
-      bottom:10px;
-      margin-top:3px;
-      width:226px;
-      height:32px;
-      background: #FFFFFF;
+    .tip-confirm-btn {
+      position: absolute;
+      bottom: 10px;
+      margin-top: 3px;
+      width: 226px;
+      height: 32px;
+      background: #ffffff;
       border-radius: 4px;
       font-style: normal;
       font-weight: 400;
       font-size: 16px;
       line-height: 32px;
-      color: #2ABED1;
+      color: #2abed1;
       text-align: center;
       cursor: pointer;
     }
-    .triangle{
+    .triangle {
       position: absolute;
-      bottom:-25px;
-      right:24%;
-      width:0;
-      height:0;
+      bottom: -25px;
+      right: 24%;
+      width: 0;
+      height: 0;
       border: 13px solid;
-      border-color: #14B4D8 transparent transparent transparent;
+      border-color: #14b4d8 transparent transparent transparent;
     }
-
   }
 }
 </style>

+ 53 - 43
apps/mobile/src/components/points/TaskCardUi.vue

@@ -2,7 +2,10 @@
   <div class="task-card-ui">
     <div class="left-icon">
       <slot name="leftIcon">
-        <img :src="item.icon || require('@/assets/image/jy-points/new-icon.png')" alt="">
+        <img
+          :src="item.icon || require('@/assets/image/jy-points/new-icon.png')"
+          alt=""
+        />
       </slot>
     </div>
     <div class="content-col">
@@ -13,22 +16,31 @@
     </div>
     <div class="handle-col">
       <slot name="rightHandle" :item="item">
-<!--        金币-->
+        <!--        金币-->
         <div v-if="isScoreHandle">
           <div class="jy-score">
             <i class="icon-points"></i>
             <span>+{{ item.point }}</span>
           </div>
-          <div style="text-align: right;">
-            <span  class="btn-info normal-btn" v-if="handleStatus">已完成</span>
-            <span class="btn-info full-btn clickable" @click="goComplete" v-if="!handleStatus">去完成</span>
+          <div style="text-align: right">
+            <span class="btn-info normal-btn" v-if="handleStatus">已完成</span>
+            <span
+              class="btn-info full-btn clickable"
+              @click="goComplete"
+              v-if="!handleStatus"
+              >去完成</span
+            >
           </div>
         </div>
-<!--        任务-->
-        <div v-else style="text-align: right;">
+        <!--        任务-->
+        <div v-else style="text-align: right">
           <div>
-            <span class="btn-info full-btn clickable" @click="goChallenge">确认挑战</span>
-            <p class="view-task" @click="viewChallenge">先看看<AppIcon name="youbian" color="#D69E55" size="12"></AppIcon></p>
+            <span class="btn-info full-btn clickable" @click="goChallenge"
+              >确认挑战</span
+            >
+            <p class="view-task" @click="viewChallenge">
+              先看看<AppIcon name="youbian" color="#D69E55" size="12"></AppIcon>
+            </p>
           </div>
         </div>
       </slot>
@@ -37,7 +49,6 @@
 </template>
 
 <script>
-
 import { AppIcon } from '@/ui'
 import defaultImg from '@/assets/image/jy-points/new-icon.png'
 
@@ -68,9 +79,8 @@ export default {
       default: false
     }
   },
-  data () {
-    return {
-    }
+  data() {
+    return {}
   },
   methods: {
     // 确认挑战
@@ -78,11 +88,11 @@ export default {
       this.$emit('goChallenge', this.item)
     },
     // 先看看
-    viewChallenge () {
+    viewChallenge() {
       this.$emit('viewChallenge')
     },
     // 去完成
-    goComplete () {
+    goComplete() {
       this.$emit('goComplete', this.item)
     }
   }
@@ -90,75 +100,75 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.task-card-ui{
+.task-card-ui {
   border-radius: 4px;
-  background: var(--font-ffffff, #FFF);
+  background: var(--font-ffffff, #fff);
   box-shadow: 0 2px 8px 0 rgba(54, 147, 179, 0.05);
   padding: 12px;
   display: grid;
   grid-template-columns: 44px auto 25%;
 
-  .left-icon img{
+  .left-icon img {
     width: 44px;
     height: 44px;
   }
-  .content-col{
-    color: #1B1A2A;
-    margin-left:8px;
-    .title{
+  .content-col {
+    color: #1b1a2a;
+    margin-left: 8px;
+    .title {
       font-size: 14px;
       line-height: 20px;
     }
-    .desc{
-      color: #9B9CA3;
+    .desc {
+      color: #9b9ca3;
       font-size: 11px;
       line-height: 16px;
-      margin-top:4px;
+      margin-top: 4px;
       white-space: break-spaces;
     }
   }
-  .handle-col{
-    .jy-score{
-      color: #FB483D;
+  .handle-col {
+    .jy-score {
+      color: #fb483d;
       text-align: right;
       font-size: 14px;
       line-height: 18px;
-      margin-bottom:13px;
+      margin-bottom: 13px;
       white-space: nowrap;
     }
-    .icon-points{
+    .icon-points {
       display: inline-block;
-      width:20px;
-      height:20px;
+      width: 20px;
+      height: 20px;
       vertical-align: middle;
     }
-    .btn-info{
+    .btn-info {
       white-space: nowrap;
       display: inline-block;
       text-align: center;
       border-radius: 2px;
-      color: #1B1A2A;
+      color: #1b1a2a;
       font-size: 14px;
       line-height: 18px;
     }
-    .full-btn{
+    .full-btn {
       padding: 3px 12px;
-      background: linear-gradient(270deg, #F1D090 0%, #FAE7CA 100%);
+      background: linear-gradient(270deg, #f1d090 0%, #fae7ca 100%);
     }
-    .normal-btn{
+    .normal-btn {
       padding: 1px 6px !important;
       border-radius: 2px;
-      border: 0.5px solid  #D69E55;
+      border: 0.5px solid #d69e55;
       background: transparent;
-      color: #D69E55;
+      color: #d69e55;
       font-size: 12px;
     }
-    .view-task{
-      color: #D69E55;
+    .view-task {
+      color: #d69e55;
       text-align: right;
       font-size: 10px;
-      margin-top:18px;
-      line-height:12px;
+      margin-top: 18px;
+      line-height: 12px;
     }
   }
 }

+ 82 - 42
apps/mobile/src/components/recommend/index.vue

@@ -3,38 +3,76 @@
     <van-collapse v-model="activeName" accordion :border="false">
       <van-collapse-item name="1" ref="collapseRef" class="remove-active">
         <div slot="title">
-          <span class="item-title">{{getNowInfo.title}}</span>
+          <span class="item-title">{{ getNowInfo.title }}</span>
           <div class="resize-lh" slot="label">
-            <span v-if="(activeName || getNotModuleDataStatus)" class="desc">{{getNowInfo.desc}}</span>
+            <span v-if="activeName || getNotModuleDataStatus" class="desc">{{
+              getNowInfo.desc
+            }}</span>
             <p v-else>
-              <span class="proposed-data data-color" v-for="(item, index) in briefList" :key="index">
-                {{item.key}}:<em class="highlight-text">{{item.value}}条</em>
+              <span
+                class="proposed-data data-color"
+                v-for="(item, index) in briefList"
+                :key="index"
+              >
+                {{ item.key }}:<em class="highlight-text"
+                  >{{ item.value }}条</em
+                >
               </span>
             </p>
           </div>
         </div>
-        <van-swipe class="my-swipe" :data-index="getSwipeIndex" ref="mySwipe" @change="changeSwipe" :loop="false">
-          <van-swipe-item v-if="(this.briefList.length || this.projectList.length)">
+        <van-swipe
+          class="my-swipe"
+          :data-index="getSwipeIndex"
+          ref="mySwipe"
+          @change="changeSwipe"
+          :loop="false"
+        >
+          <van-swipe-item
+            v-if="this.briefList.length || this.projectList.length"
+          >
             <div class="item-content van-hairline--bottom">
               <div class="pro-list">
                 <span class="tags blue-tags">累计发布</span>
                 <div class="pro-list-data">
-              <span class="proposed-data data-color" v-for="(item, index) in briefList" :key="index">
-                {{item.key}}:<em class="highlight-text">{{item.value}}条</em>
-              </span>
+                  <span
+                    class="proposed-data data-color"
+                    v-for="(item, index) in briefList"
+                    :key="index"
+                  >
+                    {{ item.key }}:<em class="highlight-text"
+                      >{{ item.value }}条</em
+                    >
+                  </span>
                 </div>
               </div>
-              <div class="pro-list" v-for="(item, index) in projectList" :key="index" @click="goToContent(item)">
+              <div
+                class="pro-list"
+                v-for="(item, index) in projectList"
+                :key="index"
+                @click="goToContent(item)"
+              >
                 <span class="tags orange-tags">最新项目</span>
-                <span class="ellipsis list-title" v-html="getTitle(item)"></span>
+                <span
+                  class="ellipsis list-title"
+                  v-html="getTitle(item)"
+                ></span>
               </div>
               <div class="j-button-group height40">
-                <button class="j-button-confirm" @click="goToSubmitSource">感兴趣点我</button>
+                <button class="j-button-confirm" @click="goToSubmitSource">
+                  感兴趣点我
+                </button>
               </div>
             </div>
           </van-swipe-item>
           <van-swipe-item v-if="getShowChart">
-            <CustomReport :source="source" @do-leave="$emit('do-leave')" :key="showChartComponentKey" :show-title="false" :chartData="chartData"></CustomReport>
+            <CustomReport
+              :source="source"
+              @do-leave="$emit('do-leave')"
+              :key="showChartComponentKey"
+              :show-title="false"
+              :chartData="chartData"
+            ></CustomReport>
           </van-swipe-item>
         </van-swipe>
       </van-collapse-item>
@@ -82,7 +120,7 @@ export default {
       default: () => {}
     }
   },
-  data () {
+  data() {
     return {
       activeName: this.showContent ? '1' : '',
       moduleInfo: {
@@ -101,7 +139,7 @@ export default {
   },
   computed: {
     // 当前第一位展示内容标识
-    nowModuleName () {
+    nowModuleName() {
       if (this.briefList.length || this.projectList.length) {
         // 轮播图模式特殊处理
         if (this.getSwipeIndex === 1) {
@@ -113,42 +151,42 @@ export default {
       }
     },
     // 获取当前模块展示文本信息
-    getNowInfo () {
+    getNowInfo() {
       return this.moduleInfo[this.nowModuleName]
     },
     // 获取当前模块缩小后是否有数据展示
-    getNotModuleDataStatus () {
+    getNotModuleDataStatus() {
       if (this.nowModuleName === '超前项目推荐') {
         return !this.briefList.length
       } else {
         return true
       }
     },
-    getShowChart () {
+    getShowChart() {
       return Object.keys(this.chartData).length
     },
-    getSwipeIndex () {
+    getSwipeIndex() {
       const swipeIndex = this.$refs?.mySwipe?._data.active
       return swipeIndex || this.activeIndex
     }
   },
   watch: {
-    activeName (val) {
+    activeName(val) {
       this.$emit('toggle', Boolean(val))
     },
-    showContent (val) {
+    showContent(val) {
       this.activeName = val ? '1' : ''
     }
   },
   methods: {
-    getTitle ({ title, keyWord }) {
+    getTitle({ title, keyWord }) {
       return replaceKeyword(title, keyWord || [])
     },
-    onClickOutSide () {
+    onClickOutSide() {
       this.activeName = ''
     },
     // 去超前项目留资页面
-    async goToSubmitSource () {
+    async goToSubmitSource() {
       this.$emit('do-leave', 'source')
 
       try {
@@ -164,20 +202,22 @@ export default {
       })
     },
     // 去超前项目 标讯详情页面
-    async goToContent ({ _id, keyWord }) {
+    async goToContent({ _id, keyWord }) {
       this.$emit('do-leave', 'content')
       try {
         await ajaxSetLeadGetDateRecord({ type: 'A' })
       } catch (e) {
         console.warn(e)
       }
-      let goURL = `${(this.$envs.inWX ? '' : '/jyapp')}/article/content/${_id}.html`
+      let goURL = `${
+        this.$envs.inWX ? '' : '/jyapp'
+      }/article/content/${_id}.html`
       if (Array.isArray(keyWord)) {
         goURL += `?keywords=${encodeURIComponent(keyWord.join('+'))}`
       }
       location.href = goURL
     },
-    changeSwipe (index) {
+    changeSwipe(index) {
       this.activeIndex = index
       if (index === 1) {
         this.showChartComponentKey = Date.now()
@@ -194,7 +234,7 @@ export default {
     background-color: #fff;
   }
 
-  .item-title{
+  .item-title {
     font-size: 16px;
     line-height: 22px;
     color: $gray_9;
@@ -202,7 +242,7 @@ export default {
   .resize-lh {
     line-height: 18px;
   }
-  .desc{
+  .desc {
     font-size: 12px;
     line-height: 18px;
     color: $gray_6;
@@ -211,18 +251,18 @@ export default {
     padding: 0 16px;
     padding-bottom: 10px;
   }
-  .pro-list{
+  .pro-list {
     display: flex;
     align-items: center;
     padding: 8px 0;
   }
-  .list-title{
+  .list-title {
     flex: 1;
     color: $gray_9;
     font-size: 14px;
     line-height: 22px;
   }
-  .tags{
+  .tags {
     display: inline-block;
     padding: 1px 8px;
     margin-right: 8px;
@@ -231,40 +271,40 @@ export default {
     line-height: 18px;
     flex-shrink: 0;
   }
-  .tags.blue-tags{
+  .tags.blue-tags {
     color: $main;
     background: rgba(42, 190, 209, 0.08);
   }
-  .tags.orange-tags{
+  .tags.orange-tags {
     color: $orange;
     background: rgba(255, 159, 64, 0.1);
   }
-  .pro-list-data{
+  .pro-list-data {
     flex: 1;
     display: flex;
     justify-content: space-between;
   }
   .proposed-data,
-  .buyer-data{
+  .buyer-data {
     flex-shrink: 0;
     color: $gray_9;
     font-size: 14px;
     line-height: 22px;
   }
-  .mr-49{
+  .mr-49 {
     margin-right: 49px;
   }
-  .data-color{
+  .data-color {
     color: $gray_7;
   }
-  .j-button-group{
+  .j-button-group {
     padding: 8px 0;
   }
-  .j-button-confirm{
+  .j-button-confirm {
     font-size: 16px;
   }
-  ::v-deep{
-    .van-collapse-item__content{
+  ::v-deep {
+    .van-collapse-item__content {
       padding: 0;
     }
   }

+ 43 - 33
apps/mobile/src/components/search/AssociationList.vue

@@ -1,6 +1,13 @@
 <template>
   <ul class="association-list">
-    <li v-active="{ css: 'hover' }" class="hover-css--slide jy-hairline--bottom" v-for="(item, index) in getList" :key="index" v-html="item.html" @click="$emit('click', item)"></li>
+    <li
+      v-active="{ css: 'hover' }"
+      class="hover-css--slide jy-hairline--bottom"
+      v-for="(item, index) in getList"
+      :key="index"
+      v-html="item.html"
+      @click="$emit('click', item)"
+    ></li>
   </ul>
 </template>
 
@@ -18,23 +25,26 @@ export default {
     keys: {
       required: true,
       type: [String, Array],
-      default () {
+      default() {
         return ''
       }
     },
     list: {
       type: Array,
-      default () {
+      default() {
         return []
       }
     }
   },
   computed: {
-    getList () {
-      return this.list.map(v => {
-        return Object.assign({
-          html: replaceKeyword(v.label, this.keys)
-        }, v)
+    getList() {
+      return this.list.map((v) => {
+        return Object.assign(
+          {
+            html: replaceKeyword(v.label, this.keys)
+          },
+          v
+        )
       })
     }
   }
@@ -49,31 +59,31 @@ $association-list-size: 14px;
 $association-list-line-height: 48px;
 
 .association-list {
-    margin: 0;
-    padding: 0;
-    list-style: none;
-    font-weight: 500;
-    font-size: $association-list-size;
-    line-height: $association-list-line-height;
-    color: $association-list-color;
-    li {
-      position: relative;
-      outline: none;
-      border: none;
-      z-index: 1;
-      font-size: inherit;
-      font-family: inherit;
-      color: inherit;
-      background: inherit;
-      padding: 0 $association-list-padding;
-      box-sizing: border-box;
-      overflow: hidden;
-      white-space: nowrap;
-      text-overflow: ellipsis;
-      float: unset;
-      &::after {
-        margin-left: $association-list-padding;
-      }
+  margin: 0;
+  padding: 0;
+  list-style: none;
+  font-weight: 500;
+  font-size: $association-list-size;
+  line-height: $association-list-line-height;
+  color: $association-list-color;
+  li {
+    position: relative;
+    outline: none;
+    border: none;
+    z-index: 1;
+    font-size: inherit;
+    font-family: inherit;
+    color: inherit;
+    background: inherit;
+    padding: 0 $association-list-padding;
+    box-sizing: border-box;
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    float: unset;
+    &::after {
+      margin-left: $association-list-padding;
     }
   }
+}
 </style>

+ 14 - 11
apps/mobile/src/components/search/HistoryList.vue

@@ -1,7 +1,10 @@
 <template>
-  <history-list :title="title" :max="max" :list="getList"
-                @click="$emit('click', $event)"
-                @delete="deleteList"
+  <history-list
+    :title="title"
+    :max="max"
+    :list="getList"
+    @click="$emit('click', $event)"
+    @delete="deleteList"
   ></history-list>
 </template>
 
@@ -31,7 +34,7 @@ export default {
     },
     list: {
       type: Array,
-      default () {
+      default() {
         return []
       }
     },
@@ -45,13 +48,13 @@ export default {
       default: 'default-list-key'
     }
   },
-  data () {
+  data() {
     return {
       cache: []
     }
   },
   computed: {
-    getList () {
+    getList() {
       const repeatList = [].concat(this.list, this.cache)
       let result = []
       if (this.filter) {
@@ -61,31 +64,31 @@ export default {
     }
   },
   watch: {
-    list () {
+    list() {
       this.save()
       this.$nextTick(() => {
         this.save()
       })
     }
   },
-  created () {
+  created() {
     this.cache = this.$storage.get(this.cacheKey, [], {
       login: true
     })
   },
   methods: {
-    save () {
+    save() {
       this.$storage.set(this.cacheKey, this.getList, {
         login: true
       })
     },
-    remove () {
+    remove() {
       this.cache = []
       this.$storage.rm(this.cacheKey, {
         login: true
       })
     },
-    deleteList () {
+    deleteList() {
       this.$emit('delete')
       this.remove()
     }

+ 13 - 9
apps/mobile/src/components/search/Layout.vue

@@ -46,15 +46,19 @@ export default {
     }
   },
   methods: {
-    onSubmit: debounce(function (type, data) {
-      this.$emit('top-event', {
-        type,
-        data
-      })
-    }, 300, {
-      leading: true
-    }),
-    onSearch (type, data) {
+    onSubmit: debounce(
+      function (type, data) {
+        this.$emit('top-event', {
+          type,
+          data
+        })
+      },
+      300,
+      {
+        leading: true
+      }
+    ),
+    onSearch(type, data) {
       if (type === 'input') {
         this.$emit('input', data)
       }

+ 18 - 12
apps/mobile/src/components/search/TopSearch.vue

@@ -3,11 +3,15 @@
     <div class="back-icon" @click="$emit('back')">
       <AppIcon name="back" />
     </div>
-    <van-form class="search-form" @submit="$emit('submit', value)" action="javascript:return true">
+    <van-form
+      class="search-form"
+      @submit="$emit('submit', value)"
+      action="javascript:return true"
+    >
       <van-field
         clearable
         class="input-group"
-        :class="{'fix-right' : !showButton, border: inputFocus}"
+        :class="{ 'fix-right': !showButton, border: inputFocus }"
         type="search"
         :value="value"
         :maxlength="maxlength"
@@ -22,7 +26,9 @@
           <AppIcon name="search" />
         </template>
       </van-field>
-      <button v-show="showButton" class="search-button clickable" type="submit">{{ buttonText }}</button>
+      <button v-show="showButton" class="search-button clickable" type="submit">
+        {{ buttonText }}
+      </button>
     </van-form>
   </div>
 </template>
@@ -64,24 +70,24 @@ export default {
     }
   },
   computed: {
-    getPlaceholder () {
+    getPlaceholder() {
       return this.placeholder || '多个关键词用空格隔开'
     }
   },
-  data () {
+  data() {
     return {
       inputFocus: false
     }
   },
   methods: {
-    formatter (value) {
+    formatter(value) {
       return value.replace(/\s{2,}/g, ' ')
     },
-    onFocus () {
+    onFocus() {
       this.inputFocus = true
       this.$emit('focus', this.value.trim())
     },
-    onBlur () {
+    onBlur() {
       this.inputFocus = false
       this.$emit('input', this.value.trim())
     }
@@ -91,10 +97,10 @@ export default {
 
 <style lang="scss" scoped>
 $search-color: #171826;
-$search-color--back: #5F5E64;
-$search-color--button: #2ABED1;
-$search-color--placeholder: #C0C4CC;
-$search-color--input-group: #F5F6F7;
+$search-color--back: #5f5e64;
+$search-color--button: #2abed1;
+$search-color--placeholder: #c0c4cc;
+$search-color--input-group: #f5f6f7;
 
 $search-size: 14px;
 $search-input-group-height: 36px;

+ 13 - 7
apps/mobile/src/components/search/bidding/filterHistoryDialog.vue

@@ -8,15 +8,20 @@
     @cancel="onClose(false)"
     @close="onClose(false)"
     :before-close="beforeClose"
-    show-cancel-button>
+    show-cancel-button
+  >
     <CellCard>
       <template #header-left>
         <div class="card-left-header">
           <div class="card-item">
             <span class="item-label">关键词:</span>
             <span class="item-text">
-              <span class="highlight-text word-break">{{ content.allKeywordsText }}</span>
-              <span class="item-sub-text" v-if="content.wordsModeText">({{ content.wordsModeText }})</span>
+              <span class="highlight-text word-break">{{
+                content.allKeywordsText
+              }}</span>
+              <span class="item-sub-text" v-if="content.wordsModeText"
+                >({{ content.wordsModeText }})</span
+              >
             </span>
           </div>
           <div class="card-item" v-if="content.searchModeText">
@@ -29,7 +34,8 @@
         <div
           class="card-item"
           v-for="(item, index) in content.formattedList"
-          :key="index">
+          :key="index"
+        >
           <template>
             <span class="item-label">{{ item.label }}</span>
             <span class="item-text highlight-text">{{ item.text }}</span>
@@ -53,7 +59,7 @@ export default {
     beforeClose: Function,
     content: {
       type: Object,
-      default () {
+      default() {
         return {
           allKeywordsText: '',
           searchModeText: '',
@@ -68,7 +74,7 @@ export default {
     event: 'change'
   },
   methods: {
-    onClose (f = false) {
+    onClose(f = false) {
       this.$emit('change', f)
     }
   }
@@ -77,7 +83,7 @@ export default {
 <style lang="scss" scoped>
 .card-left-header {
   font-size: 15px;
-  color: #5F5E64;
+  color: #5f5e64;
 }
 .word-break {
   word-break: break-word;

Some files were not shown because too many files changed in this diff