jufubao-base 1.0.56 → 1.0.61-beta1001

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 (32) hide show
  1. package/package.json +2 -2
  2. package/src/components/JfbBaseCardDetail/JfbBaseCardDetail.vue +19 -1
  3. package/src/components/JfbBaseCardDetailEntry/Api.js +58 -0
  4. package/src/components/JfbBaseCardDetailEntry/Attr.js +30 -0
  5. package/src/components/JfbBaseCardDetailEntry/JfbBaseCardDetailEntry.vue +812 -0
  6. package/src/components/JfbBaseCardDetailEntry/JfbBaseCardDetailEntryLess.less +80 -0
  7. package/src/components/JfbBaseCardDetailEntry/JfbBaseCardDetailEntryMixin.js +30 -0
  8. package/src/components/JfbBaseCardDetailEntry/Mock.js +106 -0
  9. package/src/components/JfbBaseCardDetailEntry/XdEditPwd.vue +299 -0
  10. package/src/components/JfbBaseCardDetailEntry/XdPwPay.vue +214 -0
  11. package/src/components/JfbBaseCardDisabledEntry/Api.js +12 -7
  12. package/src/components/JfbBaseCardDisabledEntry/JfbBaseCardDisabledEntry.vue +39 -12
  13. package/src/components/JfbBaseCardEntry/JfbBaseCardEntry.vue +37 -1
  14. package/src/components/JfbBaseCardInfoEntry/Api.js +71 -0
  15. package/src/components/JfbBaseCardInfoEntry/Attr.js +37 -0
  16. package/src/components/JfbBaseCardInfoEntry/JfbBaseCardInfoEntry.vue +661 -0
  17. package/src/components/JfbBaseCardInfoEntry/JfbBaseCardInfoEntryLess.less +80 -0
  18. package/src/components/JfbBaseCardInfoEntry/JfbBaseCardInfoEntryMixin.js +30 -0
  19. package/src/components/JfbBaseCardInfoEntry/Mock.js +122 -0
  20. package/src/components/JfbBaseCardMergeEntry/Api.js +61 -0
  21. package/src/components/JfbBaseCardMergeEntry/Attr.js +237 -0
  22. package/src/components/JfbBaseCardMergeEntry/JfbBaseCardMergeEntry.vue +443 -0
  23. package/src/components/JfbBaseCardMergeEntry/JfbBaseCardMergeEntryLess.less +80 -0
  24. package/src/components/JfbBaseCardMergeEntry/JfbBaseCardMergeEntryMixin.js +30 -0
  25. package/src/components/JfbBaseCardMergeEntry/Mock.js +32 -0
  26. package/src/components/JfbBaseCardShiftEntry/Api.js +51 -0
  27. package/src/components/JfbBaseCardShiftEntry/Attr.js +237 -0
  28. package/src/components/JfbBaseCardShiftEntry/JfbBaseCardShiftEntry.vue +476 -0
  29. package/src/components/JfbBaseCardShiftEntry/JfbBaseCardShiftEntryLess.less +80 -0
  30. package/src/components/JfbBaseCardShiftEntry/JfbBaseCardShiftEntryMixin.js +30 -0
  31. package/src/components/JfbBaseCardShiftEntry/Mock.js +5 -0
  32. package/src/mixins/colorCardMixins.js +1 -1
@@ -0,0 +1,443 @@
1
+ <template>
2
+ <view
3
+ class="jfb-base-card-merge-entry"
4
+ @click="handleEditxSelect"
5
+ :class="{ editx: isEditx && active }"
6
+ >
7
+ <!--#ifdef H5-->
8
+ <view
9
+ class="jfb-base-card-merge-entry__edit"
10
+ :class="{ editx: isEditx && active }"
11
+ v-if="isEditx && active"
12
+ >
13
+ <view class="jfb-base-card-merge-entry__edit-icon" @click="delEdit">删除</view>
14
+ </view>
15
+ <!-- #endif -->
16
+ <view
17
+ class="jfb-base-card-merge-entry__body"
18
+ :style="{minHeight: layoutInfo.bodyMinHeightRpx + 'rpx'}"
19
+ >
20
+ <view class="merge">
21
+ <view class="merge-item" :style="{background: themeOutStyle['color']}">
22
+ <view class="merge-item-box" :style="{backgroundImage: 'url(//img.jufubao.cn/component/card/mergbg.jpg)'}">
23
+ <view class="merge-item-title" :style="{background: themeOutStyle['color']}">
24
+ <xd-font-icon icon="iconzhuanchu"></xd-font-icon>
25
+ <view>转出的票券</view>
26
+ </view>
27
+ <view>
28
+ <xd-select
29
+ :height="66"
30
+ radius="33rpx"
31
+ :list="fromList"
32
+ :border-color="themeOutStyle['color']"
33
+ justify-content="space-between"
34
+ :color="themeOutStyle['color']"
35
+ placeholder="选择转出票券"
36
+ v-model="fromSelect"
37
+ @change="handleChangeFrom"
38
+ ></xd-select>
39
+ </view>
40
+ </view>
41
+ </view>
42
+ <view class="merge-item" :style="{background: themeInStyle['color']}">
43
+ <view class="merge-item-box" :style="{backgroundImage: `url(${themeInStyle})`}">
44
+ <view class="merge-item-title">
45
+ <xd-font-icon icon="iconzhuanru"></xd-font-icon>
46
+ <view>转入的票券</view>
47
+ </view>
48
+ <view>
49
+ <xd-select
50
+ :disabled="toList.length === 0"
51
+ :key="randomKey"
52
+ :height="66"
53
+ radius="33rpx"
54
+ :list="toList"
55
+ :border-color="themeInStyle['color']"
56
+ justify-content="space-between"
57
+ :color="themeInStyle['color']"
58
+ :placeholder="toPlaceholder"
59
+ v-model="toSelect"
60
+ ></xd-select>
61
+ </view>
62
+ </view>
63
+ </view>
64
+ </view>
65
+ <view class="code">
66
+ <view>验证码:</view>
67
+ <view>
68
+ <input v-model="valid_code" class="uni-input" placeholder="请输入验证码"/>
69
+ </view>
70
+ <view>
71
+ <view
72
+ v-if="valid_token"
73
+ class="capture"
74
+ @click="switchValidToken"
75
+ >
76
+ <image :src="validImageAPIUrl +'?image_width=180&image_height=80&token=' +valid_token"></image>
77
+ </view>
78
+ </view>
79
+ </view>
80
+ <view class="xd-notice" :style="{ color: warningColor }" v-if="content">
81
+ <xd-content-xss v-html="content"></xd-content-xss>
82
+ </view>
83
+ <view
84
+ v-if="isPreview && statusContent === true && content === '' "
85
+ class="xd-notice"
86
+ :style="{ color: dangerColor,fontSize: 24 + 'rpx' }"
87
+ >温馨提示未配置数据,因此改模块在正式环境将不显示</view>
88
+ <view class="bottom_btn-mask"></view>
89
+ <view class="bottom_btn" :style="prod_bottom">
90
+ <xd-button
91
+ :key="disabledKey"
92
+ :disabled="disabled"
93
+ @click="handleToSubmit"
94
+ width="90%"
95
+ :type="disabled ?'info': 'primary'"
96
+ >合并</xd-button>
97
+ </view>
98
+ </view>
99
+ </view>
100
+ </template>
101
+
102
+ <script>
103
+ import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
104
+ import XdForm from "@/components/XdForm/XdForm";
105
+ import XdFormItem from "@/components/XdFormItem/XdFormItem";
106
+ import XdFormSelect from "@/components/XdFormSelect/XdFormSelect";
107
+ import XdFormInput from "@/components/XdFormInput/XdFormInput";
108
+ import XdButton from "@/components/XdButton/XdButton";
109
+ import XdSelect from "@/components/XdSelect/XdSelect";
110
+ import XdContentXss from '@/components/XdContentXss/XdContentXss'
111
+ import { jfbRootExec } from "@/utils/xd.event";
112
+ import JfbBaseCardMergeEntryMixin from "./JfbBaseCardMergeEntryMixin";
113
+ import colorCardMixins from "@/mixins/colorCardMixins";
114
+ import { getContainerPropsValue } from "@/utils/xd.base";
115
+ import componentsMixins from "@/mixins/componentsMixins";
116
+ import { mapState } from "vuex";
117
+ import extsMixins from "@/mixins/extsMixins";
118
+
119
+ const Color = require('color');
120
+
121
+ export default {
122
+ name: "JfbBaseCardMerge",
123
+ components: {
124
+ XdFontIcon,
125
+ XdFormSelect,
126
+ XdForm,
127
+ XdFormItem,
128
+ XdFormInput,
129
+ XdButton,
130
+ XdContentXss,
131
+ XdSelect
132
+ },
133
+ mixins: [JfbBaseCardMergeEntryMixin, componentsMixins, extsMixins, colorCardMixins],
134
+ data() {
135
+ return {
136
+ fromList: [],
137
+ toList: [],
138
+ fromSelect: null,
139
+ toSelect: null,
140
+ randomKey: Date.now(),
141
+ valid_code:'',
142
+ valid_token: 'valid_token',
143
+
144
+
145
+ content: "",
146
+ contentBackgroundColor: '',
147
+ cardPath: '', //卡券主页
148
+
149
+ //提示文案
150
+ isPreview: false,
151
+ statusContent: false,
152
+ disabledKey: 'disabledKey',
153
+ toPlaceholder:'选择转入票券',
154
+ };
155
+ },
156
+ computed: {
157
+ ...mapState({
158
+ brandInfo: (state) => state.brandInfo,
159
+ }),
160
+
161
+ themeOutStyle(){
162
+ if(this.fromSelect === null) {
163
+ return this.getCardThemes('1');
164
+ }else {
165
+ return this.getCardThemes(this.fromSelect.name);
166
+ }
167
+ },
168
+ themeInStyle() {
169
+ if (this.toSelect === null) {
170
+ return this.getMergBg();
171
+ } else {
172
+ return this.getCardThemes(this.toSelect.name);
173
+ }
174
+ },
175
+ prod_bottom() {
176
+ return this.fixedStyle({height: 0, zIndex: 111});
177
+ },
178
+
179
+ disabled(){
180
+ this.disabledKey = Date.now();
181
+ return this.fromSelect === null || this.toSelect === null;
182
+ },
183
+ },
184
+ watch: {
185
+ container(value) {
186
+ this.init(value);
187
+ },
188
+ },
189
+ created() {
190
+ this.init(this.container);
191
+ this.isPreview = this.$configProject.isPreview;
192
+ this.switchValidToken();
193
+ this.validImageAPIUrl = this.brandInfo["api_host"] + "/common/v1/valid_code/image/show";
194
+ this.contentBackgroundColor = Color(this.warningColor).alpha(0.2).toString();
195
+ },
196
+ methods: {
197
+ onJfbLoad(options) {
198
+ this.getContent();
199
+ jfbRootExec("fromCardListEntry", {
200
+ vm: this,
201
+ data: {},
202
+ })
203
+ .then((res) => {
204
+ this.fromList = res.list.map((item) => {
205
+ return {
206
+ label: item.card_number,
207
+ value: item.card_number,
208
+ card_point: item.card_point,
209
+ name: item.card_type_name
210
+ };
211
+ });
212
+ })
213
+ .catch((err) => {
214
+ this.$xdLog.catch(err)
215
+ });
216
+ },
217
+ getContent() {
218
+ jfbRootExec("getListBaseNewsContent", {
219
+ vm: this,
220
+ data: {
221
+ page_id: this.pageAttr["page_id"], //页面ID
222
+ container_id: this.containerId, //组件ID
223
+ page_size:1
224
+ },
225
+ })
226
+ .then((res) => {
227
+ if(res && res.list && res.list.length > 0) {
228
+ this.content = res.list[0].content;
229
+ }
230
+ this.statusContent = true;
231
+ })
232
+ .catch((error) => {
233
+ this.$xdLog.catch(error)
234
+ });
235
+ },
236
+ /**
237
+ * @description 监听事件变化
238
+ * @param container {object} 业务组件对象自己
239
+ */
240
+ init(container) {
241
+ this.textColor = getContainerPropsValue(container, "content.textColor", this.warningColor);
242
+ this.cardPath = getContainerPropsValue(container, "content.cardPath", {value: ""}).value;
243
+ },
244
+
245
+ //刷新图片验证码
246
+ switchValidToken() {
247
+ this.valid_token = this.$xdUniHelper.randomChar(20);
248
+ },
249
+
250
+ handleToSubmit() {
251
+ if (!this.valid_code) {
252
+ uni.showToast({
253
+ title: "验证码不能为空!",
254
+ icon: "none",
255
+ });
256
+ return;
257
+ }
258
+
259
+ let outPrice = this.$xdUniHelper.divisionFloatNumber(this.fromSelect.card_point, 100);
260
+ let outHtml = `${this.fromSelect.value}(剩余:${outPrice})`;
261
+ let inPrice = this.$xdUniHelper.divisionFloatNumber(this.toSelect.card_point, 100);
262
+ let inHtml = `${this.toSelect.value}(剩余:${inPrice})`;
263
+ this.$xdConfirm({
264
+ title: "是否确认合并票券",
265
+ isHtml: true,
266
+ $vm: this,
267
+ content: `<div class="label-value"><div><span>转出票券:</span><span>${outHtml}</span></div><div><span>转入票券:</span><span>${inHtml}</span></div></div>`,
268
+ success: (action) => {
269
+ let params = {
270
+ from_card_number: this.fromSelect.value,
271
+ to_card_number: this.toSelect.value,
272
+ valid_code: this.valid_code,
273
+ valid_token: this.valid_token
274
+ };
275
+
276
+ if (action.confirm) {
277
+ if(this.$configProject.isPreview) return;
278
+ jfbRootExec("mergeCardEntry", { vm: this,data: params})
279
+ .then((res) => {
280
+ this.$xdAlert({content: '合卡成功!', time: 1000});
281
+ setTimeout(()=>{
282
+ this.$xdUniHelper.navigateTo({
283
+ url: this.cardPath
284
+ })
285
+ }, 2000);
286
+ })
287
+ .catch((err) => {
288
+ this.$xdLog.catch(err)
289
+ });
290
+ }
291
+ },
292
+ });
293
+ },
294
+ handleChangeFrom(select) {
295
+ this.fromSelect = select.item;
296
+ jfbRootExec("toCardListEntry", {vm: this, data: {card_number: select.item.value,},})
297
+ .then((res) => {
298
+ this.toSelect = null;
299
+ this.toPlaceholder = res.list.length === 0?'暂无转入票券,请重新选择':'选择转入票券';
300
+ this.toList = res.list.map((item) => {
301
+ return {
302
+ label: item.card_number,
303
+ value: item.card_number,
304
+ card_point: item.card_point,
305
+ name: item.card_type_name
306
+ };
307
+ });
308
+ this.randomKey = Date.now();
309
+ })
310
+ .catch((err) => {
311
+ this.$xdLog.catch(err)
312
+ });
313
+ },
314
+ onJfbUpdate(data) {
315
+ this.getContent();
316
+ },
317
+ onJfbShow(options) {
318
+ this.onJfbLoad(options);
319
+ },
320
+ },
321
+ };
322
+ </script>
323
+
324
+ <style scoped lang="less">
325
+ @import "./JfbBaseCardMergeEntryLess.less";
326
+
327
+ .xd-notice {
328
+ padding: unit(40, rpx);
329
+ }
330
+
331
+ /deep/ .is-required {
332
+ display: none;
333
+ }
334
+
335
+ /deep/ .uni-forms-item__label .label-text {
336
+ font-size: unit(28, rpx)
337
+ }
338
+
339
+ .jfb-base-card-merge-entry {
340
+ &__body {
341
+ .capture {
342
+ width: unit(160, rpx);
343
+ height: unit(70, rpx);
344
+
345
+ & >image {
346
+ width: 100%;
347
+ height: 100%;
348
+ }
349
+ }
350
+
351
+ .flex {
352
+ display: flex;
353
+ }
354
+ .align-center {
355
+ align-items: center;
356
+ }
357
+
358
+ &-btn {
359
+ padding-bottom: unit(20, rpx);
360
+ }
361
+ }
362
+ }
363
+
364
+ .merge {
365
+ padding: unit(30, rpx);
366
+ &-item {
367
+ position: relative;
368
+ border-radius: unit(16, rpx);
369
+ overflow: hidden;
370
+ margin-bottom: unit(30, rpx);
371
+
372
+ &:last-child {
373
+ margin-bottom: 0;
374
+ }
375
+
376
+ &-box {
377
+ background-size: 100%;
378
+ background-repeat: no-repeat;
379
+ background-position: top center;
380
+
381
+ & >view:nth-child(2) {
382
+ padding: unit(40, rpx);
383
+ }
384
+ }
385
+
386
+ &-title {
387
+ height: unit(50, rpx);
388
+ background: rgba(102, 102, 102, 0.4);
389
+ display: flex;
390
+ justify-content: center;
391
+ align-items: center;
392
+ color: #fff;
393
+ font-size: unit(24, rpx);
394
+
395
+ &>view:nth-child(2) {
396
+ margin-left: unit(10, rpx);
397
+ }
398
+ }
399
+
400
+
401
+ }
402
+ }
403
+
404
+ .code {
405
+ display: flex;
406
+ justify-content: space-between;
407
+ align-items: center;
408
+ padding: 0 unit(30, rpx);
409
+
410
+
411
+ & > view:first-child, &> view:last-child {
412
+ flex-shrink: 0;
413
+ font-size: unit(32, rpx);
414
+ }
415
+
416
+ & > view:nth-child(2) {
417
+ flex: 1;
418
+ margin: 0 unit(20, rpx);
419
+ & input {
420
+ font-size: unit(28, rpx);
421
+ background: #eee;
422
+ line-height: unit(70, rpx);
423
+ height: unit(70, rpx);
424
+ border-radius: unit(35, rpx);
425
+ padding: 0 unit(35, rpx);
426
+ }
427
+ }
428
+ }
429
+
430
+ .bottom_btn {
431
+ position: fixed;
432
+ width: 100%;
433
+ display: flex;
434
+ justify-content: center;
435
+ align-items: center;
436
+ height: unit(120, rpx);
437
+ background: #ffffff;
438
+
439
+ &-mask {
440
+ height: unit(120, rpx);
441
+ }
442
+ }
443
+ </style>
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @desc 获取绝对路径完整地址
3
+ * @param @path
4
+ **/
5
+ //例如:https://image.jufubao.cn/20220501010108/image/bg/default_gonghui_bg.png
6
+ @basePath: 'business/';
7
+ @doMain: '//sandbox-img.jufubao.cn/';
8
+
9
+ .getBusinessImageUrl(@path, @size: 'size8') {
10
+ @url: "@{doMain}@{basePath}@{path}?x-oss-process=style/@{size}";
11
+ background-image: url(@url);
12
+ }
13
+
14
+ //start
15
+ .jfb-base-card-merge-entry {
16
+ border: 1px dashed rgba(0, 0, 0, 0);
17
+ box-sizing: border-box;
18
+ min-height: unit(100, rpx);
19
+
20
+ &__body{
21
+ position: relative;
22
+ overflow: hidden;
23
+ z-index: 2
24
+ }
25
+
26
+ &.editx {
27
+ position: relative;
28
+ border: 1px dashed blue;
29
+ box-sizing: border-box;
30
+ z-index: 3
31
+
32
+ }
33
+
34
+ &:hover {
35
+ border: 1px dashed blue;
36
+ }
37
+
38
+ &.noBorder {
39
+ border-color: rgba(0,0,0,0);
40
+ border-width: 0;
41
+ }
42
+
43
+
44
+ &__edit {
45
+ cursor: pointer;
46
+ position: absolute;
47
+ right: unit(0, rpx);
48
+ top: unit(-52, rpx);
49
+ height: unit(50, rpx);
50
+ line-height: unit(50, rpx);
51
+ display: flex;
52
+ justify-content: center;
53
+ align-items: center;
54
+ background: rgba(0, 0, 0, .6);
55
+ border-radius: unit(10, rpx);
56
+ box-shadow: 0 0 10px rbga(0, 0, 0, 0.3);
57
+ color: #fff;
58
+ font-size: unit(22, rpx);
59
+
60
+ &-icon{
61
+ padding: 0 unit(20, rpx);
62
+ }
63
+
64
+ &.editx {
65
+ box-sizing: border-box;
66
+
67
+ }
68
+ }
69
+ }
70
+ //end
71
+
72
+
73
+ /**notPreview**/
74
+ .jfb-base-card-merge-entry {
75
+ &:before {
76
+ content: " ";
77
+ display: table;
78
+ }
79
+ }
80
+ /**endNotPreview**/
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+
4
+ //@AttrImport
5
+ import Attr from "./Attr";
6
+ //@EndAttrImport
7
+
8
+
9
+ export default {
10
+ data() {
11
+ return {
12
+ //#ifdef H5
13
+
14
+ //@AttrData
15
+ Attr:{}, //对外开发编辑属性
16
+ //@EndAttrData
17
+
18
+ // #endif
19
+ cssRoot: 'jfb-base-card-merge-entry'
20
+ }
21
+ },
22
+ created() {
23
+
24
+ //@AttrDataCreated
25
+ this.Attr = this.$xdUniHelper.customClone(Attr);
26
+ //@EndAttrDataCreated
27
+
28
+
29
+ },
30
+ }
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ fromCardListEntry : {
5
+ "list": [{
6
+ "card_number": "101001000008422",
7
+ "card_point": 100000,
8
+ "card_type_name": "聚福宝福"
9
+ }, {
10
+ "card_number": "121000100000028",
11
+ "card_point": 10000,
12
+ "card_type_name": "抵扣券测试"
13
+ }, {
14
+ "card_number": "101001000005192",
15
+ "card_point": 99995900,
16
+ "card_type_name": "聚福宝福"
17
+ }, {
18
+ "card_number": "101001000008421",
19
+ "card_point": 100000,
20
+ "card_type_name": "聚福宝福"
21
+ }, {
22
+ "card_number": "261001000002518",
23
+ "card_point": 100000,
24
+ "card_type_name": "加盟商福卡"
25
+ }, {
26
+ "card_number": "101001000007175",
27
+ "card_point": 9899544,
28
+ "card_type_name": "聚福宝福"
29
+ }, {"card_number": "261001000000344", "card_point": 100, "card_type_name": "大礼包测试"}],
30
+ "request_id": "4c836d402cbcbe80"
31
+ }
32
+ }
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @description API模型
5
+ * 建议:Ffff=>模块 Xxxx=>自定义名字
6
+ * 获取单记录(getByIdFfffXxxx)
7
+ * 获取列表记录(getByListFfffXxxx)
8
+ * 添加列表记录(addFfffXxxxx)
9
+ * 删除列表记录(removeFfffXxxxx|deleteFfffXxxx)
10
+ * 更新列表记录(updateFfffXxxxx)
11
+ * @type {*[]}
12
+ */
13
+ module.exports = [
14
+ {
15
+ mapFnName: 'changeCardBindEntry',
16
+ isRule: false,
17
+ title: '换卡',
18
+ prefix: 'change',
19
+ path: '/card/v1/card-exchange/exchange-card',
20
+ data: {
21
+ card_number: ['卡号', 'String', '必选'],
22
+ },
23
+ disabled: true,
24
+ },
25
+ {
26
+ mapFnName: 'getByIdCardDetailEntry',
27
+ isRule: false,
28
+ title: '获得绑定的卡详情',
29
+ prefix: 'detal',
30
+ path: '/card/v1/card-bind/get-bind-card',
31
+ params: {
32
+ card_number: ['卡号', 'String', '必选'],
33
+ },
34
+ disabled: true,
35
+ },
36
+ {
37
+ mapFnName: 'getListGiftNewsContentEntry', //自定义方法名字(必选)
38
+ title: '获取内容',
39
+ path: '/cms/v1/news-content',
40
+ isRule: false,
41
+ params: {
42
+ scene: ['使用场景', 'String', '选填'],
43
+ container_id: ['插件ID', 'String', '必填'],
44
+ page_id: ['页面ID', 'String', '必填'],
45
+ page_size: ['记录条数', 'Number', '必填', 1],
46
+ code: ['业务线id', 'String', '选填'],
47
+ },
48
+ isConsole: true,
49
+ disabled: true,
50
+ },
51
+ ];