邪性 3 жил өмнө
parent
commit
4defcc1e53

+ 4 - 25
app.json

@@ -1,36 +1,13 @@
 {
   "pages":[
     "pages/index/index",
+    "pages/detail/index",
     "pages/template/index",
     "pages/add/index",
     "pages/try/index",
     "pages/login/index",
     "pages/accessory/index"
   ],
-  "tabBar": {
-    "list": [{
-      "pagePath": "pages/index/index",
-      "text": "首页",
-      "iconPath": "./assets/tabber/menu.png",
-      "selectedIconPath": "./assets/tabber/menu_copy.png"
-    },
-    {
-     "pagePath": "pages/add/index",
-     "text":"新增填报",
-     "iconPath": "./assets/tabber/add.png",
-     "selectedIconPath": "./assets/tabber/add_copy.png"
-    },
-    {
-      "pagePath": "pages/login/index",
-      "text":"我的",
-      "iconPath": "./assets/tabber/my.png",
-      "selectedIconPath": "./assets/tabber/my_copy.png"
-    }
-  ],
-  "color": "#fff",
-  "selectedColor": "#1296db",
-  "backgroundColor": "#333"
-  },
   "window":{
     "backgroundTextStyle":"light",
     "navigationBarBackgroundColor": "#fff",
@@ -39,7 +16,9 @@
     "navigationStyle": "custom"
   },
   "usingComponents": {
-    "cu-custom": "/colorui/components/cu-custom"
+    "cu-custom": "/colorui/components/cu-custom",
+    "van-dialog": "@vant/weapp/dialog/index",
+    "van-empty": "@vant/weapp/empty/index"
   },
   "sitemapLocation": "sitemap.json"
 }

BIN
assets/tabber/add_copy1.png


BIN
assets/tabber/menu_copy1.png


BIN
assets/tabber/my_copy1.png


+ 102 - 37
components/template/config.js

@@ -11,8 +11,8 @@ const value = [
     { name: "upkeep", norequire: true, title: "保养", type: 'number', _type: "number", value: '', },
     { name: "dpratio", disabled: true, title: "首付比例", type: 'number', _type: "digit", reg: /^\d{0,2}\.\d{1,}$/, value: '' },
     { name: "lamount", title: "申请贷款金额", type: 'number', _type: "number", value: '' },
-    { name: "maturity", title: "申请贷款期限", disabled: true, type: "number", value: '' },
-    { name: "laompany", type: "switch", title: "申请贷款产品", value: '' }
+    { name: "laompany", type: "switch", title: "申请贷款产品", value: '' },
+    { name: "maturity", title: "申请贷款期限", disabled: true, type: "number", value: '' }
   ],
   // 申请人基本信息
   [
@@ -20,7 +20,7 @@ const value = [
     // 0女 1男 
     { name: "sex", type: "switch", title: "性别", value: '' },
     //yyyy-mm-dd
-    { name: "bdate", type: "picker", title: "出生日期", reg: /^\d{4}-\d{2}-\d{2}$/, value: '1900-01-01' },
+    { name: "bdate", type: "picker", title: "出生日期", reg: /^\d{4}-\d{2}-\d{2}$/, value: '2000-01-01' },
     // 0本地户口 1 外地户口
     { name: "rpr", title: "户口", type: 'switch', value: '' },
     //0中国大陆(内地)1中国香港 2中国台湾 3中国澳门 4外国籍
@@ -71,7 +71,7 @@ const value = [
 
   // 共同借款人信息
   [{ name: "tsname", title: "姓名", _title: "共同借款人姓名", value: "" },
-  { name: "tsbdate", type: "picker", title: "出生日期", _title: "共同借款人出生日期", reg: /^\d{4}-\d{2}-\d{2}$/, value: '1900-01-01' },
+  { name: "tsbdate", type: "picker", title: "出生日期", _title: "共同借款人出生日期", reg: /^\d{4}-\d{2}-\d{2}$/, value: '2000-01-01' },
   //0身份证 1护照 2军官证 3户口 4临时身份证 5港澳台通行证
   { name: "tsitype", title: "身份证件类型", _title: "共同借款人身份证件类型", type: 'switch', value: '' },
   { name: "tsinumber", title: "身份证件号码", _title: "共同借款人身份证件号码", _type: "idcard", reg: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/, value: '' },
@@ -91,39 +91,104 @@ const value = [
 
 // switch
 const switchs = {
-  // 性别
-  sex: ["女", "男"],
-  // 户口
-  rpr: ["本地户口", "外地户口"],
-  // 行业
-  itype: ["农林牧鱼", "制造业", "批发零售", "信息传输/软件/信息技术服务", "房地产", "建筑业", "住宿/餐饮", "卫生/社会工作", "科研/技术服务", "公共管理/社会保障/社会组织", "采矿业", "文化/体育/娱乐业", "居民服务/修理/其他服务业", "租赁/商务服务业", "交通运输/仓储/邮政业", "教育", "金融", "国际组织", "电热力/燃气/水生产供应业 19水利/环境/公共设施管理", "其他"],
-  // 国籍地区
-  nationality: ["中国大陆(内地)", "中国香港", "中国台湾", "中国澳门", "外国籍"],
-  // 身份证类型
-  ntype: ["身份证", "护照", "军官证", "户口", "临时身份证", "港澳台通行证"],
-  // 婚姻状况
-  mstatus: ["未婚", "已婚", "离异", "丧偶", "其他"],
-  // 教育程度
-  elevel: ["高中以下", "高中", "专科", "学士", "硕士", "博士"],
-  // 居住房产类型
-  hptype: ["按揭商品房", "单位房产", "全款自购商品房", "直系亲属房产", "自建房", "租赁房", "其他"],
-  // 邮寄地址
-  maddress: ["同居住地址", "同单位地址"],
-  // 职业类型
-  otype: ["个体工商户", "私/民营企业", "公务员(政府机关正式员工)", "国有企业/事业单位", "外资企业", "专业技术人员", "现代金融关联企业", "其他"],
-  // 是否挂靠
-  wbst: ["是", "否"],
-  // 是否有共同借款人 
-  thesame: ["没有", "有"],
-  // 共同借款人身份证件类型
-  tsitype: ["身份证", "护照", "军官证", "户口", "临时身份证", "港澳台通行证"],
-  // 共同借款人邮寄地址
-  tsmaddress: ["同居住地址", "同单位地址"],
-  // 共同借款人与借款人关系
-  tsrelation: ["配偶", "父母亲", "子女", "其他"],
-  // 与借款人关系
-  relation: ["配偶", "父母亲", "子女", "其他"],
-};
+  sex: [{ key: 0, value: '女' }, { key: 1, value: '男' }],
+  rpr: [{ key: 0, value: '本地户口' }, { key: 1, value: '外地户口' }],
+  itype: [
+    { key: 0, value: '农林牧鱼' },
+    { key: 1, value: '制造业' },
+    { key: 2, value: '批发零售' },
+    { key: 3, value: '信息传输/软件/信息技术服务' },
+    { key: 4, value: '房地产' },
+    { key: 5, value: '建筑业' },
+    { key: 6, value: '住宿/餐饮' },
+    { key: 7, value: '卫生/社会工作' },
+    { key: 8, value: '科研/技术服务' },
+    { key: 9, value: '公共管理/社会保障/社会组织' },
+    { key: 10, value: '采矿业' },
+    { key: 11, value: '文化/体育/娱乐业' },
+    { key: 12, value: '居民服务/修理/其他服务业' },
+    { key: 13, value: '租赁/商务服务业' },
+    { key: 14, value: '交通运输/仓储/邮政业' },
+    { key: 15, value: '教育' },
+    { key: 16, value: '金融' },
+    { key: 17, value: '国际组织' },
+    { key: 18, value: '电热力/燃气/水生产供应业 19水利/环境/公共设施管理' },
+    { key: 19, value: '其他' }
+  ],
+  nationality: [
+    { key: 0, value: '中国大陆(内地)' },
+    { key: 1, value: '中国香港' },
+    { key: 2, value: '中国台湾' },
+    { key: 3, value: '中国澳门' },
+    { key: 4, value: '外国籍' }
+  ],
+  ntype: [
+    { key: 0, value: '身份证' },
+    { key: 1, value: '护照' },
+    { key: 2, value: '军官证' },
+    { key: 3, value: '户口' },
+    { key: 4, value: '临时身份证' },
+    { key: 5, value: '港澳台通行证' }
+  ],
+  mstatus: [
+    { key: 0, value: '未婚' },
+    { key: 1, value: '已婚' },
+    { key: 2, value: '离异' },
+    { key: 3, value: '丧偶' },
+    { key: 4, value: '其他' }
+  ],
+  elevel: [
+    { key: 0, value: '高中以下' },
+    { key: 1, value: '高中' },
+    { key: 2, value: '专科' },
+    { key: 3, value: '学士' },
+    { key: 4, value: '硕士' },
+    { key: 5, value: '博士' }
+  ],
+  hptype: [
+    { key: 0, value: '按揭商品房' },
+    { key: 1, value: '单位房产' },
+    { key: 2, value: '全款自购商品房' },
+    { key: 3, value: '直系亲属房产' },
+    { key: 4, value: '自建房' },
+    { key: 5, value: '租赁房' },
+    { key: 6, value: '其他' }
+  ],
+  maddress: [{ key: 0, value: '同居住地址' }, { key: 1, value: '同单位地址' }],
+  otype: [
+    { key: 0, value: '个体工商户' },
+    { key: 1, value: '私/民营企业' },
+    { key: 2, value: '公务员(政府机关正式员工)' },
+    { key: 3, value: '国有企业/事业单位' },
+    { key: 4, value: '外资企业' },
+    { key: 5, value: '专业技术人员' },
+    { key: 6, value: '现代金融关联企业' },
+    { key: 7, value: '其他' }
+  ],
+  wbst: [{ key: 0, value: '是' }, { key: 1, value: '否' }],
+  thesame: [{ key: 0, value: '没有' }, { key: 1, value: '有' }],
+  tsitype: [
+    { key: 0, value: '身份证' },
+    { key: 1, value: '护照' },
+    { key: 2, value: '军官证' },
+    { key: 3, value: '户口' },
+    { key: 4, value: '临时身份证' },
+    { key: 5, value: '港澳台通行证' }
+  ],
+  tsmaddress: [{ key: 0, value: '同居住地址' }, { key: 1, value: '同单位地址' }],
+  tsrelation: [
+    { key: 0, value: '配偶' },
+    { key: 1, value: '父母亲' },
+    { key: 2, value: '子女' },
+    { key: 3, value: '其他' }
+  ],
+  relation: [
+    { key: 0, value: '配偶' },
+    { key: 1, value: '父母亲' },
+    { key: 2, value: '子女' },
+    { key: 3, value: '其他' }
+  ]
+}
 
 // 单选 输入
 // const radioInput = ["配偶", "父母亲", "子女"]

+ 139 - 74
components/template/index.js

@@ -1,4 +1,5 @@
 import { value, switchs, date } from "./config";
+import Dialog from "../../miniprogram_npm/@vant/weapp/dialog/dialog";
 var _value = value;
 const app = getApp();
 Component({
@@ -10,6 +11,22 @@ Component({
   },
   properties: {
     type: { type: String, value: "edit" },
+    key: String
+  },
+  observers: {
+    'value': function (value) {
+      let A = value[0][1]["value"] * 1 || 0;
+      let B = (value[0][3]["value"] * 1 || 0) + (value[0][4]["value"] * 1 || 0) + (value[0][5]["value"] * 1 || 0) +
+        (value[0][6]["value"] * 1 || 0) + (value[0][7]["value"] * 1 || 0);
+      let C = value[0][9]["value"] * 1 || 0;
+      if (A == 0 || C == 0) return false;
+      value[0][8]["value"] = ((parseFloat(A - C + B) / parseFloat(A + B)) * 100).toFixed(2) + "%";
+      if (this.result && this.result == value[0][8]["value"]) return false;
+      this.result = value[0][8]["value"];
+      this.setData({
+        value
+      })
+    }
   },
   data: {
     value,
@@ -24,84 +41,135 @@ Component({
     btn: true,
     radioInputShow: false,
   },
+
   methods: {
     //组件石林进入页面接节点树执行
-    init () {
-      // 商品请求
-      wx.$request({ method: "get", url: "/order/productDict/" }).then(res => {
-        this.setData({ shop: res.data })
-      }).catch(err => wx.$err(err));
-
-      let { type, value } = this.data;
+    async init () {
+      try {
+        // 商品请求
+        var laompany = [];
+        let res = await wx.$request({ method: "get", url: "/order/productDict/" });
+        laompany = res.data.map(item => ({ key: item.id, value: item.name, month: item.month }));
+        let { type, value, switchs } = this.data;
+        switchs['laompany'] = laompany;
 
-      switch (type) {
-        case 'watch':
-          this.watchFunc(value);
-          break;
-        default:
-          break;
-      }
+        var obj = {};
+        switch (type) {
+          case 'watch':
+            obj = this.watchFunc(value);
+            break;
+          default:
+            //  针对商品操作 非观看模式
+            this.data.key && laompany.forEach((item, index) => {
+              if (item.key == this.data.key) {
+                value[0][10]["value"] = item.key;
+                value[0][10]["index"] = index;
+              }
+            })
+            break;
+        }
+        this.setData({ value, ...obj, switchs })
+      } catch (err) { wx.$err(err) }
     },
 
     //  查看模式
     watchFunc (data) {
       data = data.map(itemA => itemA.map(itemB => { if (itemB.hasOwnProperty('value')) itemB['disabled'] = true; return itemB })
       )
-      this.setData({ data, btn: false })
+      return { value: data, btn: false }
     },
 
     // 提交
-    submitFunc () {
-      let { value, submitLock } = this.data, megs = [], data = {}, cvalue = [], tels = [];
-      if (submitLock) return false;
-      this.setData({ submitLock: true });
-      if (value[2][6]['value'] == 0) {
-        value = [...value[0], ...value[1], ...value[2]];
-        cvalue = [..._value[0], ..._value[1], ..._value[2]];
-      } else {
-        value = [...value[0], ...value[1], ...value[2], ...value[3]];
-        cvalue = [..._value[0], ..._value[1], ..._value[2], ..._value[3]];
-      }
-      value.forEach((item, index) => {
-        // 特殊格式  非必须
-        if (!item.hasOwnProperty('value') || item.norequire) {
-          if (item.hasOwnProperty('value')) data[item.name] = item.value;
-          return false
-        };
-        // 正常流程
-        // 判断是否为空
-        if (!item.value) { megs.push(`${item.title}不能为空!`); return false; };
-        // 数字类型
-        if (item.type == 'number' && !/^\d+.?\d*$/.test(item.value)) { megs.push(`${item.title}必须是数字!`); return false; }
-        // 正则判断
-        if (cvalue[index].reg && !cvalue[index].reg.test(item.value)) {
-          megs.push(`${item.title}格式不正确!`); return false;
+    async submitFunc () {
+      try {
+        let { value, submitLock } = this.data, megs = [], data = {}, cvalue = [], tels = [];
+        if (submitLock) return false;
+        this.setData({ submitLock: true });
+        if (value[2][6]['value'] == 0) {
+          value = [...value[0], ...value[1], ...value[2]];
+          cvalue = [..._value[0], ..._value[1], ..._value[2]];
+        } else {
+          value = [...value[0], ...value[1], ...value[2], ...value[3]];
+          cvalue = [..._value[0], ..._value[1], ..._value[2], ..._value[3]];
+        }
+        value.forEach((item, index) => {
+          // 特殊格式  非必须
+          if (!item.hasOwnProperty('value') || item.norequire) {
+            if (item.hasOwnProperty('value')) data[item.name] = item.value;
+            return false
+          };
+          // 正常流程
+          // 判断是否为空
+          if (!item.value) { megs.push(`${item.title}不能为空!`); return false; };
+          // 数字类型
+          if (item.type == 'number' && !/^\d+.?\d*$/.test(item.value)) { megs.push(`${item.title}必须是数字!`); return false; }
+          // 正则判断
+          if (cvalue[index].reg && !cvalue[index].reg.test(item.value)) {
+            megs.push(`${item.title}格式不正确!`); return false;
+          };
+          // 号码不能相同 tel tstel ctel cttel
+          if (item.name == 'tel' || item.name == 'tstel' || item.name == 'ctel' || item.name == 'cttel') (!tels.some(item.value) || item.vlaue == '') && tels.push(item.value)
+            ;
+          data[item.name] = item.value;
+        });
+        (tels.length !== 4 && tels.length != 0) && megs.push(`手机号码不能重复`);
+        if (megs.length != 0) {
+          this.setData({ errorShow: true, megs, submitLock: false });
+          return false;
         };
-        // 号码不能相同 tel tstel ctel cttel
-        if (item.name == 'tel' || item.name == 'tstel' || item.name == 'ctel' || item.name == 'cttel') (!tels.some(item.value) || item.vlaue == '') && tels.push(item.value)
-          ;
-        data[item.name] = item.value;
-      });
-      (tels.length !== 4 && tels.length != 0) && megs.push(`手机号码不能重复`);
-      if (megs.length != 0) {
-        this.setData({ errorShow: true, megs, submitLock: false });
-        return false;
-      };
-      console.log(data)
+        data['category'] = 1;
+        // 申请贷款期限 不用传
+        delete data['maturity'];
+        await wx.$request({ method: "post", url: "/order/", data });
+        this.setData({ submitLock: false });
+        Dialog.alert({ message: "已提交!" }).then(res => wx.reLaunch({ url: '/pages/index/index' }))
+      } catch (err) { wx.$err(err) }
     },
 
     // 保存
-    saveFunc () {
-      let { value, saveLock } = this.data, data = {};
-      value = [...value[0], ...value[1], ...value[2], ...value[3]];
-      value.forEach(item => { if (item.hasOwnProperty('value')) data[item.name] = item.value });
-      console.log(data)
+    async saveFunc () {
+      try {
+        let { value, saveLock } = this.data, data = {};
+        if (saveLock) return false;
+        this.setData({ saveLock: true });
+        // 拦截
+        var requeire = ['name', 'tel'], megs = [];
+        value = [...value[0], ...value[1], ...value[2], ...value[3]];
+        var cvalue = [..._value[0], ..._value[1], ..._value[2], ..._value[3]];
+        value.forEach((item, index) => {
+          if (!item.hasOwnProperty('value')) return false;
+          if (requeire.some(itemB => itemB == item.name)) {
+            if (!item.value) {
+              megs.push(`${item.title}不能为空!`)
+              return false
+            };
+            if (cvalue[index].reg && !cvalue[index].reg.test(item.value)) {
+              megs.push(`${item.title}格式不正确!`); return false;
+            };
+          }
+          data[item.name] = item.value;
+        });
+        data['category'] = 0;
+        // 申请贷款期限 不用传
+        delete data['maturity'];
+        if (megs.length != 0) {
+          this.setData({ errorShow: true, megs, saveLock: false });
+          return false;
+        };
+        await wx.$request({ method: "post", url: "/order/", data });
+        this.setData({ saveLock: false })
+        Dialog.alert({ message: "已保存!" }).then(res => wx.reLaunch({ url: '/pages/index/index' }))
+      } catch (err) {
+        wx.$err(err)
+      }
+
     },
 
     // 输入
     inputFunc (e) {
       let { value } = this.data, { index } = e.currentTarget.dataset;
       value[index[0]][index[1]]['value'] = e.detail.value;
+      console.log(value[index[0]][index[1]]['name'], e.detail.value)
       this.setData({ value })
     },
 
@@ -110,42 +178,39 @@ Component({
       let { value, switchs } = this.data, { index } = e.currentTarget.dataset;
       let { name } = value[index[0]][index[1]];
       if (switchs.hasOwnProperty(name)) {
-        console.log(switchs[name])
         this.setData({ switchB: true, active: name, activeIndex: index })
       }
-      else {
-        this.setData({ radioInputShow: true, activeIndex: index });
-      }
     },
 
     // 隐藏单选框 
     hideModal () { this.setData({ switchB: false }) },
-    tehideModal () { this.setData({ radioInputShow: false }) },
     // 单选框赋值
     changeFunc (e) {
-      let { activeIndex, value } = this.data;
-      let _value = e.detail.value * 1;
-      value[activeIndex[0]][activeIndex[1]]['value'] = _value;
+      let { activeIndex, value, switchs } = this.data;
+      let _value = e.detail.value.split(",");
+      value[activeIndex[0]][activeIndex[1]]['value'] = _value[0] * 1;
+      value[activeIndex[0]][activeIndex[1]]['index'] = _value[1] * 1;
+
+      // 申请贷款产品 申请贷款期限关联
+      if (value[activeIndex[0]][activeIndex[1]]['name'] = 'laompany') {
+        value[0][11]['value'] = switchs['laompany'][_value[1] * 1]['month'] + '个月';
+      }
+
       // 第一借款人与申请人关系特殊处理
       if (value[activeIndex[0]][activeIndex[1]]['name'] == 'mstatus') {
-        console.log(_value)
-        value[2][2] = { ...value[2][2], disabled: _value == 1 ? true : false, value: _value == 1 ? 0 : '' }
+        value[2][2] = {
+          ...value[2][2], disabled: _value[0] == 1 ? true : false, value: _value[0] == 1 ? 0 : '', index: _value[0] == 1 ? 0 : ''
+        }
       }
 
       if (value[activeIndex[0]][activeIndex[1]].hasOwnProperty('forlen')) {
         for (let i = 1; i < (value[activeIndex[0]][activeIndex[1]]['forlen'] + 1); i++) {
-          value[activeIndex[0]][(activeIndex[1] + i)]['norequire'] = _value == 0 ? false : true;
+          value[activeIndex[0]][(activeIndex[1] + i)]['norequire'] = _value[0] == 0 ? false : true;
         }
       }
-      this.setData({ value })
+      this.setData({ value, switchB: false })
     },
 
-    // 单选 输入
-    // radioInputChangeFunc (e) {
-    //   let { activeIndex, value } = this.data;
-    //   value[activeIndex[0]][activeIndex[1]]['value'] = _value;
-    // },
-
     // 日期
     DateChange (e) {
       let { value } = this.data, { index } = e.currentTarget.dataset;

+ 32 - 36
components/template/index.wxml

@@ -26,9 +26,9 @@
     </block>
     <block wx:else>
       <view class="title {{item.norequire ? 'text-blue' : ''}}" style="">{{item.title}}</view>
-      <input data-index="{{[0,index]}}" data-value="{{item.value}}" id="{{item.name}}"
-        type="{{item._type ? item._type : 'text'}}"
-        value="{{item.type == 'switch' ? switchs[item.name][item.value] : item.value}}" bindinput="inputFunc"
+      <input class="{{item.type == 'switch' ? 'text-right' : ''}}" data-index="{{[0,index]}}"
+        data-value="{{item.value}}" id="{{item.name}}" type="{{item._type ? item._type : 'text'}}"
+        value="{{item.type == 'switch' ? switchs[item.name][item.index]['value'] : item.value}}" bindinput="inputFunc"
         style="z-index: 0;height: 60rpx;transform: translateY(-3rpx);"
         disabled="{{item.disabled || item.type=='switch'}}"
         placeholder="{{(item.disabled || item.type=='switch') ? '' : item._title ? '请输入' +item._title : '请输入' + item.title}}"></input>
@@ -64,9 +64,9 @@
     </block>
     <block wx:else>
       <view class="title {{item.norequire ? 'text-blue' : ''}}" style="">{{item.title}}</view>
-      <input data-index="{{[1,index]}}" data-value="{{item.value}}" id="{{item.name}}"
-        type="{{item._type ? item._type : 'text'}}"
-        value="{{item.type == 'switch' ? switchs[item.name][item.value] : item.value}}" bindinput="inputFunc"
+      <input class="{{item.type == 'switch' ? 'text-right' : ''}}" data-index="{{[1,index]}}"
+        data-value="{{item.value}}" id="{{item.name}}" type="{{item._type ? item._type : 'text'}}"
+        value="{{item.type == 'switch' ? switchs[item.name][item.index]['value'] : item.value}}" bindinput="inputFunc"
         style="z-index: 0;height: 60rpx;transform: translateY(-3rpx);"
         disabled="{{item.disabled || item.type=='switch'}}"
         placeholder="{{(item.disabled || item.type=='switch') ? '' : item._title ? '请输入' +item._title : '请输入' + item.title}}"></input>
@@ -102,9 +102,9 @@
     </block>
     <block wx:else>
       <view class="title {{item.norequire ? 'text-blue' : ''}}" style="">{{item.title}}</view>
-      <input data-index="{{[2,index]}}" data-value="{{item.value}}" id="{{item.name}}"
-        type="{{item._type ? item._type : 'text'}}"
-        value="{{item.type == 'switch' ? switchs[item.name][item.value] : item.value}}" bindinput="inputFunc"
+      <input class="{{item.type == 'switch' ? 'text-right' : ''}}" data-index="{{[2,index]}}"
+        data-value="{{item.value}}" id="{{item.name}}" type="{{item._type ? item._type : 'text'}}"
+        value="{{item.type == 'switch' ? switchs[item.name][item.index]['value'] : item.value}}" bindinput="inputFunc"
         style="z-index: 0;height: 60rpx;transform: translateY(-3rpx);"
         disabled="{{item.disabled || item.type=='switch'}}"
         placeholder="{{(item.disabled || item.type=='switch') ? '' : item._title ? '请输入' +item._title : '请输入' + item.title}}"></input>
@@ -139,9 +139,9 @@
     </block>
     <block wx:else>
       <view class="title {{item.norequire ? 'text-blue' : ''}}" style="">{{item.title}}</view>
-      <input data-index="{{[3,index]}}" data-value="{{item.value}}" id="{{item.name}}"
-        type="{{item._type ? item._type : 'text'}}"
-        value="{{item.type == 'switch' ? switchs[item.name][item.value] : item.value}}" bindinput="inputFunc"
+      <input class="{{item.type == 'switch' ? 'text-right' : ''}}" data-index="{{[3,index]}}"
+        data-value="{{item.value}}" id="{{item.name}}" type="{{item._type ? item._type : 'text'}}"
+        value="{{item.type == 'switch' ? switchs[item.name][item.index]['value'] : item.value}}" bindinput="inputFunc"
         style="z-index: 0;height: 60rpx;transform: translateY(-3rpx);"
         disabled="{{item.disabled || item.type=='switch'}}"
         placeholder="{{(item.disabled || item.type=='switch') ? '' : item._title ? '请输入' +item._title : '请输入' + item.title}}"></input>
@@ -149,10 +149,23 @@
       <view wx:if="{{item.type=='switch'}}" class="cuIcon-right"></view>
     </block>
   </view>
+
+  <!-- <view class="cu-bar bg-white solid-bottom solid-top">
+    <view class="action">
+      <text class="cuIcon-title text-orange "></text>
+      <view>
+        <view class="text-xl text-black"><text>借款人身份证</text> <text class="text-red">(必填)</text></view>
+      </view>
+    </view>
+  </view> -->
+
+
+
 </view>
+
 <!-- 功能栏 -->
 <van-goods-action wx:if="{{btn}}">
-  <van-goods-action-button type="warning" bind:click="saveFunc" text="保存" />
+  <van-goods-action-button loading="{{saveLock}}" type="warning" bind:click="saveFunc" text="保存" />
   <van-goods-action-button loading="{{submitLock}}" bind:click="submitFunc" text="提交" />
 </van-goods-action>
 
@@ -165,9 +178,9 @@
         <view class="cu-list menu text-left">
           <view class="cu-item" wx:for="{{switchs[active]}}" wx:key="index">
             <label class="flex justify-between align-center flex-sub">
-              <view class="flex-sub">{{item}}</view>
-              <radio value="{{index}}" checked="{{value[activeIndex[0]][activeIndex[1]]['value'] === index}}"
-                class="round"></radio>
+              <view class="flex-sub">{{item.value}}</view>
+              <radio value="{{[item.key,index]}}"
+                checked="{{value[activeIndex[0]][activeIndex[1]]['value'] === item.key}}" class="round"></radio>
             </label>
           </view>
         </view>
@@ -176,29 +189,12 @@
   </view>
 </view>
 
-<!-- 特殊 -->
-<view class="cu-modal {{ radioInputShow ?'show':''}}" bindtap="tehideModal">
-  <view class="cu-dialog" catchtap>
-    <view class="bg-white padding solid-bottom">{{value[activeIndex[0]][activeIndex[1]]['title']}}</view>
-    <scroll-view scroll-y style="max-height: 50vh;">
-      <radio-group bindchange="radioInputChangeFunc" class="block">
-        <view class="cu-list menu text-left">
-          <view class="cu-item" wx:for="{{shop}}" wx:key="index">
-            <label class="flex justify-between align-center flex-sub">
-              <view class="flex-sub">{{item.name}}</view>
-              <radio value="{{item.id}}" checked="{{value[activeIndex[0]][activeIndex[1]]['value']===item.id}} "
-                class="round"></radio>
-            </label>
-          </view>
-        </view>
-      </radio-group>
-    </scroll-view>
-  </view>
-</view>
 
 <!-- 错误提示框 -->
 <van-dialog use-slot title="提示" show="{{ errorShow }}" confirmText="关闭" bind:confirm="errorConfirmFunc">
   <scroll-view scroll-y style="max-height:50vh;">
     <view wx:for="{{megs}}" wx:key="index" class="margin-sm">{{index+1}}、 {{item}}</view>
   </scroll-view>
-</van-dialog>
+</van-dialog>
+
+<van-dialog id="van-dialog" />

+ 43 - 0
index.js

@@ -0,0 +1,43 @@
+// switch
+const switchs = {
+  // 性别
+  sex: ["女", "男"],
+  // 户口
+  rpr: ["本地户口", "外地户口"],
+  // 行业
+  itype: ["农林牧鱼", "制造业", "批发零售", "信息传输/软件/信息技术服务", "房地产", "建筑业", "住宿/餐饮", "卫生/社会工作", "科研/技术服务", "公共管理/社会保障/社会组织", "采矿业", "文化/体育/娱乐业", "居民服务/修理/其他服务业", "租赁/商务服务业", "交通运输/仓储/邮政业", "教育", "金融", "国际组织", "电热力/燃气/水生产供应业 19水利/环境/公共设施管理", "其他"],
+  // 国籍地区
+  nationality: ["中国大陆(内地)", "中国香港", "中国台湾", "中国澳门", "外国籍"],
+  // 身份证类型
+  ntype: ["身份证", "护照", "军官证", "户口", "临时身份证", "港澳台通行证"],
+  // 婚姻状况
+  mstatus: ["未婚", "已婚", "离异", "丧偶", "其他"],
+  // 教育程度
+  elevel: ["高中以下", "高中", "专科", "学士", "硕士", "博士"],
+  // 居住房产类型
+  hptype: ["按揭商品房", "单位房产", "全款自购商品房", "直系亲属房产", "自建房", "租赁房", "其他"],
+  // 邮寄地址
+  maddress: ["同居住地址", "同单位地址"],
+  // 职业类型
+  otype: ["个体工商户", "私/民营企业", "公务员(政府机关正式员工)", "国有企业/事业单位", "外资企业", "专业技术人员", "现代金融关联企业", "其他"],
+  // 是否挂靠
+  wbst: ["是", "否"],
+  // 是否有共同借款人 
+  thesame: ["没有", "有"],
+  // 共同借款人身份证件类型
+  tsitype: ["身份证", "护照", "军官证", "户口", "临时身份证", "港澳台通行证"],
+  // 共同借款人邮寄地址
+  tsmaddress: ["同居住地址", "同单位地址"],
+  // 共同借款人与借款人关系
+  tsrelation: ["配偶", "父母亲", "子女", "其他"],
+  // 与借款人关系
+  relation: ["配偶", "父母亲", "子女", "其他"],
+};
+var obj = {};
+Object.keys(switchs).forEach(item => {
+  obj[item] = [];
+  switchs[item].forEach((itemB, index) => {
+    obj[item].push({ key: index, value: itemB })
+  })
+})
+console.log(obj)

+ 25 - 3
pages/add/index.js

@@ -1,20 +1,42 @@
+import Dialg from "../../miniprogram_npm/@vant/weapp/dialog/dialog";
 const app = getApp();
 Page({
   data: {
     CustomBar: app.globalData.CustomBar,
 
   },
-  
 
+  // 登录
+  async getphonenumber (e) {
+    try {
+      if (!e.detail.hasOwnProperty('iv')) return false;
+      let { encryptedData, iv } = e.detail, { appId: appid } = app.globalData.mustArg, { openid } = app.globalData.user;
+      let res = await wx.$request({ url: "/account/wxbind/", data: { appid, openid, encryptedData, iv }, method: "post" });
+      let { face, name, tel, token, type, user_id } = res.data;
+      wx.setStorageSync("token", token ? 'JWT ' + token : '');
+      app.globalData.user = { ...app.globalData.user, face, name, tel, token, type, user_id };
+      this.onShow();
+    } catch (err) { wx.$err(err) }
 
-  onLoad: function (options) {
+  },
 
+  onLoad: function (options) {
+    options.data && this.setData({ value: options.data });
   },
   onReady: function () {
 
   },
   onShow: function () {
-    if (!app.globalData._initState) { wx.switchTab({ url: '/pages/index/index' }); }
+    if (!app.globalData._initState) {
+      wx.navigateTo({
+        url: '/pages/index/index',
+      });
+      return false;
+    }
+    !wx.getStorageSync('token') &&
+      Dialg.confirm({ message: "您尚未登录,不能操作该功能!", confirmButtonText: '微信快捷登录', confirmButtonOpenType: "getPhoneNumber" }).then(res => {
+      }).catch(() => { wx.navigateBack({ delta: 1 }) })
+      ;
   },
   onHide: function () {
 

+ 4 - 2
pages/add/index.wxml

@@ -1,4 +1,6 @@
-<cu-custom bgColor="bg-gradual-blue">
+<cu-custom isBack bgColor="bg-gradual-blue">
+  <view slot="backText">返回</view>
   <view slot="content">新增填报</view>
 </cu-custom>
-<Template />
+<Template key="{{value}}" />
+<van-dialog id="van-dialog" bind:getphonenumber="getphonenumber" />

+ 44 - 0
pages/detail/index.js

@@ -0,0 +1,44 @@
+const { value } = require("../../components/template/config")
+
+Page({
+  data: {
+
+  },
+  // 立即申请
+  onClickButton () {
+    wx.navigateTo({ url: "/pages/add/index?data=" + this.data.value.id })
+  },
+  onLoad: function (options) {
+    this.setData({ value: JSON.parse(options.data) })
+  },
+  onReady: function () {
+
+  },
+  onShow: function () {
+
+  },
+  onHide: function () {
+
+  },
+  onUnload: function () {
+
+  },
+  onPullDownRefresh: function () {
+  },
+  onReachBottom: function () {
+
+  },
+  onShareAppMessage: function () {
+    return {
+      title: this.data.value.title,
+      path: "/pages/detail/index?data=" + JSON.stringify(this.data.value)
+    }
+  },
+  onShareTimeline: function () {
+    return {
+      title: this.data.value.title,
+      query: "data=" + JSON.stringify(this.data.value),
+      imageUrl: this.data.value.img,
+    }
+  }
+})

+ 6 - 0
pages/detail/index.json

@@ -0,0 +1,6 @@
+{
+  "usingComponents": {
+    "van-goods-action": "@vant/weapp/goods-action/index",
+    "van-goods-action-button": "@vant/weapp/goods-action-button/index"
+  }
+}

+ 15 - 0
pages/detail/index.wxml

@@ -0,0 +1,15 @@
+<cu-custom isBack bgColor="bg-gradual-blue">
+  <view slot="backText">返回</view>
+  <view slot="content">商品详情</view>
+</cu-custom>
+<view class="section" style="margin-bottom:50px">
+  <view class="padding-xl bg-cyan">
+    <view class="padding-xs text-white text-xl">{{value.title}}</view>
+    <view class="padding-xs text-white">贷款期限:{{value.month}}个月</view>
+  </view>
+  <view wx:for="{{value.details}}" wx:key="index" class="bg-img"
+    style="background-image: url('{{item}}');height: 414rpx;"></view>
+</view>
+<van-goods-action>
+  <van-goods-action-button text="立即申请" bind:click="onClickButton" />
+</van-goods-action>

+ 1 - 0
pages/detail/index.wxss

@@ -0,0 +1 @@
+/* pages/detail/index.wxss */

+ 55 - 15
pages/index/index.js

@@ -1,34 +1,74 @@
+import { tabberFunc } from "../../utils/util";
 const app = getApp();
 Page({
   data: {
+    isLoad: true,
+    loadProgress: 100,
     CustomBar: app.globalData.CustomBar,
     // 通知栏
     tips: [
-      { key: 1, value: "一二三111122221112211222111222111122221112211222111222" },
-      { key: 2, value: "四五六" },
-      { key: 3, value: "七八九" }
+      // { key: 1, value: "一二三111122221112211222111222111122221112211222111222" },
     ],
     // 商品
-    value: [
-      { img: "https://ossweb-img.qq.com/images/lol/web201310/skin/big10006.jpg", title: "钢铁之翼", detail: "Only the guilty need fear me." },
-      { img: "https://ossweb-img.qq.com/images/lol/web201310/skin/big10006.jpg", title: "暗裔剑魔", detail: "我必须连同希望一起毁坏……" },
-      { img: "https://ossweb-img.qq.com/images/lol/web201310/skin/big10006.jpg", title: "钢铁之翼", detail: " Only the guilty need fear me." },
-      { img: "https://ossweb-img.qq.com/images/lol/web201310/skin/big10006.jpg", title: "钢铁之翼", detail: " Only the guilty need fear me." },
-      { img: "https://ossweb-img.qq.com/images/lol/web201310/skin/big10006.jpg", title: "钢铁之翼", detail: " Only the guilty need fear me." },
-      { img: "https://ossweb-img.qq.com/images/lol/web201310/skin/big10006.jpg", title: "钢铁之翼", detail: " Only the guilty need fear me." },
-    ]
+    value: {
+      page: 1,
+      totalPage: 1,
+      value: [
+        // { img: "https://ossweb-img.qq.com/images/lol/web201310/skin/big10006.jpg", title: "钢铁之翼", detail: "Only the guilty need fear me." },
+      ]
+    }
   },
+  // 跳转详情页
+  onClickFunc (e) {
+    let { index } = e.currentTarget.dataset, { value } = this.data;
+    wx.navigateTo({ url: "/pages/detail/index?data=" + JSON.stringify(value['value'][index]) });
+  },
+
+  // tabber 
+  NavChange (e) {
+    if (this.data.isLoad) return false;
+    let { active, path } = e.currentTarget.dataset;
+    tabberFunc(active, path)
+  },
+
   // 通知栏
   tipsFunc (e) {
     let { index } = e.currentTarget.dataset, { tips } = this.data;
     console.log(tips[index])
   },
 
+  // 请求
+  async request () {
+    try {
+      let { value: _value } = this.data;
+      let { page, totalPage, value } = _value;
+      if (page > totalPage) return false;
+      let res = await wx.$request({ method: "get", url: "/order/productList/", data: { limit: 10, page } });
+      ++page;
+      totalPage = res.totalPage;
+      value = res.data.map(item => ({ img: item.mail_image, id: item.id, month: item.month, title: item.name, details: item.details_image }));
+      this.setData({ value: { page, totalPage, value } });
+    } catch (err) { wx.$err(err) }
+  },
+
+
+  timer: null,
   onLoad: async function (options) {
+    // 微信小程序生命周期执行 不友好
+    this.timer = setInterval(() => {
+      if (app.globalData._initState) {
+        clearInterval(this.timer);
+        this.setData({ isLoad: false })
+      }
+    }, 100);
+    this.request();
     try {
-      let res = await wx.$request({ method: "get", url: "/order/productDict/" });
-      console.log(res)
+      let resB = await wx.$request({ method: "get", url: "/notices/list/" });
+      resB.data = resB.data.map(item => ({ key: item.id, value: item.title, detail: item.content, create_time: item.create_time, create_user: item.create_user }));
+      this.setData({ tips: resB.data });
+      wx.stopPullDownRefresh();
     } catch (err) { wx.$err(err) }
+
   },
   onReady: function () {
 
@@ -40,10 +80,10 @@ Page({
 
   },
   onUnload: function () {
-
+    clearInterval(this.timer);
   },
   onPullDownRefresh: function () {
-
+    this.request();
   },
   onReachBottom: function () {
 

+ 31 - 4
pages/index/index.wxml

@@ -1,5 +1,8 @@
 <cu-custom bgColor="bg-gradual-blue">
   <view slot="content">首页</view>
+  <view class="action " slot="right">
+    <view class="cu-load load-icon padding-left {{isLoad?'loading':'over'}}"></view>
+  </view>
 </cu-custom>
 <!-- 通知栏 -->
 <van-sticky offset-top="{{ CustomBar }}">
@@ -17,11 +20,35 @@
 <view style="height:90rpx"></view>
 <!-- 商品 -->
 <veiw class="section">
-  <view wx:for="{{value}}" wx:key="index" class="bg-img bg-mask padding-tb-xl margin-bottom-xl"
-    style="background-image: url('{{item.img}}');height: 414rpx;">
+  <view bindtap="onClickFunc" data-index="{{index}}" wx:for="{{value.value}}" wx:key="index"
+    class="bg-img bg-mask padding-tb-xl margin-bottom-xl" style="background-image: url('{{item.img}}');height: 414rpx;">
     <view class="padding-xl text-white">
-      <view class="padding-xs text-xl">{{item.title}}</view>
+      <view class="padding-xs text-xl text-cut">{{item.title}}</view>
       <view class="padding-xs">{{item.detail}}</view>
     </view>
   </view>
-</veiw>
+  <view class="cu-load bg-grey {{value.page > value.totalPage ?'over':'loading'}}"></view>
+  <van-empty wx:if="{{value.value.length == 0}}" description="暂无商品" />
+</veiw>
+
+<view style="height: 100rpx;"></view>
+<view class="cu-bar tabbar bg-white shadow foot">
+  <view class="action" bindtap="NavChange" data-active="true" data-path="pages/index/index">
+    <view class='cuIcon-cu-image'>
+      <image src="../../assets/tabber/menu_copy.png"></image>
+    </view>
+    <view class="text-blue">首页</view>
+  </view>
+  <view class="action" bindtap="NavChange" data-path="pages/add/index">
+    <view class='cuIcon-cu-image'>
+      <image src="../../assets/tabber/add_copy1.png"></image>
+    </view>
+    <view class="text-black">新增填报</view>
+  </view>
+  <view class="action" bindtap="NavChange" data-path="pages/login/index">
+    <view class='cuIcon-cu-image'>
+      <image src="../../assets/tabber/my_copy1.png"></image>
+    </view>
+    <view class="text-black">我的</view>
+  </view>
+</view>

+ 22 - 17
pages/login/index.js

@@ -1,3 +1,5 @@
+import Dialg from "../../miniprogram_npm/@vant/weapp/dialog/dialog";
+import { tabberFunc } from "../../utils/util";
 const app = getApp();
 Page({
   data: {
@@ -12,8 +14,13 @@ Page({
     ],
     update_lock: false,//更新资料按钮锁
     subscriber_lock: false,//订阅消息按钮锁
-    actions: [{ name: "微信快捷登录", color: '#39b54a', openType: "getPhoneNumber" }]
   },
+  // tabber 
+  NavChange (e) {
+    let { active, path } = e.currentTarget.dataset;
+    tabberFunc(active, path)
+  },
+
   // 更新资料
   async updateFunc () {
     function getUserProfile () {
@@ -45,14 +52,14 @@ Page({
   // 功能事件
   onClickFunc (e) {
     let { index } = e.currentTarget.dataset, { items } = this.data;
-    items[index]['success'].bind(this)();
+    wx.getStorageSync('token') ?
+      items[index]['success'].bind(this)() :
+      Dialg.confirm({ message: "您尚未登录,不能操作该功能!", confirmButtonText: '微信快捷登录', confirmButtonOpenType: "getPhoneNumber" }).then(res => {
+      }).catch(() => { })
+      ;
   },
 
   // 登录
-  loginFunc () { this.setData({ show: true }) },
-  onClose () {
-    this.setData({ show: false });
-  },
   async getphonenumber (e) {
     try {
       if (!e.detail.hasOwnProperty('iv')) return false;
@@ -62,10 +69,11 @@ Page({
       wx.setStorageSync("token", token ? 'JWT ' + token : '');
       let login = {
         imgurl: token ? face : app.globalData.mustArg.userInfo.avatarUrl,
-        state: token ? name : "未登录",
+        name: token ? name : "微信快捷登录",
+        state: token ? true : false
       };
       this.setData({ login });
-      app.globalData.user = { ...app.globalData.user, ace, name, tel, token, type, user_id };
+      app.globalData.user = { ...app.globalData.user, face, name, tel, token, type, user_id };
     } catch (err) { wx.$err(err) }
 
   },
@@ -78,15 +86,12 @@ Page({
 
   },
   onShow: function () {
-    if (app.globalData._initState) {
-      let login = {
-        imgurl: (wx.getStorageSync('token') && app.globalData.user.face) ? app.globalData.user.face : app.globalData.mustArg.userInfo.avatarUrl,
-        state: wx.getStorageSync('token') ? app.globalData.user.name : "未登录",
-      };
-      this.setData({ login });
-    } else {
-      wx.switchTab({ url: '/pages/index/index' });
-    }
+    let login = {
+      imgurl: (wx.getStorageSync('token') && app.globalData.user.face) ? app.globalData.user.face : app.globalData.mustArg.userInfo.avatarUrl,
+      name: wx.getStorageSync('token') ? app.globalData.user.name : "微信快捷登录",
+      state: wx.getStorageSync('token') ? true : false
+    };
+    this.setData({ login });
   },
   onHide: function () {
 

+ 1 - 1
pages/login/index.json

@@ -1,5 +1,5 @@
 {
   "usingComponents": {
-    "van-action-sheet": "@vant/weapp/action-sheet/index"
+    
   }
 }

+ 24 - 7
pages/login/index.wxml

@@ -1,11 +1,9 @@
 <scroll-view scroll-y class="DrawerPage ">
   <view class="header bg-blue" style="background-image: url({{waveimg}});">
-    <view bindtap="{{login.state=='未登录' ? 'loginFunc' : ''}}" class="user">
+    <view class="user">
       <view class="cu-avatar xl round margin-bottom" style="background-image:url({{login.imgurl}});"></view>
-      <view class="text-center text-xl text-bold">
-        <text>{{login.name}}</text>
-        <text class="{{login.state=='未登录' ? 'text-red' : 'padding'}}">{{login.state}}</text>
-        <text wx:if="!login.usertype" class="text-black">{{login.usertype}}</text>
+      <view class="text-center text-xl {{login.state ? 'text-bold' : ''}}">
+        <text wx:if="{{login.state}}">{{login.name}}</text>
       </view>
     </view>
   </view>
@@ -18,5 +16,24 @@
     </view>
   </view>
 </scroll-view>
-<van-action-sheet show="{{ show }}" bind:getphonenumber="getphonenumber" actions="{{ actions }}" bind:close="onClose"
-  bind:select="onSelect" />
+<view class="cu-bar tabbar bg-white shadow foot">
+  <view class="action" bindtap="NavChange" data-path="pages/index/index">
+    <view class='cuIcon-cu-image'>
+      <image src="../../assets/tabber/menu_copy1.png"></image>
+    </view>
+    <view class="text-black">首页</view>
+  </view>
+  <view class="action" bindtap="NavChange" data-path="pages/add/index">
+    <view class='cuIcon-cu-image'>
+      <image src="../../assets/tabber/add_copy1.png"></image>
+    </view>
+    <view class="text-black">新增填报</view>
+  </view>
+  <view class="action" bindtap="NavChange" data-active="true" data-path="pages/login/index">
+    <view class='cuIcon-cu-image'>
+      <image src="../../assets/tabber/my_copy.png"></image>
+    </view>
+    <view class="text-blue">我的</view>
+  </view>
+</view>
+<van-dialog id="van-dialog" bind:getphonenumber="getphonenumber" />

+ 4 - 1
pages/template/index.js

@@ -45,9 +45,12 @@ Page({
       { name: "上传资料", type: "provided", success () { } }
     ]
   },
+
+
   onLoad: function (options) {
-    let titleArr = [{ name: "草稿箱", value: "drafts" }, { name: "已填报", value: "provided" }];
+    let titleArr = [{ name: "草稿箱", value: "drafts", category: 0 }, { name: "已填报", value: "provided", category: 1 }];
     let filter_title = titleArr.filter(item => item.value == options.data);
+
     this.setData({
       title: filter_title.length != 0 ? filter_title[0]['name'] : '草稿箱',
       type: options.data || 'drafts'

+ 1 - 1
utils/init.js

@@ -30,7 +30,7 @@ class Index {
         wx.request({
           ...data,
           success: function (res) {
-            try { resolve(instanceResponse(res)) } catch (err) { reject(err) }
+            try { let data = instanceResponse(res); resolve(data); } catch (err) { console.log(err); reject(err) }
           },
           fail: function (err) {
             reject(err)

+ 11 - 0
utils/util.js

@@ -1,4 +1,15 @@
+const app = getApp();
+function tabberFunc (active, path) {
+  if (active) return false;
+  const routes = getCurrentPages();
+  let _index = 0;
+  routes.forEach((item, index) =>
+    item.route == path ? _index = routes.length - index - 1 : '');
+  _index > 0 ? wx.navigateBack({ delta: _index }) : wx.navigateTo({ url: "/" + path })
+}
+
 
 
 module.exports = {
+  tabberFunc
 }