|
@@ -0,0 +1,588 @@
|
|
|
+// pages/worksheetinfo/worksheetinfo.js
|
|
|
+
|
|
|
+Page({
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面的初始数据
|
|
|
+ */
|
|
|
+ data: {
|
|
|
+ images: [],
|
|
|
+ signs: [],
|
|
|
+ worksheetinfo: {},
|
|
|
+ chargstations: [],
|
|
|
+ chargstationsindex: 0,
|
|
|
+ pcitures: [],
|
|
|
+ workstatus: [{
|
|
|
+ value: 1,
|
|
|
+ text: '新建'
|
|
|
+ }, {
|
|
|
+ value: 2,
|
|
|
+ text: '人员指派'
|
|
|
+ }, {
|
|
|
+ value: 3,
|
|
|
+ text: '指派确认'
|
|
|
+ }, {
|
|
|
+ value: 4,
|
|
|
+ text: '施工前安全准备'
|
|
|
+ }, {
|
|
|
+ value: 5,
|
|
|
+ text: '进行中'
|
|
|
+ }
|
|
|
+ // , {
|
|
|
+ // value: 6,
|
|
|
+ // text: '已完成'
|
|
|
+ // }
|
|
|
+ , {
|
|
|
+ value: 7,
|
|
|
+ text: '完成确认'
|
|
|
+ }],
|
|
|
+ workstatusindex: 0,
|
|
|
+ workBigclass: [{
|
|
|
+ value: 1,
|
|
|
+ text: '售后服务'
|
|
|
+ }, {
|
|
|
+ value: 2,
|
|
|
+ text: '工程实施'
|
|
|
+ }],
|
|
|
+ workBigclassindex: 0,
|
|
|
+ workSmallclass:[{
|
|
|
+ value: 1,
|
|
|
+ text: '日常巡站'
|
|
|
+ }, {
|
|
|
+ value: 2,
|
|
|
+ text: '紧急维修'
|
|
|
+ }, {
|
|
|
+ value: 3,
|
|
|
+ text: '施工准备'
|
|
|
+ }, {
|
|
|
+ value: 4,
|
|
|
+ text: '工程进程'
|
|
|
+ }, {
|
|
|
+ value: 5,
|
|
|
+ text: '施工过程'
|
|
|
+ }, {
|
|
|
+ value: 6,
|
|
|
+ text: '工程竣工'
|
|
|
+ }, {
|
|
|
+ value: 7,
|
|
|
+ text: '工程验收'
|
|
|
+ }],
|
|
|
+ workSmallclassIndex: 0,
|
|
|
+ breakdownType: [{
|
|
|
+ value: 1,
|
|
|
+ text: '车辆导致'
|
|
|
+ }, {
|
|
|
+ value: 2,
|
|
|
+ text: '桩体导致'
|
|
|
+ }, {
|
|
|
+ value: 3,
|
|
|
+ text: '人为导致'
|
|
|
+ }, {
|
|
|
+ value: 4,
|
|
|
+ text: '基础设施问题'
|
|
|
+ }, {
|
|
|
+ value: 5,
|
|
|
+ text: '其他'
|
|
|
+ }],
|
|
|
+ breakdownTypeindex: null,
|
|
|
+ exceptdate: null,
|
|
|
+ excepttime: null,
|
|
|
+ finishdate: null,
|
|
|
+ finishtime: null,
|
|
|
+ accendantids: [],
|
|
|
+ userNames:[],
|
|
|
+
|
|
|
+ school_name:'',
|
|
|
+ school_id:'',
|
|
|
+ schoolValidate:'',
|
|
|
+
|
|
|
+ },
|
|
|
+ bindChargstationsChange: function(e) {
|
|
|
+ if (this.data.chargstationsindex != e.detail.value) {
|
|
|
+ console.log('picker发送选择改变,携带值为', e.detail.value)
|
|
|
+ let chargstationid = this.data.chargstations[e.detail.value].id;
|
|
|
+ let worksheetinfo = this.data.worksheetinfo;
|
|
|
+ worksheetinfo.accendant = null;
|
|
|
+ worksheetinfo.chargStationId = chargstationid;
|
|
|
+ this.setData({
|
|
|
+ chargstationsindex: e.detail.value,
|
|
|
+ worksheetinfo
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ bindWorkstatusChange: function(e) {
|
|
|
+ //console.log('picker发送选择改变,携带值为', e.detail.value)
|
|
|
+ let workStatus = this.data.workstatus[e.detail.value].value;
|
|
|
+ let worksheetinfo = this.data.worksheetinfo;
|
|
|
+ worksheetinfo.workStatus = workStatus;
|
|
|
+ this.setData({
|
|
|
+ workstatusindex: e.detail.value,
|
|
|
+ worksheetinfo
|
|
|
+ });
|
|
|
+ },
|
|
|
+ bindWorkBigclassChange: function(e) {
|
|
|
+ //console.log('picker发送选择改变,携带值为', e.detail.value)
|
|
|
+ let workBigclass = this.data.workBigclass[e.detail.value].value;
|
|
|
+ let worksheetinfo = this.data.worksheetinfo;
|
|
|
+ worksheetinfo.workBigclass = workBigclass;
|
|
|
+ this.setData({
|
|
|
+ workBigclassindex: e.detail.value,
|
|
|
+ worksheetinfo
|
|
|
+ });
|
|
|
+ },
|
|
|
+ bindWorkSmallclassChange: function(e) {
|
|
|
+ //console.log('picker发送选择改变,携带值为', e.detail.value)
|
|
|
+ let workSmallclass = this.data.workSmallclass[e.detail.value].value;
|
|
|
+ let worksheetinfo = this.data.worksheetinfo;
|
|
|
+ worksheetinfo.workSmallclass = workSmallclass;
|
|
|
+ this.setData({
|
|
|
+ workSmallclassindex: e.detail.value,
|
|
|
+ worksheetinfo
|
|
|
+ });
|
|
|
+ },
|
|
|
+ bindBreakdownType(e) {
|
|
|
+ //console.log('picker发送选择改变,携带值为', e.detail.value)
|
|
|
+ let breakdownType = this.data.breakdownType[e.detail.value].value;
|
|
|
+ let worksheetinfo = this.data.worksheetinfo;
|
|
|
+ worksheetinfo.breakdownType = breakdownType;
|
|
|
+ this.setData({
|
|
|
+ breakdownTypeindex: e.detail.value,
|
|
|
+ worksheetinfo
|
|
|
+ });
|
|
|
+ },
|
|
|
+ bindAccendantChange: function(e) {
|
|
|
+ console.info(this.data.chargstations)
|
|
|
+ console.info(this.data.chargstationsindex)
|
|
|
+ console.info(this.data.chargstationsindex)
|
|
|
+ let chargstationid = this.data.chargstations[this.data.chargstationsindex].id;
|
|
|
+ let accendant = this.data.worksheetinfo.accendant;
|
|
|
+ let url = `/pages/worksheetinfo/accendant?chargstationid=${chargstationid}&accendant=${accendant}`;
|
|
|
+ wx.navigateTo({
|
|
|
+ url
|
|
|
+ });
|
|
|
+ },
|
|
|
+ bindExceptdateChange(e) {
|
|
|
+ this.setData({
|
|
|
+ exceptdate: e.detail.value
|
|
|
+ })
|
|
|
+ },
|
|
|
+ bindExcepttimeChange(e) {
|
|
|
+ this.setData({
|
|
|
+ excepttime: e.detail.value
|
|
|
+ })
|
|
|
+ },
|
|
|
+ bindFinishdateChange(e) {
|
|
|
+ this.setData({
|
|
|
+ finishdate: e.detail.value
|
|
|
+ })
|
|
|
+ },
|
|
|
+ bindFinishtimeChange(e) {
|
|
|
+ this.setData({
|
|
|
+ finishtime: e.detail.value
|
|
|
+ })
|
|
|
+ },
|
|
|
+ bindMainLocationInput(e) {
|
|
|
+ let mainLocation = e.detail.value;
|
|
|
+ let worksheetinfo = this.data.worksheetinfo;
|
|
|
+ worksheetinfo.mainLocation = mainLocation;
|
|
|
+ this.setData({
|
|
|
+ worksheetinfo
|
|
|
+ });
|
|
|
+ },
|
|
|
+ bindContentInput(e) {
|
|
|
+ let content = e.detail.value;
|
|
|
+ let worksheetinfo = this.data.worksheetinfo;
|
|
|
+ worksheetinfo.content = content;
|
|
|
+ this.setData({
|
|
|
+ worksheetinfo
|
|
|
+ });
|
|
|
+ },
|
|
|
+ bindWorkSheetSubmit(e) {
|
|
|
+ let worksheetinfo = this.data.worksheetinfo;
|
|
|
+ worksheetinfo.operatorName = this.data.userNames.length>0?this.data.userNames[0]:"";
|
|
|
+ worksheetinfo.pams = this.data.accendantids;
|
|
|
+ worksheetinfo.accendant = null;
|
|
|
+ if (this.data.exceptdate && this.data.excepttime) {
|
|
|
+ worksheetinfo.exceptTime = this.data.exceptdate + " " + this.data.excepttime + ":00";
|
|
|
+ }
|
|
|
+ if (this.data.finishdate && this.data.finishtime){
|
|
|
+ worksheetinfo.finishTime = this.data.finishdate + " " + this.data.finishtime + ":00";
|
|
|
+ }
|
|
|
+ let images = this.data.images;
|
|
|
+ var imgString = [];
|
|
|
+
|
|
|
+ var pciString = [];
|
|
|
+ this.data.pcitures.forEach((item, index) =>{
|
|
|
+ pciString.push(item.src);
|
|
|
+ });
|
|
|
+
|
|
|
+ let signs = this.data.signs;
|
|
|
+ console.log(signs.length == 0);
|
|
|
+ var signString = [];
|
|
|
+ if (signs.length == 0) {
|
|
|
+ //2021-1-1撤销校验
|
|
|
+ // wx.showToast({
|
|
|
+ // title: '请设置签名',
|
|
|
+ // icon: 'loading',
|
|
|
+ // duration: 2000,
|
|
|
+ // mask: true,
|
|
|
+ // success: function() {}
|
|
|
+ // });
|
|
|
+ // return;
|
|
|
+ } else {
|
|
|
+ signs.forEach((item, index) => {
|
|
|
+ wx.uploadFile({
|
|
|
+ url: getApp().globalData.postHeadAgreement + '/restapi/wechat/editWorkSheetImg',
|
|
|
+ filePath: signs[index],
|
|
|
+ name: 'imageFileName',
|
|
|
+ success: function(res) {
|
|
|
+ let result = JSON.parse(res.data);
|
|
|
+ if (result.code == 500) {
|
|
|
+ wx.showModal({
|
|
|
+ showCancel: false,
|
|
|
+ content: result.msg
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ signString.push(result.msg);
|
|
|
+ console.log(signString);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ var uploadSignOverFlag = setInterval(function() {
|
|
|
+ if (signString.length == signs.length) {
|
|
|
+ clearInterval(uploadSignOverFlag);
|
|
|
+ if (images.length == 0) {
|
|
|
+ if (worksheetinfo.pciture) {
|
|
|
+ console.log(worksheetinfo.pciture);
|
|
|
+ worksheetinfo.pciture = (pciString.concat(imgString).concat(signString)).join(",");
|
|
|
+ //worksheetinfo.pciture = ((worksheetinfo.pciture.split(",")).concat(signString)).join(",");
|
|
|
+ console.log(worksheetinfo.pciture);
|
|
|
+ }
|
|
|
+ console.info("===============================")
|
|
|
+ console.info(worksheetinfo)
|
|
|
+ console.info("===============================")
|
|
|
+ wx.request({
|
|
|
+ url: getApp().globalData.postHeadAgreement + '/restapi/wechat/saveWorkSheet',
|
|
|
+ data: worksheetinfo,
|
|
|
+ method: 'POST',
|
|
|
+ success(res) {
|
|
|
+ //console.log(res);
|
|
|
+ if (res.data.code == 500) {
|
|
|
+ wx.showModal({
|
|
|
+ showCancel: false,
|
|
|
+ content: res.data.msg
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ wx.navigateBack();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+
|
|
|
+ images.forEach((item, index) => {
|
|
|
+ wx.uploadFile({
|
|
|
+ url: getApp().globalData.postHeadAgreement + '/restapi/wechat/editWorkSheetImg',
|
|
|
+ filePath: images[index],
|
|
|
+ name: 'imageFileName',
|
|
|
+ success: function(res) {
|
|
|
+ let result = JSON.parse(res.data);
|
|
|
+ if (result.code == 500) {
|
|
|
+ wx.showModal({
|
|
|
+ showCancel: false,
|
|
|
+ content: result.msg
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ imgString.push(result.msg);
|
|
|
+ console.log(imgString);
|
|
|
+ if (index == (images.length - 1)) {
|
|
|
+ var uploadImgOverFlag = setInterval(function() {
|
|
|
+ if (imgString.length == images.length) {
|
|
|
+ clearInterval(uploadImgOverFlag);
|
|
|
+ //worksheetinfo.pciture = ((worksheetinfo.pciture.split(",")).concat(signString)).join(",");
|
|
|
+ worksheetinfo.pciture = (pciString.concat(imgString).concat(signString)).join(",");
|
|
|
+ //var images = this.data.images.concat(res.tempFilePaths);
|
|
|
+ console.info("===============================")
|
|
|
+ console.info(worksheetinfo)
|
|
|
+ console.info("===============================")
|
|
|
+ wx.request({
|
|
|
+ url: getApp().globalData.postHeadAgreement + '/restapi/wechat/saveWorkSheet',
|
|
|
+ data: worksheetinfo,
|
|
|
+ method: 'POST',
|
|
|
+ success(res) {
|
|
|
+ //console.log(res);
|
|
|
+ if (res.data.code == 500) {
|
|
|
+ wx.showModal({
|
|
|
+ showCancel: false,
|
|
|
+ content: res.data.msg
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ wx.navigateBack();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }, 100);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail: function(data) {
|
|
|
+ console.log(data);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }, 100);
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
+ openImage(e) {
|
|
|
+ //var that = this;
|
|
|
+ var imgCount = (9 - this.data.pcitures.length) < 0 ? 0 : 9 - this.data.pcitures.length;
|
|
|
+ console.log(imgCount);
|
|
|
+ wx.chooseImage({
|
|
|
+ count: 9 - (this.data.pcitures.length + this.data.images.length),
|
|
|
+ //sizeType: ['original', 'compressed'], //可选择原图或压缩后的图片
|
|
|
+ //sourceType: ['album', 'camera'], //可选择性开放访问相册、相机
|
|
|
+ success: res => {
|
|
|
+ //console.log(res);
|
|
|
+ var images = this.data.images.concat(res.tempFilePaths);
|
|
|
+ // 限制最多只能留下5张照片
|
|
|
+ images = images.length <= imgCount ? images : images.slice(0, imgCount);
|
|
|
+ if (images.length >= imgCount || imgCount<= 0){
|
|
|
+ wx.showToast({
|
|
|
+ title: '最多9张图片',
|
|
|
+ icon:'none'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ this.setData({
|
|
|
+ //pcitures: [],
|
|
|
+ images
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ removeImage(e) {
|
|
|
+ //console.log(e);
|
|
|
+ //console.log(this.data.images);
|
|
|
+ let idx = e.currentTarget.dataset.idx;
|
|
|
+ var images = this.data.images;
|
|
|
+ images.splice(idx, 1);
|
|
|
+ this.setData({
|
|
|
+ images
|
|
|
+ });
|
|
|
+ },
|
|
|
+ removePciture(e) {
|
|
|
+ //console.log(e);
|
|
|
+ //console.log(this.data.images);
|
|
|
+
|
|
|
+ let idx = e.currentTarget.dataset.idx;
|
|
|
+ var pcitures = this.data.pcitures;
|
|
|
+ pcitures.splice(idx, 1);
|
|
|
+ this.setData({
|
|
|
+ pcitures
|
|
|
+ });
|
|
|
+ },
|
|
|
+ removeSign(e) {
|
|
|
+ //console.log(e);
|
|
|
+ //console.log(this.data.images);
|
|
|
+ let idx = e.currentTarget.dataset.idx;
|
|
|
+ var signs = this.data.signs;
|
|
|
+ signs.splice(idx, 1);
|
|
|
+ this.setData({
|
|
|
+ signs
|
|
|
+ });
|
|
|
+ },
|
|
|
+ handleImagePreview(e) {
|
|
|
+ const idx = e.target.dataset.idx
|
|
|
+ const images = this.data.images
|
|
|
+
|
|
|
+ wx.previewImage({
|
|
|
+ current: images[idx], //当前预览的图片
|
|
|
+ urls: images, //所有要预览的图片
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleSignPreview(e) {
|
|
|
+ const idx = e.target.dataset.idx
|
|
|
+ const signs = this.data.signs
|
|
|
+ //console.log(idx);
|
|
|
+ //console.log(signs);
|
|
|
+ //console.log(signs[idx]);
|
|
|
+ wx.previewImage({
|
|
|
+ current: signs[idx], //当前预览的图片
|
|
|
+ urls: signs, //所有要预览的图片
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面加载
|
|
|
+ */
|
|
|
+ onLoad: function(options) {
|
|
|
+ //console.log(options);
|
|
|
+ // let {
|
|
|
+ // worksheet
|
|
|
+ // } = options;
|
|
|
+ // //console.log(worksheet);
|
|
|
+ // let worksheetinfo = JSON.parse(worksheet);
|
|
|
+ // //worksheetinfo.breakdownType = 2;
|
|
|
+ // this.setData({
|
|
|
+ // worksheetinfo
|
|
|
+ // });z
|
|
|
+ let worksheetinfo = {
|
|
|
+ workStatus: 0,
|
|
|
+ workBigclass: 0,
|
|
|
+ workSmallclass: 0,
|
|
|
+ chargStationId: 0,
|
|
|
+ }
|
|
|
+ this.setData({
|
|
|
+ worksheetinfo: worksheetinfo
|
|
|
+ });
|
|
|
+ this.setData({
|
|
|
+ workstatusindex: 0,
|
|
|
+ workBigclassindex: 0,
|
|
|
+ workSmallclassindex: 0,
|
|
|
+ chargstationsindex: 0,
|
|
|
+ });
|
|
|
+
|
|
|
+ // if (worksheetinfo.exceptTime) {
|
|
|
+ // let datetime = worksheetinfo.exceptTime.split(" ");
|
|
|
+ // this.setData({
|
|
|
+ // exceptdate: datetime[0],
|
|
|
+ // excepttime: datetime[1].substr(0, 5)
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // if (worksheetinfo.finishTime) {
|
|
|
+ // let datetime = worksheetinfo.finishTime.split(" ");
|
|
|
+ // this.setData({
|
|
|
+ // finishdate: datetime[0],
|
|
|
+ // finishtime: datetime[1].substr(0, 5)
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ this.setData({
|
|
|
+ breakdownTypeindex: 0
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ //console.log(worksheetinfo);
|
|
|
+
|
|
|
+ let userInfo = wx.getStorageSync('userInfo');
|
|
|
+ let isLogin = wx.getStorageSync('isLogin');
|
|
|
+ let that = this;
|
|
|
+ //console.log(12345);
|
|
|
+
|
|
|
+
|
|
|
+ if (userInfo && isLogin) {
|
|
|
+ wx.getLocation({
|
|
|
+ success: function(res) {
|
|
|
+ //console.log(res);
|
|
|
+ let {
|
|
|
+ latitude,
|
|
|
+ longitude,
|
|
|
+ } = res;
|
|
|
+ wx.request({
|
|
|
+ url: getApp().globalData.postHeadAgreement + '/restapi/wechat/userChargStationsWeb',
|
|
|
+ data: {
|
|
|
+ userId: userInfo.userId,
|
|
|
+ lat: latitude,
|
|
|
+ lon: longitude
|
|
|
+ },
|
|
|
+ method: 'POST',
|
|
|
+ success(res) {
|
|
|
+ //console.log(res);
|
|
|
+ let {
|
|
|
+ data: chargstations
|
|
|
+ } = res;
|
|
|
+ chargstations.forEach((item, index) => {
|
|
|
+ if (item.chargStationName && worksheetinfo && worksheetinfo.chargStationName && item.chargStationName == worksheetinfo.chargStationName) {
|
|
|
+ that.setData({
|
|
|
+ chargstationsindex: index
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ that.setData({
|
|
|
+ chargstations
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // wx.request({
|
|
|
+ // url: getApp().globalData.postHeadAgreement + '/restapi/wechat/getuserworksheet',
|
|
|
+ // data: worksheetinfo.id,
|
|
|
+ // method: 'POST',
|
|
|
+ // success(res) {
|
|
|
+ // //console.log(res);
|
|
|
+ // let accendantids = [];
|
|
|
+ // let userNames = [];
|
|
|
+ // res.data.forEach((item, index) => {
|
|
|
+ // accendantids.push(item.userId);
|
|
|
+ // userNames.push(item.userName);
|
|
|
+ // });
|
|
|
+ // that.setData({
|
|
|
+ // accendantids,
|
|
|
+ // userNames
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ },
|
|
|
+ openSign(e) {
|
|
|
+ let url = `/pages/sign/sign`;
|
|
|
+ wx.navigateTo({
|
|
|
+ url
|
|
|
+ });
|
|
|
+
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面初次渲染完成
|
|
|
+ */
|
|
|
+ onReady: function() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面显示
|
|
|
+ */
|
|
|
+ onShow: function() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面隐藏
|
|
|
+ */
|
|
|
+ onHide: function() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面卸载
|
|
|
+ */
|
|
|
+ onUnload: function() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面相关事件处理函数--监听用户下拉动作
|
|
|
+ */
|
|
|
+ onPullDownRefresh: function() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面上拉触底事件的处理函数
|
|
|
+ */
|
|
|
+ onReachBottom: function() {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户点击右上角分享
|
|
|
+ */
|
|
|
+ onShareAppMessage: function() {
|
|
|
+
|
|
|
+ }
|
|
|
+})
|