bxs-tools-ui 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +20 -20
  2. package/es/add-and-take/index.css +1 -1
  3. package/es/add-and-take/index.js +283 -64
  4. package/es/adjust-baoe/index.css +1 -1
  5. package/es/adjust-baoe/index.js +444 -195
  6. package/es/business-card/index.css +1 -1
  7. package/es/business-card/index.js +1 -0
  8. package/es/canvas-poster/index.css +1 -1
  9. package/es/canvas-poster/index.js +1 -0
  10. package/es/index.css +1 -1
  11. package/es/index.js +950 -839
  12. package/es/insure-calculate/index.css +1 -1
  13. package/es/insure-calculate/index.js +438 -265
  14. package/es/person-info/index.css +1 -1
  15. package/es/person-info/index.js +296 -1370
  16. package/es/product-info/index.css +1 -1
  17. package/es/product-info/index.js +644 -548
  18. package/es/share-sheet/index.css +1 -1
  19. package/es/share-sheet/index.js +321 -30
  20. package/es/utils/index.js +530 -429
  21. package/lib/add-and-take/index.css +1 -1
  22. package/lib/add-and-take/index.js +283 -64
  23. package/lib/adjust-baoe/index.css +1 -1
  24. package/lib/adjust-baoe/index.js +441 -194
  25. package/lib/business-card/index.css +1 -1
  26. package/lib/business-card/index.js +1 -0
  27. package/lib/canvas-poster/index.css +1 -1
  28. package/lib/canvas-poster/index.js +1 -0
  29. package/lib/index.css +1 -1
  30. package/lib/index.js +953 -841
  31. package/lib/insure-calculate/index.css +1 -1
  32. package/lib/insure-calculate/index.js +438 -268
  33. package/lib/person-info/index.css +1 -1
  34. package/lib/person-info/index.js +295 -1372
  35. package/lib/product-info/index.css +1 -1
  36. package/lib/product-info/index.js +645 -550
  37. package/lib/share-sheet/index.css +1 -1
  38. package/lib/share-sheet/index.js +321 -34
  39. package/lib/utils/index.js +531 -433
  40. package/package.json +9 -7
  41. package/packages/add-and-take/components/interest-form.less +144 -0
  42. package/packages/add-and-take/components/interest-form.vue +179 -179
  43. package/packages/add-and-take/components/interest-items.less +87 -0
  44. package/packages/add-and-take/components/interest-items.vue +67 -80
  45. package/packages/add-and-take/components/interest-table.less +111 -0
  46. package/packages/add-and-take/components/interest-table.vue +31 -31
  47. package/packages/add-and-take/constant.ts +2 -2
  48. package/packages/add-and-take/demo/index.vue +89 -86
  49. package/packages/add-and-take/handler.ts +52 -57
  50. package/packages/add-and-take/index.less +69 -0
  51. package/packages/add-and-take/index.vue +156 -156
  52. package/packages/add-and-take/readme.md +87 -98
  53. package/packages/adjust-baoe/demo/index.vue +37 -47
  54. package/packages/adjust-baoe/index.less +125 -0
  55. package/packages/adjust-baoe/index.vue +134 -147
  56. package/packages/adjust-baoe/readme.md +35 -45
  57. package/packages/business-card/demo/index.vue +7 -7
  58. package/packages/business-card/index.less +100 -0
  59. package/packages/business-card/index.vue +18 -21
  60. package/packages/business-card/readme.md +46 -53
  61. package/packages/bxs-utils/demo/index.vue +2 -2
  62. package/packages/bxs-utils/index.ts +5 -5
  63. package/packages/bxs-utils/planbook/common.ts +56 -92
  64. package/packages/bxs-utils/planbook/index.ts +4 -4
  65. package/packages/bxs-utils/planbook/insurance.ts +137 -127
  66. package/packages/bxs-utils/planbook/person.ts +143 -147
  67. package/packages/bxs-utils/planbook/product.ts +473 -509
  68. package/packages/bxs-utils/readme.md +94 -84
  69. package/packages/bxs-utils/trade/index.js +1 -1
  70. package/packages/bxs-utils/trade/insureCalculate.js +91 -204
  71. package/packages/canvas-poster/demo/index.vue +9 -13
  72. package/packages/canvas-poster/index.less +5 -0
  73. package/packages/canvas-poster/index.vue +68 -79
  74. package/packages/canvas-poster/readme.md +106 -109
  75. package/packages/index.ts +1 -1
  76. package/packages/insure-calculate/demo/index.vue +20 -20
  77. package/packages/insure-calculate/index.less +366 -0
  78. package/packages/insure-calculate/index.vue +305 -329
  79. package/packages/insure-calculate/readme.md +99 -106
  80. package/packages/person-info/crm-popup.vue +81 -80
  81. package/packages/person-info/demo/index.vue +25 -37
  82. package/packages/person-info/index-inline.less +11 -0
  83. package/packages/person-info/index.vue +53 -83
  84. package/packages/person-info/readme.md +109 -115
  85. package/packages/planbook-input/components/footer.less +54 -0
  86. package/packages/planbook-input/components/footer.vue +8 -64
  87. package/packages/planbook-input/components/handler.js +33 -44
  88. package/packages/planbook-input/components/product-table.less +235 -0
  89. package/packages/planbook-input/components/product-table.vue +114 -108
  90. package/packages/planbook-input/demo/index.vue +3 -3
  91. package/packages/planbook-input/helper.js +852 -465
  92. package/packages/planbook-input/index.less +30 -0
  93. package/packages/planbook-input/index.vue +86 -103
  94. package/packages/planbook-input/readme.md +72 -90
  95. package/packages/product-info/demo/constant.js +1 -1
  96. package/packages/product-info/demo/index.vue +31 -43
  97. package/packages/product-info/index.less +271 -0
  98. package/packages/product-info/index.vue +198 -210
  99. package/packages/product-info/readme.md +72 -75
  100. package/packages/share-sheet/constant.js +6 -11
  101. package/packages/share-sheet/demo/index.vue +24 -24
  102. package/packages/share-sheet/handler.js +14 -14
  103. package/packages/share-sheet/index.less +201 -0
  104. package/packages/share-sheet/index.vue +43 -43
  105. package/packages/share-sheet/readme.md +121 -127
  106. package/src/api/add-and-take.js +45 -0
  107. package/src/api/adjust-baoe.js +16 -0
  108. package/src/api/index.js +6 -0
  109. package/src/api/planbook.js +93 -0
  110. package/src/api/request.js +211 -0
  111. package/src/api/trade.js +56 -0
  112. package/src/api/user.js +18 -0
  113. package/src/components/common/common-age-birthday.less +66 -0
  114. package/src/components/common/common-age-birthday.vue +27 -95
  115. package/src/components/common/common-popup.less +81 -0
  116. package/src/components/common/common-popup.vue +12 -96
  117. package/src/components/common/common-radio.less +75 -0
  118. package/src/components/common/common-radio.vue +13 -91
  119. package/src/components/common/common-select.less +13 -0
  120. package/src/components/common/common-select.vue +21 -38
  121. package/src/components/common/common-title.less +115 -0
  122. package/src/components/common/common-title.vue +24 -24
  123. package/src/js/loading.js +6 -6
  124. package/src/js/md5Token.js +38 -44
  125. package/src/js/utils.js +45 -53
  126. package/src/js/variables.js +47 -25
  127. package/src/style/base.less +18 -0
  128. package/src/style/color.less +40 -0
  129. package/src/style/variables.less +21 -42
  130. package/packages/add-and-take/api.ts +0 -70
  131. package/packages/add-and-take/components/interest-form.css +0 -146
  132. package/packages/add-and-take/components/interest-items.css +0 -87
  133. package/packages/add-and-take/components/interest-table.css +0 -113
  134. package/packages/add-and-take/index.css +0 -70
  135. package/packages/adjust-baoe/index.css +0 -123
  136. package/packages/business-card/index.css +0 -101
  137. package/packages/canvas-poster/index.css +0 -5
  138. package/packages/insure-calculate/index.css +0 -368
  139. package/packages/planbook-input/api.js +0 -29
  140. package/packages/planbook-input/components/product-table.css +0 -236
  141. package/packages/planbook-input/index.css +0 -31
  142. package/packages/product-info/index.css +0 -264
  143. package/packages/share-sheet/index.css +0 -190
  144. package/src/components/common/common-title.css +0 -116
  145. package/src/js/request.js +0 -64
  146. package/src/style/apply.css +0 -25
  147. package/src/style/base.css +0 -36
  148. package/src/style/color.css +0 -74
@@ -3,6 +3,7 @@
3
3
  计划书投保页的产品组件,基于服务端下发的 `mulInsOrderList` 动态渲染各险种的表单元素,支持元素值修改、险种联动逻辑处理与表单校验。
4
4
 
5
5
  > 数据来源:访问[计划书初始化 API](http://app.winbaoxian.cn/planBook/V2/getInitData?insuranceTypeId=6128) 查看示例数据,或参考 `demo/constant.js`。
6
+ >
6
7
  > - `inputData`:`data → initData → inputData`
7
8
  > - `verifyData`:`data → verifyData`
8
9
  > - `groupKey`:`inputData → productGroupList → key`
@@ -39,33 +40,33 @@ export default {
39
40
  </template>
40
41
 
41
42
  <script>
42
- import { ProductInfo } from 'bxs-tools-ui';
43
-
44
- export default {
45
- components: { ProductInfo },
46
- methods: {
47
- cgProduct(product, options, inst) {
48
- if (options.type === 'change' && options.errorMsg) {
49
- this.$nextTick(() => {
50
- this.$toast(options.errorMsg);
51
- });
43
+ import { ProductInfo } from 'bxs-tools-ui';
44
+
45
+ export default {
46
+ components: { ProductInfo },
47
+ methods: {
48
+ cgProduct(product, options, inst) {
49
+ if (options.type === 'change' && options.errorMsg) {
50
+ this.$nextTick(() => {
51
+ this.$toast(options.errorMsg);
52
+ });
53
+ }
54
+ },
55
+ openCrmPersonPopup() {
56
+ // 打开人员信息修改浮层(含 CRM 导入功能)
57
+ },
58
+ validate() {
59
+ this.$refs.productInfo
60
+ .validate()
61
+ .then(valid => {
62
+ // 校验通过
63
+ })
64
+ .catch(err => {
65
+ console.log(err);
66
+ });
52
67
  }
53
- },
54
- openCrmPersonPopup() {
55
- // 打开人员信息修改浮层(含 CRM 导入功能)
56
- },
57
- validate() {
58
- this.$refs.productInfo
59
- .validate()
60
- .then(valid => {
61
- // 校验通过
62
- })
63
- .catch(err => {
64
- console.log(err);
65
- });
66
68
  }
67
- }
68
- };
69
+ };
69
70
  </script>
70
71
  ```
71
72
 
@@ -73,75 +74,71 @@ export default {
73
74
 
74
75
  ### Attributes
75
76
 
76
- | 参数 | 说明 | 类型 | 默认值 |
77
- | --- | --- | --- | --- |
78
- | `input-data` | 必传,计划书初始化数据 | Object | `{}` |
79
- | `group-key` | 必传,产品组的 key | Number / String | `null` |
80
- | `product-key` | 必传,产品的 key | Number / String | `null` |
81
- | `verify-data` | 可选,计划书限制条件;不传则不执行产品逻辑处理函数 | Object | `{}` |
82
- | `show-recommend-value` | 可选,是否展示保额/保费推荐值 | Boolean | `true` |
83
- | `params` | 可选,其他参数,见 Params 对象 | Object | `{}` |
84
-
77
+ | 参数 | 说明 | 类型 | 默认值 |
78
+ | ---------------------- | -------------------------------------------------- | --------------- | ------ |
79
+ | `input-data` | 必传,计划书初始化数据 | Object | `{}` |
80
+ | `group-key` | 必传,产品组的 key | Number / String | `null` |
81
+ | `product-key` | 必传,产品的 key | Number / String | `null` |
82
+ | `verify-data` | 可选,计划书限制条件;不传则不执行产品逻辑处理函数 | Object | `{}` |
83
+ | `show-recommend-value` | 可选,是否展示保额/保费推荐值 | Boolean | `true` |
84
+ | `params` | 可选,其他参数,见 Params 对象 | Object | `{}` |
85
85
 
86
86
  #### Params 对象
87
87
 
88
- | 参数 | 说明 | 类型 |
89
- | --- | --- | --- |
90
- | `planbookId` | 计划书 ID,用于产品联动逻辑 | Number |
91
- | `publicPbUuid` | 公开计划书 uuid,传入后使用 public 接口重算 | String |
92
- | `allowCustomResult` | 是否显示「自定义保费/保额」开关 | Boolean |
93
- | `insuranceSaleStatus` | 险种停售状态映射:`{ [insuranceKey]: number }`;值为 `2` 时展示「停」标签 | Object |
94
-
88
+ | 参数 | 说明 | 类型 |
89
+ | --------------------- | ------------------------------------------------------------------------- | ------- |
90
+ | `planbookId` | 计划书 ID,用于产品联动逻辑 | Number |
91
+ | `publicPbUuid` | 公开计划书 uuid,传入后使用 public 接口重算 | String |
92
+ | `allowCustomResult` | 是否显示「自定义保费/保额」开关 | Boolean |
93
+ | `insuranceSaleStatus` | 险种停售状态映射:`{ [insuranceKey]: number }`;值为 `2` 时展示「停」标签 | Object |
95
94
 
96
95
  #### ProductData 对象(inputData 中的产品结构)
97
96
 
98
- | 参数 | 说明 | 类型 |
99
- | --- | --- | --- |
100
- | `key` | 必传,产品 ID | Number |
101
- | `mulInsOrderList` | 必传,险种列表,见 MulInsOrderList 数组 | Array |
102
-
97
+ | 参数 | 说明 | 类型 |
98
+ | ----------------- | --------------------------------------- | ------ |
99
+ | `key` | 必传,产品 ID | Number |
100
+ | `mulInsOrderList` | 必传,险种列表,见 MulInsOrderList 数组 | Array |
103
101
 
104
102
  #### MulInsOrderList 数组(单项)
105
103
 
106
- | 参数 | 说明 | 类型 |
107
- | --- | --- | --- |
108
- | `key` | 必传,险种 ID | Number |
109
- | `eleOrderList` | 必传,险种内元素列表,见 EleOrderList 数组 | Array |
110
- | `code` | 险种 code | String |
111
- | `isFollowing` | 是否去除与上一险种之间的间距 | Boolean |
112
-
104
+ | 参数 | 说明 | 类型 |
105
+ | -------------- | ------------------------------------------ | ------- |
106
+ | `key` | 必传,险种 ID | Number |
107
+ | `eleOrderList` | 必传,险种内元素列表,见 EleOrderList 数组 | Array |
108
+ | `code` | 险种 code | String |
109
+ | `isFollowing` | 是否去除与上一险种之间的间距 | Boolean |
113
110
 
114
111
  #### EleOrderList 数组(单项)
115
112
 
116
- | 参数 | 说明 | 类型 |
117
- | --- | --- | --- |
118
- | `key` | 必传,元素 ID | String |
119
- | `value` | 必传,元素当前值 | String / Number |
120
- | `componentName` | 必传,对应渲染组件(`cmCommonTitle` / `cmCommonInput` / `cmCommonRadioBtn` / `cmCommonRadio` / `cmCommonSelect`) | String |
121
- | `labelName` | 必传,元素名称 | String |
122
- | `isDisabled` | 必传,是否不可修改 | Boolean |
123
- | `isHide` | 必传,是否隐藏 | Boolean |
124
- | `isIgnoreValidate` | 必传,是否忽略校验 | Boolean |
125
- | `common` | 是否为通用元素 | Boolean |
126
- | `opts` | 选项列表(`cmCommonRadioBtn` / `cmCommonRadio` / `cmCommonSelect` 适用) | Array |
127
- | `rules` | 校验规则,基于 [async-validator](https://github.com/yiminghe/async-validator#type) | Array |
128
- | `restrictions` | 当前元素的限制条件 | Array |
129
- | `placeholder` | 占位符(`cmCommonInput` 适用) | String |
113
+ | 参数 | 说明 | 类型 |
114
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------- | --------------- |
115
+ | `key` | 必传,元素 ID | String |
116
+ | `value` | 必传,元素当前值 | String / Number |
117
+ | `componentName` | 必传,对应渲染组件(`cmCommonTitle` / `cmCommonInput` / `cmCommonRadioBtn` / `cmCommonRadio` / `cmCommonSelect`) | String |
118
+ | `labelName` | 必传,元素名称 | String |
119
+ | `isDisabled` | 必传,是否不可修改 | Boolean |
120
+ | `isHide` | 必传,是否隐藏 | Boolean |
121
+ | `isIgnoreValidate` | 必传,是否忽略校验 | Boolean |
122
+ | `common` | 是否为通用元素 | Boolean |
123
+ | `opts` | 选项列表(`cmCommonRadioBtn` / `cmCommonRadio` / `cmCommonSelect` 适用) | Array |
124
+ | `rules` | 校验规则,基于 [async-validator](https://github.com/yiminghe/async-validator#type) | Array |
125
+ | `restrictions` | 当前元素的限制条件 | Array |
126
+ | `placeholder` | 占位符(`cmCommonInput` 适用) | String |
130
127
 
131
128
  ---
132
129
 
133
130
  ### Methods
134
131
 
135
- | 方法名 | 说明 | 参数 |
136
- | --- | --- | --- |
137
- | `validate` | 表单校验,通过 `$refs` 调用,返回 Promise | — |
132
+ | 方法名 | 说明 | 参数 |
133
+ | ---------- | ----------------------------------------- | ---- |
134
+ | `validate` | 表单校验,通过 `$refs` 调用,返回 Promise | — |
138
135
 
139
136
  ---
140
137
 
141
138
  ### Events
142
139
 
143
- | 事件名 | 说明 | 回调参数 |
144
- | --- | --- | --- |
145
- | `change` | 产品信息改变时触发 | `Function(product, options, inst)`;初始化时 `options` 为 `{ errorMsg }`;字段变更时 `options` 含 `{ type: 'change', insData: 险种, eleData: 元素, errorMsg }`;`inst` 为当前 Vue 实例 |
146
- | `openCrmPerson` | 点击豁免险标题提示信息时触发,用于打开人员信息修改浮层(含 CRM 导入功能);不传该监听则豁免险中不显示相关提示 | — |
147
- | `reCalculate` | 险种存在 `revalidateFlag` 且外部监听了该事件时触发,用于外部执行重算并回调通知组件 | `Function(inputData, params, resolve, reject)` |
140
+ | 事件名 | 说明 | 回调参数 |
141
+ | --------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
142
+ | `change` | 产品信息改变时触发 | `Function(product, options, inst)`;初始化时 `options` 为 `{ errorMsg }`;字段变更时 `options` 含 `{ type: 'change', insData: 险种, eleData: 元素, errorMsg }`;`inst` 为当前 Vue 实例 |
143
+ | `openCrmPerson` | 点击豁免险标题提示信息时触发,用于打开人员信息修改浮层(含 CRM 导入功能);不传该监听则豁免险中不显示相关提示 | — |
144
+ | `reCalculate` | 险种存在 `revalidateFlag` 且外部监听了该事件时触发,用于外部执行重算并回调通知组件 | `Function(inputData, params, resolve, reject)` |
@@ -1,7 +1,4 @@
1
- import Jax from '@bxs/jax';
2
- export const { isIos, isAndroid } = Jax.parseUaString();
3
-
4
- const oneDayMillisecond = 24 * 3600 * 1000;
1
+ const oneDayMillisecond = 24 * 3600 * 1000
5
2
 
6
3
  export const EXPIRE_ENUM = [
7
4
  { value: 'NEVER', name: '永久有效', millisecond: 100 * 365 * oneDayMillisecond },
@@ -10,7 +7,7 @@ export const EXPIRE_ENUM = [
10
7
  { value: '7d', name: '7天有效', millisecond: 7 * oneDayMillisecond },
11
8
  { value: '15d', name: '15天有效', millisecond: 15 * oneDayMillisecond },
12
9
  { value: '30d', name: '30天有效', millisecond: 30 * oneDayMillisecond }
13
- ];
10
+ ]
14
11
 
15
12
  export const ACTION_ENUM = [
16
13
  {
@@ -35,10 +32,8 @@ export const ACTION_ENUM = [
35
32
  },
36
33
  {
37
34
  action: 'system_share',
38
- actionName: isIos ? '隐藏分享来源' : '复制链接',
39
- actionIcon: isIos
40
- ? 'https://media.winbaoxian.com/assets-uploader/base_ss_share_widget_wechat%402x-1774342740104.png'
41
- : 'https://media.winbaoxian.com/assets-uploader/base_ss_share_widget_system_share%402x-1774344871114.png'
35
+ actionName: '系统分享',
36
+ actionIcon: 'https://media.winbaoxian.com/assets-uploader/base_ss_share_widget_system_share%402x-1774344871114.png'
42
37
  },
43
38
  {
44
39
  action: 'generatePoster',
@@ -110,6 +105,6 @@ export const ACTION_ENUM = [
110
105
  actionName: '反馈',
111
106
  actionIcon: 'https://media.winbaoxian.com/assets-uploader/base_ss_common_widget_feedback%402x(1)-1774409691136.png'
112
107
  }
113
- ];
108
+ ]
114
109
 
115
- export const SHARE_ENUM = ['wechat_friends', 'wechat_timeline', 'qq_friends', 'shareMiniProgram', 'system_share'];
110
+ export const SHARE_ENUM = ['wechat_friends', 'wechat_timeline', 'qq_friends', 'shareMiniProgram', 'system_share']
@@ -20,17 +20,17 @@
20
20
  </div>
21
21
  </template>
22
22
  <script lang="ts">
23
- import vconsole from 'vconsole';
24
- import { Toast, Button } from 'vant';
25
- import ShareSheet from '../index.vue';
26
- new vconsole();
23
+ import vconsole from 'vconsole'
24
+ import { Toast, Button } from 'vant'
25
+ import ShareSheet from '../index.vue'
26
+ new vconsole()
27
27
 
28
28
  const shareInfo = () => ({
29
29
  title: '分享面板', // 分享标题、type=2时表示视频标题
30
30
  content: '分享内容的详细描述', // 分享内容的详细描述、type=2时表示视频描述
31
31
  imgUrl: 'https://img.winbaoxian.com/static/app-zx-rule-pdf/allrule/20250325182134792.png',
32
32
  shareUrl: location.href // 要分享的链接(一般为当前页面)、type=2时表示视频 url
33
- });
33
+ })
34
34
  export default {
35
35
  components: {
36
36
  [Button.name]: Button,
@@ -61,24 +61,24 @@ export default {
61
61
  {
62
62
  action: 'wechat_timeline',
63
63
  ...shareInfo()
64
- },
64
+ }
65
65
  // {
66
66
  // action: 'qq_friends',
67
67
  // ...shareInfo()
68
68
  // },
69
- {
70
- action: 'shareMiniProgram',
71
- webPageUrl: 'https://www.winbaoxian.com/', // 兼容低版本的网页链接
72
- userName: 'gh_db166d39960f', // 小程序原始id
73
- path: '/pages/result/index?uuid=e21d73a0c20d4900a765237a4907a82b&theme=theme_pbhzczdlw&t=1', // 小程序页面路径
74
- title: '买保险优选服务', // 小程序消息title
75
- description: '小程序消息描述信息', // 小程序消息desc
76
- imageUrl: 'https://img.winbaoxian.com/static/app-zx-rule-pdf/allrule/20250325182134792.png' // 小程序消息封面图片,小于128k
77
- },
78
- {
79
- action: 'system_share',
80
- ...shareInfo()
81
- }
69
+ // {
70
+ // action: 'shareMiniProgram',
71
+ // webPageUrl: 'https://www.winbaoxian.com/', // 兼容低版本的网页链接
72
+ // userName: 'gh_db166d39960f', // 小程序原始id
73
+ // path: '/pages/result/index?uuid=e21d73a0c20d4900a765237a4907a82b&theme=theme_pbhzczdlw&t=1', // 小程序页面路径
74
+ // title: '买保险优选服务', // 小程序消息title
75
+ // description: '小程序消息描述信息', // 小程序消息desc
76
+ // imageUrl: 'https://img.winbaoxian.com/static/app-zx-rule-pdf/allrule/20250325182134792.png' // 小程序消息封面图片,小于128k
77
+ // },
78
+ // {
79
+ // action: 'system_share',
80
+ // ...shareInfo()
81
+ // }
82
82
  ],
83
83
  featureActions: [
84
84
  {
@@ -113,19 +113,19 @@ export default {
113
113
  action: 'h5_feedback'
114
114
  }
115
115
  ]
116
- };
116
+ }
117
117
  },
118
118
  created() {},
119
119
  methods: {
120
120
  onExpire(o) {
121
- console.log(o);
121
+ console.log(o)
122
122
  },
123
123
  onAction(item) {
124
124
  if (item.customActionHandler) {
125
- Toast('自定义行为');
125
+ Toast('自定义行为')
126
126
  }
127
- console.log(item);
127
+ console.log(item)
128
128
  }
129
129
  }
130
- };
130
+ }
131
131
  </script>
@@ -1,24 +1,24 @@
1
- import { cloneDeep } from 'lodash';
2
- import { EXPIRE_ENUM, SHARE_ENUM } from './constant';
1
+ import { cloneDeep } from 'lodash'
2
+ import { EXPIRE_ENUM, SHARE_ENUM } from './constant'
3
3
 
4
4
  export function getExpireTimestamp(value) {
5
- const expireItem = EXPIRE_ENUM.filter(e => !['NEVER'].includes(e.value)).find(e => e.value === value);
6
- const expireTimestamp = expireItem ? new Date().getTime() + expireItem.millisecond : null;
7
- return expireTimestamp;
5
+ const expireItem = EXPIRE_ENUM.filter(e => !['NEVER'].includes(e.value)).find(e => e.value === value)
6
+ const expireTimestamp = expireItem ? new Date().getTime() + expireItem.millisecond : null
7
+ return expireTimestamp
8
8
  }
9
9
 
10
10
  export function shareHandler(item, expireValue) {
11
- const shareItem = SHARE_ENUM.find(a => a === item.action);
12
- const newItem = cloneDeep(item);
11
+ const shareItem = SHARE_ENUM.find(a => a === item.action)
12
+ const newItem = cloneDeep(item)
13
13
  if (expireValue) {
14
- newItem.expireTimestamp = getExpireTimestamp(expireValue);
14
+ newItem.expireTimestamp = getExpireTimestamp(expireValue)
15
15
  }
16
16
  if (newItem.expireTimestamp && newItem.shareUrl) {
17
- newItem.shareUrl = newItem.shareUrl + (newItem.shareUrl.includes('?') ? '&' : '?') + 'wy_expire=' + newItem.expireTimestamp;
17
+ newItem.shareUrl = newItem.shareUrl + (newItem.shareUrl.includes('?') ? '&' : '?') + 'wy_expire=' + newItem.expireTimestamp
18
18
  }
19
19
  if (shareItem) {
20
20
  if (newItem.customActionHandler) {
21
- newItem.customActionHandler(newItem);
21
+ newItem.customActionHandler(newItem)
22
22
  } else {
23
23
  if (newItem.action === 'shareMiniProgram') {
24
24
  // https://docs.winbaoxian.cn/lib-app-webview-bridge1/#/api?id=%e8%b7%b3%e8%bd%ac-%e5%be%ae%e4%bf%a1%e5%b0%8f%e7%a8%8b%e5%ba%8f-gotonativeview-shareminiprogram
@@ -33,7 +33,7 @@ export function shareHandler(item, expireValue) {
33
33
  description: newItem.description, // 小程序消息desc
34
34
  imageUrl: newItem.imageUrl // 小程序消息封面图片,小于128k
35
35
  }
36
- });
36
+ })
37
37
  }
38
38
  } else {
39
39
  // https://docs.winbaoxian.cn/#/api?id=%e5%88%86%e4%ba%ab%e5%8a%9f%e8%83%bd-app_share
@@ -47,13 +47,13 @@ export function shareHandler(item, expireValue) {
47
47
  introduction: newItem.introduction, // 分享弹框的头部文案
48
48
  shareChannel: [newItem.action], // qq_friends wechat_timeline wechat_friends system_share(保险师6.6.0开始支持);
49
49
  type: newItem.type // 【3.11.0 支持】type=2代表分享的是视频、type=2时, 所需参数有: title、content、shareUrl、imgUrl【优先级低于小程序分享】
50
- });
50
+ })
51
51
  }
52
52
  }
53
53
  }
54
54
  }
55
55
  if (!shareItem && !newItem.customActionHandler) {
56
- console.error('未定义分享行为:', newItem.action);
56
+ console.error('未定义分享行为:', newItem.action)
57
57
  }
58
- return newItem;
58
+ return newItem
59
59
  }
@@ -0,0 +1,201 @@
1
+ @import (reference) 'variables.less';
2
+
3
+ .bxt-share-sheet {
4
+ color: #333;
5
+ background-color: transparent;
6
+
7
+ & .bxt-share-container {
8
+ position: absolute;
9
+ left: 0;
10
+ bottom: 0;
11
+ display: flex;
12
+ flex-direction: column;
13
+ justify-content: flex-end;
14
+ width: 100%;
15
+ height: 100%;
16
+ overflow: hidden;
17
+ }
18
+
19
+ & .bxt-share-image {
20
+ padding: 30px 40px;
21
+
22
+ & img {
23
+ width: 100%;
24
+ }
25
+ }
26
+
27
+ & .bxt-share-content {
28
+ background: white;
29
+ }
30
+
31
+ & .bxt-expire {
32
+ padding: 15px 15px 15px 21px;
33
+
34
+ & .bxt-title {
35
+ display: flex;
36
+
37
+ & .bxt-tx {
38
+ font-size: 14px;
39
+ font-weight: bold;
40
+ font-weight: 500;
41
+ line-height: 17px;
42
+ }
43
+
44
+ & .bxt-description {
45
+ margin-left: 18px;
46
+ font-size: 13px;
47
+ line-height: 16px;
48
+ color: #666;
49
+
50
+ & .van-icon {
51
+ font-size: 15px;
52
+ color: #b5b5b5;
53
+ vertical-align: middle;
54
+ }
55
+
56
+ & span {
57
+ margin-left: 3px;
58
+ vertical-align: middle;
59
+ }
60
+ }
61
+ }
62
+
63
+ & .van-radio-group {
64
+ margin-top: 6px;
65
+
66
+ & .van-radio {
67
+ flex: 0 0 32%;
68
+ margin-top: 12px;
69
+ margin-right: 0;
70
+
71
+ & .van-radio__icon {
72
+ font-size: 15px;
73
+ line-height: 20px;
74
+ color: var(--bxt-primary);
75
+ vertical-align: middle;
76
+ }
77
+
78
+ & .van-radio__label {
79
+ margin-left: 6px;
80
+ vertical-align: middle;
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ & .bxt-explain {
87
+ font-size: 13px;
88
+ line-height: 19px;
89
+ color: #666;
90
+ }
91
+
92
+
93
+ & .bxt-explain-title {
94
+ padding: 15px 21px;
95
+ }
96
+
97
+ & .bxt-explain-text {
98
+ padding: 12px 15px;
99
+
100
+ & .bxt-explain-text-content {
101
+ width: 100%;
102
+ display: -webkit-box;
103
+ -webkit-line-clamp: 3;
104
+ -webkit-box-orient: vertical;
105
+ overflow: hidden;
106
+ text-overflow: ellipsis;
107
+ }
108
+ }
109
+
110
+ & .bxt-explain-text--copy {
111
+ padding: 12px 15px;
112
+
113
+ & .bxt-explain-text-wrapper {
114
+ padding: 12px 15px;
115
+ background: #f5f5f5;
116
+ border-radius: 6px;
117
+ }
118
+ }
119
+
120
+ & .bxt-share {
121
+ & .bxt-share-wrapper {
122
+ display: flex;
123
+ justify-content: flex-start;
124
+ padding: 20px 15px;
125
+ overflow: auto;
126
+
127
+ &::-webkit-scrollbar {
128
+ display: none;
129
+ }
130
+
131
+ & figure {
132
+ flex: 0 0 25%;
133
+ display: flex;
134
+ flex-direction: column;
135
+ justify-content: center;
136
+ align-items: center;
137
+
138
+ & .bxt-empty-image {
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: center;
142
+ width: 50px;
143
+ height: 50px;
144
+ background: #f3f7f9;
145
+ border-radius: 50px;
146
+ overflow: hidden;
147
+
148
+ & img {
149
+ display: block;
150
+ width: 100%;
151
+ margin: 0 auto;
152
+ }
153
+ }
154
+
155
+ & figcaption {
156
+ width: 100%;
157
+ height: 15px;
158
+ margin-top: 5px;
159
+ font-size: 12px;
160
+ line-height: 15px;
161
+ white-space: nowrap;
162
+ color: #666;
163
+ text-align: center;
164
+ overflow: hidden;
165
+ text-overflow: ellipsis;
166
+ }
167
+ }
168
+ }
169
+
170
+ & .bxt-share-wrapper.more {
171
+ & figure {
172
+ flex: 0 0 23%;
173
+ }
174
+ }
175
+ }
176
+
177
+ & .bxt-fooer {
178
+ .bxt-safe-area-inset-bottom();
179
+
180
+ padding: 16px 15px;
181
+ font-size: 15px;
182
+ line-height: 18px;
183
+ text-align: center;
184
+ }
185
+
186
+ & .bxt-bottom-border {
187
+ position: relative;
188
+ overflow: hidden;
189
+ }
190
+
191
+ & .bxt-bottom-border::before {
192
+ position: absolute;
193
+ bottom: 0;
194
+ left: 15px;
195
+ width: 200%;
196
+ border-bottom: 1px solid #e5e5e5;
197
+ content: '';
198
+ transform: scale(0.5);
199
+ transform-origin: left center;
200
+ }
201
+ }