e8d215ed by simon

默认提交

1 parent f9bdf0d5
1
2 # 中国平安人寿(香港) 1 # 中国平安人寿(香港)
3 2
4 --- 3 ---
...@@ -7,32 +6,51 @@ ...@@ -7,32 +6,51 @@
7 6
8 中国平安人寿(香港) 官网 7 中国平安人寿(香港) 官网
9 8
10 --- 9 ---
10
11 ## 技术选型
12
13 #### 技术框架
14
15 项目框架: vuejs
16
17 脚手架版本: vue-cli3
18
19 #### 开发环境
20
21 node 版本: 推荐 v12.10.0 或以上
22
23 npm 版本: 推荐 6.10.3 或以上
11 24
12 ## 开始使用 25 ## 开始使用
13 26
27 ---
14 28
15 #### 安装依赖 (建议使用国内镜像) 29 #### 安装依赖 (建议使用国内镜像)
30
16 ``` 31 ```
17 npm install 32 npm install
18 ``` 33 ```
19 34
20 #### 项目预览 35 #### 项目预览
36
21 ``` 37 ```
22 npm run dev 38 npm run dev
23 ``` 39 ```
24 40
25 #### 项目打包 41 #### 项目打包
42
26 ``` 43 ```
27 npm run build 44 npm run build
28 ``` 45 ```
29 46
30 #### 项目打包 -- 沙箱环境 47 #### 项目打包 -- 沙箱环境
48
31 ``` 49 ```
32 npm run sandbox 50 npm run sandbox
33 ``` 51 ```
34 52
35 --- 53 ---
36 54
37 ## 项目结构 55 ## 项目结构
38 56
...@@ -68,53 +86,63 @@ npm run sandbox ...@@ -68,53 +86,63 @@ npm run sandbox
68 86
69 ``` 87 ```
70 88
71 --- 89 ---
72
73 ## 前置说明
74
75 #### 开发环境
76
77 脚手架版本: CLI3
78
79 node版本: 推荐v12.10.0或以上
80
81 npm版本: 推荐6.10.3或以上
82
83 ---
84 90
85 ## 规范说明 91 ## 规范说明
86 92
87 #### vue文件分离 93 #### vue 文件分离
88 94
89 一般业务.vue文件通常会在同一目录下拆分为.vue,.js,.scss三个文件。 95 一般业务.vue 文件通常会在同一目录下拆分为.vue,.js,.scss 三个文件。
90 96
91 正常的创建和引用vue文件都是html、css、js三者在一起的,这样写起来虽然方便了,但是页面比较大或者代码比较多的情况下,即使使用组件有时代码也比较多,简单来说查找不变不利于编程,大的来说影像优化性能。将代码中的html、css、js分离出来是个很好的选择。 97 正常的创建和引用 vue 文件都是 html、css、js 三者在一起的,这样写起来虽然方便了,但是页面比较大或者代码比较多的情况下,即使使用组件有时代码也比较多,简单来说查找不变不利于编程,大的来说影像优化性能。将代码中的 html、css、js 分离出来是个很好的选择。
92 98
93 #### 编码规范 99 #### 编码规范
94 100
95 本项目不使用eslint代码检查工具。 101 本项目不使用 eslint 代码检查工具。
96 102
97 开发人员需遵循vue官方风格规范。 103 开发人员需遵循 vue 官方风格规范。
98 104
99 #### 样式规范 105 #### 样式规范
100 106
101 - 优先使用 _var.scss 声明的样式变量 107 - 优先使用 \_var.scss 声明的样式变量
102 - font-family 名字顺序 Arial -> Microsoft YaHei 108 - font-family 名字顺序 Arial -> Microsoft YaHei
103 109
104 #### z-index权重划分 110 #### z-index 权重划分
105 111
106 - 遮罩蒙层:5000 112 - 遮罩蒙层:5000
107 - 导航栏:3000 113 - 导航栏:3000
108 - element-ui:2000+ 114 - element-ui:2000+
109 - 自定义交互组件 如date-picker: 800-900 115 - 自定义交互组件 如 date-picker: 800-900
110 - 一般业务级:小于100 116 - 一般业务级:小于 100
111 117
112 #### 响应式方案 118 #### 响应式方案
113 119
114 通过purecss+@media方式实现。 120 通过 purecss+@media 方式实现。
115 121
116 选取原因: 122 选取原因:
117 - 与bootstrap相比,purecss要轻量得多 123
124 - 与 bootstrap 相比,purecss 更为轻量。
125
126 ## 前后端数据交互
127
128 #### 简述
129
130 为了实现前后端分离,前后端需要约定一套数据交互规范。后续前后端数据接口的输入输出需要按照本文档执行。
131
132 #### 数据格式
133
134 数据格式: json
135
136 跨域处理使用跨域资源共享(Cross-Origin Resource Sharing)方式,允许跨域的接口需要在返回头中输出相应的 header。
137
138 #### 数据接口输出
139
140 | 字段 | 数据类型 | 必要 | 参说明 |
141 | ------- | -------- | ---- | --------------------------------------- |
142 | success | Boolean | Y | 是否请求成功(true:成功,false:失败) |
143 | errMsg | Integer | N | 请求失败原因 |
144 | code | String | Y | 请求失败错误代码 |
145 | content | Object | N | 业务返回具体参数 |
118 146
119 #### 数据加密 147 #### 数据加密
120 148
...@@ -122,7 +150,7 @@ npm版本: 推荐6.10.3或以上 ...@@ -122,7 +150,7 @@ npm版本: 推荐6.10.3或以上
122 150
123 加密方案:AES+RSA 151 加密方案:AES+RSA
124 152
125 --- 153 ---
126 154
127 ## 国际化支持说明 155 ## 国际化支持说明
128 156
...@@ -130,8 +158,7 @@ npm版本: 推荐6.10.3或以上 ...@@ -130,8 +158,7 @@ npm版本: 推荐6.10.3或以上
130 158
131 采用方案:[i18n](https://github.com/kazupon/vue-i18n) 159 采用方案:[i18n](https://github.com/kazupon/vue-i18n)
132 160
133 在文件入口main.js注入i18n 161 在文件入口 main.js 注入 i18n
134
135 162
136 #### 三语支持(默认繁体): 163 #### 三语支持(默认繁体):
137 164
...@@ -141,17 +168,14 @@ npm版本: 推荐6.10.3或以上 ...@@ -141,17 +168,14 @@ npm版本: 推荐6.10.3或以上
141 168
142 三语文件所在目录: 169 三语文件所在目录:
143 170
144
145 #### 执行逻辑 171 #### 执行逻辑
146 172
147 访问页面时,会先从localStorage里获取历史选取语言,若活动结果为空,则默认使用繁体。 173 访问页面时,会先从 localStorage 里获取历史选取语言,若活动结果为空,则默认使用繁体。
148
149
150 174
151 语言切换时,把当前选择语言注入到i18n并埋到localStorage,同时广播事件,通知页面初始化(重新读取cms内容)。 175 语言切换时,把当前选择语言注入到 i18n 并埋到 localStorage,同时广播事件,通知页面初始化(重新读取 cms 内容)。
152 176
153 --- 177 ---
154 178
155 ## TODO 179 ## TODO
156 180
157 - [x] 项目后期需补充 SEO优化插件 PrerenderSPAPlugin 181 - [x] 项目后期需补充 SEO 优化插件 PrerenderSPAPlugin
......
1 /**
2 * 组件描述: 用户登陆提示
3 * 其中包含
4 * 1.用户登陆提示
5 * 2.五项基本信息验证
6 */
7
1 import { 8 import {
2 mapState 9 mapState
3 } from 'vuex'; 10 } from 'vuex';
4 11
5 export default { 12 export default {
6 props: { 13 props: {
7 // 模型;auth、suggest 14 // 模型;auth、suggest
8 model: { 15 model: {
9 type: String, 16 type: String,
10 default: "auth" 17 default: "auth"
11 }, 18 },
12 checkProfile: { 19 checkProfile: {
13 type: Boolean, 20 type: Boolean,
14 default: false 21 default: false
15 }, 22 },
16 // m1 、m2、m3 23 // m1 、m2、m3
17 tipModel: { 24 tipModel: {
18 type: String, 25 type: String,
19 default: "m3" 26 default: "m3"
20 } 27 }
21 }, 28 },
22 data() { 29 data() {
23 return { 30 return {
24 key: 'value', 31 key: 'value',
25 showProfileInfo: false, 32 showProfileInfo: false,
26 showUnAuth: false, 33 showUnAuth: false,
27 showSuggest: true, 34 showSuggest: true,
28 tips: { 35 tips: {
29 36
30 } 37 }
31 } 38 }
32 }, 39 },
33 components: {}, 40 components: {},
34 computed: { 41 computed: {
35 ...mapState({ 42 ...mapState({
36 userInfo: state => state.userInfo 43 userInfo: state => state.userInfo
37 }), 44 }),
38 locale() { 45 locale() {
39 return this.$i18n.locale || 'tc'; 46 return this.$i18n.locale || 'tc';
40 }, 47 },
41 i18n() { 48 i18n() {
42 return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; 49 return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};
43 }, 50 },
44 showPanel() { 51 // 如果 用户未登陆 或者 五项基本信息未验证
45 let b1 = this.model == "auth" && (this.showProfileInfo || this.showUnAuth); 52 showPanel() {
46 let b2 = this.model == "suggest" && this.showSuggest; 53 let b1 = this.model == "auth" && (this.showProfileInfo || this.showUnAuth);
47 return b1 || b2; 54 let b2 = this.model == "suggest" && this.showSuggest;
48 } 55 return b1 || b2;
49 }, 56 }
50 methods: { 57 },
51 initData() { 58 methods: {
52 this.tips = this.i18n.customService.unauth[this.tipModel]; 59 // 检测用户状态,触发用户登陆/登出
53 if (this.userInfo && this.userInfo.name) { 60 initData() {
54 this.loginAction(); 61 this.tips = this.i18n.customService.unauth[this.tipModel];
55 } else { 62 if (this.userInfo && this.userInfo.name) {
56 this.logoutAction(); 63 this.loginAction();
57 } 64 } else {
58 }, 65 this.logoutAction();
59 loginAction() { 66 }
60 this.showUnAuth = false; 67 },
61 if (this.checkProfile) { 68 loginAction() {
62 if (this.userInfo.hadFullInfo == 1) { 69 this.showUnAuth = false;
63 this.$emit("onLogin", this.userInfo); 70 if (this.checkProfile) {
64 } else { 71 if (this.userInfo.hadFullInfo == 1) {
65 this.showProfileInfo = true; 72 this.$emit("onLogin", this.userInfo);
66 } 73 } else {
67 } else { 74 this.showProfileInfo = true;
68 this.$emit("onLogin", this.userInfo); 75 }
69 } 76 } else {
70 }, 77 this.$emit("onLogin", this.userInfo);
71 logoutAction() { 78 }
72 this.showUnAuth = true; 79 },
73 this.showProfileInfo = false; 80 logoutAction() {
74 this.$emit("onLogout", {}); 81 this.showUnAuth = true;
75 }, 82 this.showProfileInfo = false;
76 gotoLoginPage() { 83 this.$emit("onLogout", {});
77 let callback = this.$route.path; 84 },
78 let separator = "?"; 85 // 前往登陆(带重定向)
79 for (let key in this.$route.query) { 86 gotoLoginPage() {
80 callback += separator + key + "=" + this.$route.query[key]; 87 let callback = this.$route.path;
81 separator = "&"; 88 let separator = "?";
82 } 89 for (let key in this.$route.query) {
83 this.$router.push({ path: "/login?callback=" + callback }); 90 callback += separator + key + "=" + this.$route.query[key];
84 }, 91 separator = "&";
85 gotoRegisterPage() { 92 }
86 this.$router.push({ path: "/register" }); 93 this.$router.push({
87 }, 94 path: "/login?callback=" + callback
88 gotoInformationPage() { 95 });
89 let c = this.$route.fullPath; 96 },
90 this.$router.push({ path: "/infomation/improve", query: { c: c, a: 1 } }); 97 // 前往注册页面
91 }, 98 gotoRegisterPage() {
92 noAuth() { 99 this.$router.push({
93 this.$store.commit("SET_USER_INFO", null); 100 path: "/register"
94 this.initData(); 101 });
95 this.$emit("onLogout", {}); 102 },
96 } 103 gotoInformationPage() {
97 }, 104 let c = this.$route.fullPath;
98 mounted() { 105 this.$router.push({
99 this.initData(); 106 path: "/infomation/improve",
100 }, 107 query: {
101 created() { 108 c: c,
109 a: 1
110 }
111 });
112 },
113 noAuth() {
114 this.$store.commit("SET_USER_INFO", null);
115 this.initData();
116 this.$emit("onLogout", {});
117 }
118 },
119 mounted() {
120 this.initData();
121 },
122 created() {
102 this.$root.eventBus.$on("langChange", () => { 123 this.$root.eventBus.$on("langChange", () => {
103 try { 124 try {
104 this.tips = this.i18n.customService.unauth[this.tipModel]; 125 this.tips = this.i18n.customService.unauth[this.tipModel];
105 } catch (e) { } 126 } catch (e) {}
106 }); 127 });
107 }, 128 },
108 watch: { 129 watch: {
109 userInfo(val) { 130 userInfo(val) {
110 if (val && val.name) { 131 if (val && val.name) {
111 this.loginAction(); 132 this.loginAction();
112 } else { 133 } else {
113 this.logoutAction(); 134 this.logoutAction();
114 } 135 }
115 } 136 }
116 }, 137 },
117 } 138 }
......
1 <template> 1 <template>
2 <div v-if="showPanel"> 2 <div v-if="showPanel">
3 <div v-if="showUnAuth"> 3 <!-- 登陆提示 -->
4 <div class="alert"> 4 <div v-if="showUnAuth">
5 <img class="icon" src="@/assets/images/common/icon-alert-i.png" alt=""> 5 <div class="alert">
6 <div class="txt"> 6 <img class="icon" src="@/assets/images/common/icon-alert-i.png" alt="">
7 {{tips.tit}} 7 <div class="txt">
8 <span class="pointer btn" @click="gotoLoginPage">{{$t('customService.unauth.login')}}</span> 8 {{tips.tit}}
9 {{tips.or}} 9 <span class="pointer btn" @click="gotoLoginPage">{{$t('customService.unauth.login')}}</span>
10 <span class="pointer btn" @click="gotoRegisterPage">{{$t('customService.unauth.register')}}</span> 10 {{tips.or}}
11 {{tips.tail}} 11 <span class="pointer btn" @click="gotoRegisterPage">{{$t('customService.unauth.register')}}</span>
12 </div> 12 {{tips.tail}}
13 </div>
13 14
14 <img v-if="model=='suggest'" class="pointer close" src="@/assets/images/common/icon-alert-close.png" alt="" @click="showSuggest = false"> 15 <img v-if="model=='suggest'" class="pointer close" src="@/assets/images/common/icon-alert-close.png" alt="" @click="showSuggest = false">
15 </div> 16 </div>
16 </div> 17 </div>
18 <!-- 五项基本信息验证提示 -->
19 <div v-if="showProfileInfo">
20 <div class="alert">
21 <img class="icon" src="@/assets/images/common/icon-alert-i.png" alt="">
22 <div class="txt">
23 {{$t('customService.unauth.baseInfoTip')}}&nbsp;
24 <span class="pointer btn" @click="gotoInformationPage">{{$t('customService.unauth.infoBtn')}}</span>
25 &nbsp;{{$t('customService.unauth.baseInfoTail')}}
26 </div>
17 27
18 <div v-if="showProfileInfo"> 28 <!-- <img class="pointer close" src="@/assets/images/common/icon-alert-close.png" alt=""> -->
19 <div class="alert"> 29 </div>
20 <img class="icon" src="@/assets/images/common/icon-alert-i.png" alt=""> 30 </div>
21 <div class="txt"> 31 <div class="empty-line" v-if="model!='suggest'"></div>
22 {{$t('customService.unauth.baseInfoTip')}}&nbsp; 32 </div>
23 <span class="pointer btn" @click="gotoInformationPage">{{$t('customService.unauth.infoBtn')}}</span>
24 &nbsp;{{$t('customService.unauth.baseInfoTail')}}
25 </div>
26
27 <!-- <img class="pointer close" src="@/assets/images/common/icon-alert-close.png" alt=""> -->
28 </div>
29 </div>
30 <div class="empty-line" v-if="model!='suggest'"></div>
31 </div>
32 </template> 33 </template>
33 34
34 <script src="./auth.js"></script> 35 <script src="./auth.js"></script>
......
1 1 /**
2 * 组件描述:理赔申请模态窗
3 * 主要用于不在保险范围内的提示
4 */
2 5
3 export default { 6 export default {
4 7
5 props: { 8 props: {
6 // 是否显示组件 9 // 是否显示组件
7 // 1、顯示事故類型;2、顯示時間 10 // 1、顯示事故類型;2、顯示時間
8 type: { 11 type: {
9 type: Number, 12 type: Number,
10 default: 2 13 default: 2
11 }, 14 },
12 }, 15 },
13 data() { 16 data() {
14 return { 17 return {
15 18 }
16 } 19 },
17 }, 20 components: {},
18 components: {}, 21 computed: {
19 computed: { 22 locale() {
20 locale() { 23 return this.$i18n.locale || 'tc';
21 return this.$i18n.locale || 'tc'; 24 },
22 }, 25 },
23 }, 26 methods: {
24 methods: { 27 initData() {
25 initData() {
26 28
27 }, 29 },
28 onOverLayHandler() { 30 onOverLayHandler() {
29 this.$emit("close"); 31 this.$emit("close");
30 }, 32 },
31 toContact() { 33 toContact() {
32 this.$emit("toContact"); 34 this.$emit("toContact");
33 this.$router.push({ 35 this.$router.push({
34 path: "/custom/service?q=m1" 36 path: "/custom/service?q=m1"
35 }); 37 });
36 } 38 }
37 }, 39 },
38 mounted() { 40 mounted() {
39 41
40 }, 42 },
41 created() { 43 created() {
42 this.initData(); 44 this.initData();
43 }, 45 },
44 watch: { 46 watch: {},
45 },
46 } 47 }
......
1 /**
2 * 组件描述:理赔申请模态窗
3 * 主要用于不在保险范围内的提示
4 */
5
1 export default { 6 export default {
2 data() { 7 data() {
3 return { 8 return {
......
1 /**
2 * 组件描述:申请索偿上传图片
3 */
4
1 import api from '@/api/api' 5 import api from '@/api/api'
2 import { 6 import {
3 httpGet, 7 httpGet,
...@@ -17,7 +21,7 @@ export default { ...@@ -17,7 +21,7 @@ export default {
17 // 是否显示组件 21 // 是否显示组件
18 options: { 22 options: {
19 type: Object, 23 type: Object,
20 default() { 24 default () {
21 return { 25 return {
22 // 名称 26 // 名称
23 name: "", 27 name: "",
...@@ -70,6 +74,7 @@ export default { ...@@ -70,6 +74,7 @@ export default {
70 }, 74 },
71 }, 75 },
72 methods: { 76 methods: {
77 // 初始化缓存
73 initData() { 78 initData() {
74 for (let index = 0; index < sessionStorage.length; index++) { 79 for (let index = 0; index < sessionStorage.length; index++) {
75 let key = sessionStorage.key(index); 80 let key = sessionStorage.key(index);
...@@ -87,10 +92,13 @@ export default { ...@@ -87,10 +92,13 @@ export default {
87 } 92 }
88 this.uploadFiles = this.images.length; 93 this.uploadFiles = this.images.length;
89 }, 94 },
95 // 缓存数据
90 cacheData() { 96 cacheData() {
91 for (let index = 0; index < this.images.length; index++) { 97 for (let index = 0; index < this.images.length; index++) {
92 let tmp = this.images[index]; 98 let tmp = this.images[index];
93 if (tmp.showMask || !tmp.cacheKey) { continue; } 99 if (tmp.showMask || !tmp.cacheKey) {
100 continue;
101 }
94 102
95 let key = "clarmImage." + this.options.imageTypeID + "." + index; 103 let key = "clarmImage." + this.options.imageTypeID + "." + index;
96 sessionStorage.setItem(key, JSON.stringify({ 104 sessionStorage.setItem(key, JSON.stringify({
...@@ -100,6 +108,7 @@ export default { ...@@ -100,6 +108,7 @@ export default {
100 })); 108 }));
101 } 109 }
102 }, 110 },
111 // 清除缓存
103 clearCache() { 112 clearCache() {
104 for (let index = 0; index < sessionStorage.length; index++) { 113 for (let index = 0; index < sessionStorage.length; index++) {
105 let key = sessionStorage.key(index); 114 let key = sessionStorage.key(index);
...@@ -110,6 +119,7 @@ export default { ...@@ -110,6 +119,7 @@ export default {
110 this.uploadFiles = 0; 119 this.uploadFiles = 0;
111 this.images = []; 120 this.images = [];
112 }, 121 },
122 // 选择多文件
113 selectMutilFile() { 123 selectMutilFile() {
114 if (this.uploading) { 124 if (this.uploading) {
115 return; 125 return;
...@@ -220,6 +230,7 @@ export default { ...@@ -220,6 +230,7 @@ export default {
220 this.$set(this, "images", images); 230 this.$set(this, "images", images);
221 this.refreshUploadNumber(); 231 this.refreshUploadNumber();
222 }, 232 },
233 // 生成随机AESKey
223 randomAesKey() { 234 randomAesKey() {
224 let chars = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z".split(","); 235 let chars = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z".split(",");
225 let res = ""; 236 let res = "";
...@@ -229,6 +240,7 @@ export default { ...@@ -229,6 +240,7 @@ export default {
229 } 240 }
230 return res; 241 return res;
231 }, 242 },
243 // 向父组件发送图片结果
232 emitResult() { 244 emitResult() {
233 if (this.images.length == 0) { 245 if (this.images.length == 0) {
234 let result = { 246 let result = {
...@@ -272,6 +284,7 @@ export default { ...@@ -272,6 +284,7 @@ export default {
272 onShowTipsOutHandler(event) { 284 onShowTipsOutHandler(event) {
273 this.tipsVisible = false; 285 this.tipsVisible = false;
274 }, 286 },
287 // 压缩图片
275 compressImage(src, callback) { 288 compressImage(src, callback) {
276 var img = new Image(); 289 var img = new Image();
277 img.src = src; 290 img.src = src;
...@@ -283,7 +296,7 @@ export default { ...@@ -283,7 +296,7 @@ export default {
283 scale = w / h; 296 scale = w / h;
284 w = w < 50 ? w : 50; 297 w = w < 50 ? w : 50;
285 h = (w / scale); 298 h = (w / scale);
286 var quality = 0.7; // 默认图片质量为0.7 299 var quality = 0.7; // 默认图片质量为0.7
287 //生成canvas 300 //生成canvas
288 var canvas = document.createElement('canvas'); 301 var canvas = document.createElement('canvas');
289 var ctx = canvas.getContext('2d'); 302 var ctx = canvas.getContext('2d');
...@@ -302,9 +315,6 @@ export default { ...@@ -302,9 +315,6 @@ export default {
302 callback(base64); 315 callback(base64);
303 } 316 }
304 }, 317 },
305 datePickCompleteHandler() {
306
307 }
308 }, 318 },
309 watch: { 319 watch: {
310 320
...@@ -312,5 +322,5 @@ export default { ...@@ -312,5 +322,5 @@ export default {
312 mounted() { 322 mounted() {
313 this.initData(); 323 this.initData();
314 }, 324 },
315 created() { } 325 created() {}
316 } 326 }
......
1 import { mapState } from "vuex"; 1 /**
2 * 组件描述:申请索偿申请组件
3 */
4
5
6 import {
7 mapState
8 } from "vuex";
2 import api from '@/api/api' 9 import api from '@/api/api'
3 import { 10 import {
4 httpGet, 11 httpGet,
5 httpPost, 12 httpPost,
6 formdata 13 formdata
7 } from '@/api/fetch-api.js' 14 } from '@/api/fetch-api.js'
8 15
9 import { getPolicyIdTypeList } from '@/utils/biz.js'; 16 import {
17 getPolicyIdTypeList
18 } from '@/utils/biz.js';
10 import Vue from 'vue'; 19 import Vue from 'vue';
11 import DatePicker from '@/components/date-picker/date-picker.vue'; 20 import DatePicker from '@/components/date-picker/date-picker.vue';
12 import { Loading } from 'vant'; 21 import {
13 import { Select, Option } from 'element-ui'; 22 Loading
23 } from 'vant';
24 import {
25 Select,
26 Option
27 } from 'element-ui';
14 28
15 import { ddMMyyyy2yyyyMMdd } from '@utils/utils.js'; 29 import {
30 ddMMyyyy2yyyyMMdd
31 } from '@utils/utils.js';
16 32
17 Vue.use(Select); 33 Vue.use(Select);
18 Vue.use(Option); 34 Vue.use(Option);
19 Vue.use(Loading); 35 Vue.use(Loading);
20 36
21 export default { 37 export default {
22 data() { 38 data() {
23 return { 39 return {
24 birthdayIllegal: false, 40 birthdayIllegal: false,
25 loading: false, 41 loading: false,
26 showTips: false, 42 showTips: false,
27 data: { 43 data: {
28 // firstName: "珊珊", 44 // firstName: "珊珊",
29 // lastName: "王", 45 // lastName: "王",
30 // birthDate: "01-01-2000", 46 // birthDate: "01-01-2000",
31 // idNo: "84555455", 47 // idNo: "84555455",
32 // idType: "40" 48 // idType: "40"
33 49
34 firstName: "", 50 firstName: "",
35 lastName: "", 51 lastName: "",
36 birthDate: "", 52 birthDate: "",
37 idNo: "", 53 idNo: "",
38 idType: "" 54 idType: ""
39 } 55 }
40 } 56 }
41 }, 57 },
42 components: { 58 components: {
43 DatePicker 59 DatePicker
44 }, 60 },
45 computed: { 61 computed: {
46 ...mapState({ 62 ...mapState({
47 userInfo: state => state.userInfo, 63 userInfo: state => state.userInfo,
48 policyList: state => state.policyList 64 policyList: state => state.policyList
49 }), 65 }),
50 i18n() { 66 i18n() {
51 return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; 67 return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};
52 }, 68 },
53 policyIdTypeList() { 69 policyIdTypeList() {
54 return getPolicyIdTypeList(this.$i18n.locale); 70 return getPolicyIdTypeList(this.$i18n.locale);
55 }, 71 },
56 btnDisabled() { 72 btnDisabled() {
57 let b1 = this.data.firstName ? false : true; 73 let b1 = this.data.firstName ? false : true;
58 let b2 = this.data.lastName ? false : true; 74 let b2 = this.data.lastName ? false : true;
59 let b3 = this.data.birthDate ? false : true; 75 let b3 = this.data.birthDate ? false : true;
60 let b4 = this.data.idType ? false : true; 76 let b4 = this.data.idType ? false : true;
61 let b5 = this.data.idNo ? false : true; 77 let b5 = this.data.idNo ? false : true;
62 let b6 = this.birthdayIllegal; 78 let b6 = this.birthdayIllegal;
63 return b1 || b2 || b3 || b4 || b5 || b6; 79 return b1 || b2 || b3 || b4 || b5 || b6;
64 } 80 }
65 }, 81 },
66 methods: { 82 methods: {
67 initData() { 83 initData() {
68 let dStr = sessionStorage.getItem("clarmsCheckForm"); 84 let dStr = sessionStorage.getItem("clarmsCheckForm");
69 sessionStorage.removeItem("clarmsCheckForm"); 85 sessionStorage.removeItem("clarmsCheckForm");
70 if (dStr) { 86 if (dStr) {
71 try { 87 try {
72 let d = JSON.parse(dStr); 88 let d = JSON.parse(dStr);
73 this.data = d; 89 this.data = d;
74 } catch (e) { 90 } catch (e) {
75 91
76 } 92 }
77 } 93 }
78 }, 94 },
79 cacheData() { 95 cacheData() {
80 let d = JSON.stringify(this.data); 96 let d = JSON.stringify(this.data);
81 sessionStorage.setItem("clarmsCheckForm", d); 97 sessionStorage.setItem("clarmsCheckForm", d);
82 }, 98 },
83 checkDate(data) { 99 checkDate(data) {
84 this.birthdayIllegal = data.disable; 100 this.birthdayIllegal = data.disable;
85 }, 101 },
86 toRegisterPage() { 102 toRegisterPage() {
87 this.$router.push({ 103 this.$router.push({
88 path: "/register" 104 path: "/register"
89 }); 105 });
90 }, 106 },
91 toLoginPage() { 107 toLoginPage() {
92 this.$router.push({ 108 this.$router.push({
93 path: "/login" 109 path: "/login"
94 }); 110 });
95 }, 111 },
96 toContactUs() { 112 toContactUs() {
97 this.cacheData(); 113 this.cacheData();
98 this.$router.push({ 114 this.$router.push({
99 path: "/custom/service?q=m1" 115 path: "/custom/service?q=m1"
100 }); 116 });
101 }, 117 },
102 handleConfirm() { 118 // 提交申请
103 if (this.btnDisabled) { 119 handleConfirm() {
104 return; 120 if (this.btnDisabled) {
105 } 121 return;
106 if (this.loading) { 122 }
107 return; 123 if (this.loading) {
108 } 124 return;
109 this.loading = true; 125 }
110 let param = JSON.parse(JSON.stringify(this.data)); 126 this.loading = true;
111 param.birthDate = ddMMyyyy2yyyyMMdd(param.birthDate); 127 let param = JSON.parse(JSON.stringify(this.data));
112 console.log(param); 128 param.birthDate = ddMMyyyy2yyyyMMdd(param.birthDate);
113 httpPost({ url: api.getCidByVerify, data: param }).then(res => { 129 console.log(param);
114 if (res) { 130 httpPost({
115 let cid = res; 131 url: api.getCidByVerify,
116 httpPost({ url: api.clarmsCustomerList, data: { cid: cid } }).then(res => { 132 data: param
117 this.loading = false; 133 }).then(res => {
118 if (res && res.insuredInfoList && res.insuredInfoList.length > 0) { 134 if (res) {
119 this.$emit("insuredInfoList", { cid: cid, list: res.insuredInfoList }); 135 let cid = res;
120 } else { 136 httpPost({
121 this.showTips = true; 137 url: api.clarmsCustomerList,
122 } 138 data: {
123 }).catch(e => { 139 cid: cid
124 this.loading = false; 140 }
125 this.showTips = true; 141 }).then(res => {
126 }); 142 this.loading = false;
127 } else { 143 if (res && res.insuredInfoList && res.insuredInfoList.length > 0) {
128 this.loading = false; 144 this.$emit("insuredInfoList", {
129 this.showTips = true; 145 cid: cid,
130 } 146 list: res.insuredInfoList
131 }).catch(e => { 147 });
132 this.loading = false; 148 } else {
133 }); 149 this.showTips = true;
134 } 150 }
135 }, 151 }).catch(e => {
136 watch: { 152 this.loading = false;
137 'data.firstName': function () { 153 this.showTips = true;
138 this.showTips = false; 154 });
139 }, 155 } else {
140 'data.lastName': function () { 156 this.loading = false;
141 this.showTips = false; 157 this.showTips = true;
142 }, 158 }
143 'data.birthDate': function () { 159 }).catch(e => {
144 this.showTips = false; 160 this.loading = false;
145 }, 161 });
146 'data.idNo': function () { 162 }
147 this.showTips = false; 163 },
148 }, 164 watch: {
149 'data.idType': function () { 165 'data.firstName': function () {
150 this.showTips = false; 166 this.showTips = false;
151 }, 167 },
152 }, 168 'data.lastName': function () {
153 mounted() { 169 this.showTips = false;
154 this.initData(); 170 },
155 }, 171 'data.birthDate': function () {
156 created() { } 172 this.showTips = false;
173 },
174 'data.idNo': function () {
175 this.showTips = false;
176 },
177 'data.idType': function () {
178 this.showTips = false;
179 },
180 },
181 mounted() {
182 this.initData();
183 },
184 created() {}
157 } 185 }
......
1 /**
2 * 页面描述:理赔页面
3 *
4 */
5
1 import { 6 import {
2 mapGetters, 7 mapGetters,
3 mapActions, 8 mapActions,
...@@ -196,5 +201,5 @@ export default { ...@@ -196,5 +201,5 @@ export default {
196 this.initData(); 201 this.initData();
197 202
198 }, 203 },
199 created() { } 204 created() {}
200 } 205 }
......