Commit ae908d34 by caoyanzhi

Merge branch 'feature/act-code' into test

# Conflicts:
#	src/components/layout/index.vue
parents 0c103c78 79543a4f
......@@ -15,6 +15,13 @@ module.exports = {
'^/haoban-manage3-web': ''
}
},
'/gic-member-tag-web/': {
target: 'https://haoban.gicdev.com/gic-member-tag-web/',
changeOrigin: true,
pathRewrite: {
'^/gic-member-tag-web': ''
}
},
'/api-plug/': {
target: 'https://www.gicdev.com/api-plug/',
changeOrigin: true,
......@@ -78,5 +85,6 @@ module.exports = {
'^/haoban-app-aggregation-web/': ''
}
},
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
webpackJsonp([13,48,106],{"4KYo":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i={data:function(){return{card:{pageName:"",pageCode:"",pageId:"",pageTitle:"",merchantName:"",merchantPhoneNumber:"",merchantLogo:"",pageBackgroundImg:"",guideComment:""}}},props:{content:{type:Object,default:function(){}}},watch:{content:{handler:function(e){if(e){var t=e.pageName,a=e.pageCode,i=e.pageId,n=e.pageTitle,o=e.merchantName,r=e.merchantPhoneNumber,c=e.merchantLogo,l=e.pageBackgroundImg,s=e.guideComment,g=e.createorName,d=e.createTime;this.card={pageName:t,pageCode:a,pageId:i,pageTitle:n,merchantName:o,merchantPhoneNumber:r,merchantLogo:c,pageBackgroundImg:l,guideComment:s,createorName:g,createTime:d}}},immediate:!0}}},n={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"card"},[i("div",{staticClass:"head"},[i("div",{staticClass:"operation"},[i("div",{staticClass:"idNum"},[e._v("ID:"+e._s(e.card.pageCode))]),e._v(" "),i("div",{staticClass:"btns"},[i("el-button",{attrs:{type:"text"},on:{click:function(t){return e.$emit("relationDetail")}}},[e._v("关联详情")]),e._v(" "),i("el-button",{attrs:{type:"text"},on:{click:function(t){return e.$emit("deleteTemp")}}},[e._v("删除")]),e._v(" "),i("el-button",{attrs:{type:"text"},on:{click:function(t){return e.$emit("editTemp")}}},[e._v("编辑")])],1)]),e._v(" "),i("div",{staticClass:"tempName"},[e._v(e._s(e.card.pageName))]),e._v(" "),i("div",{staticClass:"cardName"},[i("div",{staticClass:"createName"},[e._v(e._s(e.card.createorName))]),e._v(" "),i("div",{staticClass:"createTime"},[e._v(e._s(e._f("formatTimeStamp")(e.card.createTime)))])])]),e._v(" "),i("div",{staticClass:"iphone-content"},[i("div",{staticClass:"iphone"},[i("span",{staticClass:"pageTitle"},[e._v(e._s(e.card.pageTitle))]),e._v(" "),i("img",{attrs:{src:a("NBDD")}}),e._v(" "),i("div",{staticClass:"content"},[i("img",{directives:[{name:"show",rawName:"v-show",value:e.card.pageBackgroundImg,expression:"card.pageBackgroundImg"}],staticClass:"bgImg",attrs:{src:e.card.pageBackgroundImg}}),e._v(" "),i("div",{staticClass:"enterpriseInfo"},[e.card.merchantLogo?i("div",{staticClass:"logo"},[i("img",{attrs:{src:e.card.merchantLogo}})]):e._e(),e._v(" "),i("div",{staticClass:"name"},[e._v(e._s(e.card.merchantName))])]),e._v(" "),i("div",{staticClass:"QRcode"}),e._v(" "),i("div",{staticClass:"leadingText"},[e._v(e._s(e.card.guideComment))]),e._v(" "),e.card.merchantPhoneNumber?i("div",{staticClass:"enterpriseNum"},[i("i",{staticClass:"iconfont-hb3 icondianhua"}),e._v(" "),i("p",[e._v(e._s(e.card.merchantPhoneNumber))])]):e._e()])])])])},staticRenderFns:[]};var o=a("VU/8")(i,n,!1,function(e){a("H6Hr")},"data-v-254ab8a9",null);t.default=o.exports},GdW8:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=a("PeHS"),n=a("PI0u"),o={data:function(){return{form:{searchContent:"",pageId:"",pageNum:1,pageSize:20},loading:!1,total:0,tableData:[]}},props:{pageId:{type:String,default:""},dialogVisible:{type:Boolean,default:!1}},watch:{pageId:function(e){e&&(this.form={searchContent:"",pageId:e,pageNum:1,pageSize:20},this.getList())}},methods:{toInput:Object(n.a)(function(e,t){this.getList()},500),getList:function(){var e=this;this.loading=!0,Object(i.k)(this.form).then(function(t){var a=t.data.result,i=a.totalCount,n=a.result;n&&(e.total=i,e.tableData=n)}).finally(function(t){e.loading=!1})},handleSizeChange:function(e){this.form.pageNum=1,this.form.pageSize=e,this.getList()},handleCurrentChange:function(e){this.form.pageNum=e,this.getList()}}},r={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-dialog",{attrs:{title:"关联详情",width:"600px",visible:e.dialogVisible},on:{"update:visible":function(t){e.dialogVisible=t},close:function(t){return e.$emit("update:dialogVisible",!1)}}},[a("div",{staticClass:"daily-set-content boder-box"},[a("div",{staticClass:"flex flex-space-between m-b-16"},[a("el-input",{staticClass:"w-260",attrs:{placeholder:"请输入链接名称/ID",clearable:""},on:{clear:e.getList},nativeOn:{keyup:function(t){return a=t,e.toInput(a,e.searchInput);var a}},model:{value:e.form.searchContent,callback:function(t){e.$set(e.form,"searchContent",t)},expression:"form.searchContent"}},[a("i",{staticClass:"el-input__icon el-icon-search",attrs:{slot:"prefix"},slot:"prefix"})])],1)]),e._v(" "),a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],ref:"multipleTable",staticClass:"select-table",attrs:{data:e.tableData,height:"450","tooltip-effect":"dark"}},[a("el-table-column",{attrs:{prop:"releationId",label:"链接ID","show-overflow-tooltip":""}}),e._v(" "),a("el-table-column",{attrs:{prop:"referName",label:"链接名称","show-overflow-tooltip":""}}),e._v(" "),a("el-table-column",{attrs:{prop:"",label:"操作",width:"80"},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.row;return[a("el-button",{attrs:{type:"text"},on:{click:function(t){return e.$emit("goLinkDetail",i.referId)}}},[e._v("查看")])]}}])})],1),e._v(" "),a("el-pagination",{staticClass:"text-right margin-pg",attrs:{"page-size":e.form.pageSize,"current-page":e.form.pageNum,layout:"prev, pager, next",total:e.total},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange,"update:pageSize":function(t){return e.$set(e.form,"pageSize",t)},"update:page-size":function(t){return e.$set(e.form,"pageSize",t)},"update:currentPage":function(t){return e.$set(e.form,"pageNum",t)},"update:current-page":function(t){return e.$set(e.form,"pageNum",t)}}})],1)},staticRenderFns:[]};var c=a("VU/8")(o,r,!1,function(e){a("YYEh")},"data-v-29d9d5a9",null);t.default=c.exports},H6Hr:function(e,t){},NBDD:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAABLCAYAAAABIF7dAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRCQkQ2MDMwQTRDMTFFRDkyNEZGNTNBMkRBMzgxQ0YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRCQkQ2MDQwQTRDMTFFRDkyNEZGNTNBMkRBMzgxQ0YiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNEJCRDYwMTBBNEMxMUVEOTI0RkY1M0EyREEzODFDRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxNEJCRDYwMjBBNEMxMUVEOTI0RkY1M0EyREEzODFDRiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pj1d2O8AAA0pSURBVHja7J15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"},V30X:function(e,t){},YYEh:function(e,t){},fjEt:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=a("Dd8w"),n=a.n(i),o=a("4KYo"),r=a("GdW8"),c=a("PeHS"),l=a("PI0u"),s={name:"ladingPageList",data:function(){return{form:{pageSearchText:"",dateRange:[],pageSize:20,pageNum:1},loading:!1,total:0,pageId:"",dialogVisible:!1,list:[{pageName:"模板名称模板名称模板名称模板名称模板",pageCode:"MB01123456789012300001",pageId:"1",pageTitle:"页面页面页面页面标题",merchantName:"商户名称商户名称商户名称商户名称商户名称",merchantPhoneNumber:"0571-1234567",merchantLogo:"https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464",pageBackgroudImg:"https://pic01-10001430.image.myqcloud.com/b91f73af-43e4-4733-a4d3-0ab0bcb4ce7f",guideComment:"长按保存图片并识别二长按保存图片并识别二长按保存图片并识别二长按保存图片并识别二长按保存图片并识别二",createorName:"艾蜜雪管理员",createTime:1657257986e3},{pageName:"模板名称模板名称模板名称模板名称模板",pageCode:"MB01123456789012300001",pageId:"2",pageTitle:"页面标题2",merchantName:"商户名称",merchantPhoneNumber:"0571-1234567",merchantLogo:"https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464",pageBackgroudImg:"",guideComment:"长按识别二维码添加您的专属导购",createorName:"艾蜜雪管理员",createTime:1657257986e3},{pageName:"模板名称模板名称模板名称模板名称模板",pageCode:"MB01123456789012300001",pageId:"3",pageTitle:"页面标题3",merchantName:"商户名称",merchantPhoneNumber:"0571-1234567",merchantLogo:"https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464",pageBackgroudImg:"https://pic01-10001430.image.myqcloud.com/b91f73af-43e4-4733-a4d3-0ab0bcb4ce7f",guideComment:"长按识别二维码添加您的专属导购",createorName:"艾蜜雪管理员",createTime:1657257986e3},{pageName:"模板名称模板名称模板名称模板名称模板",pageCode:"MB01123456789012300001",pageId:"4",pageTitle:"页面标题4",merchantName:"商户名称",merchantPhoneNumber:"0571-1234567",merchantLogo:"https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464",pageBackgroudImg:"https://pic01-10001430.image.myqcloud.com/b91f73af-43e4-4733-a4d3-0ab0bcb4ce7f",guideComment:"长按识别二维码添加您的专属导购",createorName:"艾蜜雪管理员",createTime:1657257986e3},{pageName:"模板名称模板名称模板名称模板名称模板",pageCode:"MB01123456789012300001",pageId:"5",pageTitle:"页面标题5",merchantName:"商户名称",merchantPhoneNumber:"0571-1234567",merchantLogo:"https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464",pageBackgroudImg:"https://pic01-10001430.image.myqcloud.com/b91f73af-43e4-4733-a4d3-0ab0bcb4ce7f",guideComment:"长按识别二维码添加您的专属导购",createorName:"艾蜜雪管理员",createTime:1657257986e3}]}},components:{cardView:o.default,relationDialog:r.default},mounted:function(){this.getList()},activated:function(){this.getList()},methods:{toInput:Object(l.a)(function(e,t){this.getList()},500),getList:function(){var e=this,t=n()({},this.form);this.form.dateRange&&this.form.dateRange.length&&(t.startTime=this.form.dateRange[0]+" 00:00:00",t.endTime=this.form.dateRange[1]+" 23:59:59"),delete t.dateRange,this.loading=!0,Object(c.j)(t).then(function(t){var a=t.data.result,i=a.result,n=a.totalCount;i&&(e.total=n,e.list=i)}).finally(function(t){e.loading=!1})},handleSizeChange:function(e){this.form.pageNum=1,this.form.pageSize=e,this.getList()},handleCurrentChange:function(e){this.form.pageNum=e,this.getList()},addTemp:function(){this.$router.push("/ladingPageAdd")},relationDetail:function(e){this.dialogVisible=!0,this.pageId=e.pageId},deleteTemp:function(e){var t=this;Object(c.k)({pageId:e.pageId}).then(function(a){var i=a.data.result.totalCount;i?t.$confirm("当前模板已关联链接("+i+"),请确认投放链接已投放结束,解除关联后才可删除该模板","无法删除该模板",{confirmButtonText:"关联详情",cancelButtonText:"取消",type:"warning"}).then(function(a){t.relationDetail(e)}):t.$confirm("模板删除后将无法恢复","确认要删除该模板吗?",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(function(a){t.deleteRequest(e)})})},deleteRequest:function(e){var t=this;Object(c.g)({pageId:e.pageId}).then(function(e){t.$message.success("删除成功"),t.getList()})},editTemp:function(e){this.$router.push("/ladingPageEdit/"+e.pageId)},goLinkDetail:function(e){window.open("/haoban-3/#/attractFlowLinkInfo/"+e)}}},g={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"daily-set-content"},[a("div",{staticClass:"flex flex-space-between m-b-16"},[a("div",{staticClass:"flex flex-align-center"},[a("el-input",{staticClass:"w-260",attrs:{placeholder:"请输入模板ID/名称、创建人",clearable:""},on:{clear:e.getList},nativeOn:{keyup:function(t){return e.toInput(t)}},model:{value:e.form.pageSearchText,callback:function(t){e.$set(e.form,"pageSearchText",t)},expression:"form.pageSearchText"}},[a("i",{staticClass:"el-input__icon el-icon-search",attrs:{slot:"prefix"},slot:"prefix"})]),e._v(" "),a("span",{staticClass:"m-l-10",staticStyle:{"font-size":"14px"}},[e._v("模板创建时间:")]),e._v(" "),a("el-date-picker",{staticClass:"m-l-10 w-256",attrs:{type:"daterange","value-format":"yyyy-MM-dd",clearable:"","range-separator":"~","start-placeholder":"开始日期","end-placeholder":"结束日期"},on:{change:e.getList,clear:e.getList},model:{value:e.form.dateRange,callback:function(t){e.$set(e.form,"dateRange",t)},expression:"form.dateRange"}})],1),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:e.addTemp}},[e._v("新增模板")])],1),e._v(" "),a("div",{staticClass:"tips m-b-16"},[e._v("\n 二维码只是样式预览效果,请勿直接使用\n ")]),e._v(" "),a("div",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticClass:"card-content"},e._l(e.list,function(t){return a("card-view",{key:t.pageId,attrs:{content:t},on:{relationDetail:function(a){return e.relationDetail(t)},deleteTemp:function(a){return e.deleteTemp(t)},editTemp:function(a){return e.editTemp(t)}}})}),1),e._v(" "),a("relation-dialog",{attrs:{dialogVisible:e.dialogVisible,pageId:e.pageId},on:{"update:dialogVisible":function(t){e.dialogVisible=t},"update:dialog-visible":function(t){e.dialogVisible=t},goLinkDetail:e.goLinkDetail}}),e._v(" "),0!=e.list.length?a("div",{staticClass:"text-right"},[a("el-pagination",{attrs:{background:"","page-size":e.form.pageSize,"current-page":e.form.pageNum,layout:"total, sizes, prev, pager, next, jumper","page-sizes":[20,40,60,80],total:e.total},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange,"update:pageSize":function(t){return e.$set(e.form,"pageSize",t)},"update:page-size":function(t){return e.$set(e.form,"pageSize",t)},"update:currentPage":function(t){return e.$set(e.form,"pageNum",t)},"update:current-page":function(t){return e.$set(e.form,"pageNum",t)}}})],1):e._e()],1)},staticRenderFns:[]};var d=a("VU/8")(s,g,!1,function(e){a("V30X")},"data-v-74d0c8b4",null);t.default=d.exports}});
\ No newline at end of file
webpackJsonp([14,39,115],{MtoL:function(e,t){},RXoq:function(e,t){},Uryh:function(e,t){},XZyq:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("Dd8w"),o=a.n(r),s=a("Xxa5"),i=a.n(s),n=a("exGp"),l=a.n(n),c=a("PeHS"),u=a("jssv"),d=a("P9l9"),p={name:"actCodeTable",components:{links:u.a},directives:{loadmore:{inserted:function(e,t){e.querySelector(".el-select-dropdown .el-select-dropdown__wrap").addEventListener("scroll",function(){this.clientHeight+this.scrollTop+20>=this.scrollHeight&&t.value()})}}},props:{currentGroupId:{type:[Number,String],default:-1}},data:function(){var e=this;return{tableMaxHeight:document.body.clientHeight-312+"px",inFields:{hmSelect:"",statusFlagInt:"",storeSelect:"",clerkSelect:"",hmTypeInt:"",startTime:"",endTime:"",orderByField:"createTime desc",hmGroupId:"-1"},storeSelect:1,dateTime:[],tableData:[],total:1,totalCount:100,selectPage:{type:0,dataReady:!1},actCodeList:[],loadingStatus:!1,pickerOptions:{disabledDate:function(e){var t=new Date;return e.getTime()>t.getTime()}},operateBtnArr:[{text:"数据",visible:function(t){if(e.$getButtonLimit(e.$buttonCode.dataActCode))return!0},props:{limitCode:this.$buttonCode.dataActCode},handler:function(t){e.$router.push("/actCodeDetail?hmId="+t.hmId+"&activeName=second")}},{text:"详情",visible:function(t){if(e.$getButtonLimit(e.$buttonCode.infoActCode))return!0},props:{limitCode:this.$buttonCode.infoActCode},handler:function(t){e.$router.push("/actCodeDetails?hmId="+t.hmId)}},{text:"编辑",visible:function(t){return!(!e.$getButtonLimit(e.$buttonCode.editActCode)||2==t.statusFlag)},props:{limitCode:this.$buttonCode.editActCode},handler:function(t){e.$router.push("/actCodeEdit?hmId="+t.hmId)}},{text:"下载活码",visible:function(t){return!(!e.$getButtonLimit(e.$buttonCode.downActCode)||1==t.hmType||1!=t.statusFlag)},props:{limitCode:this.$buttonCode.downActCode},handler:function(e){var t,a,r,o;t=e.hmCode+"_"+e.hmName,a=e.wxQrcode,r=a,(o=new XMLHttpRequest).open("GET",r,!0),o.responseType="blob",o.onload=function(e){var a=new Blob([o.response]),r=window.URL.createObjectURL(a),s=document.createElement("a");s.href=r,s.download=t+".png",s.click()},o.send()}},{text:"作废",visible:function(t){if(e.$getButtonLimit(e.$buttonCode.delActCode)&&2!=t.statusFlag)return!0},props:{limitCode:this.$buttonCode.delActCode},handler:function(t){e.$confirm("此操作将永久废弃该活码,请确保不影响其他投放使用!","确认要作废该活码?",{confirmButtonText:"作废",cancelButtonText:"取消",type:"warning"}).then(function(){e.loadingStatus=!0,Object(d.a)("/haoban-manage3-web/hm/qrcode/del",{hmId:t.hmId}).then(function(t){0==t.data.code&&setTimeout(function(){e.getTableList(),e.loadingStatus=!1},1e3)})})}}],selectLoading:!1,memberList:[],shopList:[],pageParam:{pageSize:20,pageNo:1},sortColumn:"",sortType:"",multipleSelection:[],selectHmIds:[],dialogGroupFormVisible:!1,formGroup:{groupId:[]},groupList:[],pageParamGroup:{groupName:"",pageNum:1,pageSize:20,total:1},name:"",storeParam:{searchParam:"",pageSize:20,currentPage:1,scenes:"integral",creatorId:"",total:1},wxQrcode:"",show:!1}},created:function(){this.searchGroup(),this.getTableList()},activated:function(){this.searchGroup(),this.getTableList()},methods:{storeMemberSe:function(e){1==e?(this.inFields.clerkSelect="",this.memberList=[]):2==e&&(this.inFields.storeSelect="",this.shopList=[])},onLoadmoreStore:function(){this.storeParam.currentPage>=this.storeParam.total||(this.storeParam.currentPage++,this.getStore())},getStore:function(){var e=this;return l()(i.a.mark(function t(){return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(d.g)("/api-plug/query-store-by-code-name-new?requestProject=haoban-manage-web",e.storeParam).then(function(t){0==t.data.errorCode&&(e.storeParam.total=t.data.totalCount,Array.isArray(t.data.result.result)&&(e.shopList=e.shopList.concat(t.data.result.result)))});case 2:case"end":return t.stop()}},t,e)}))()},remoteMethods:function(e){""!==e?(this.storeParam.searchParam=e,this.storeParam.currentPage=1,this.shopList=[],this.getStore()):this.shopList=[]},remoteMethodShop:function(e){""!==e?(this.name=e,this.memberList=[],this.getStraff()):this.memberList=[]},getStraff:function(){var e=this;return l()(i.a.mark(function t(){return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object(d.g)("/api-plug/search-clerk?type=2",{name:e.name}).then(function(t){0==t.data.errorCode&&(e.memberList=t.data.result||[])});case 2:case"end":return t.stop()}},t,e)}))()},onLoadmore:function(){this.pageParamGroup.pageNum>=this.pageParamGroup.total||(this.pageParamGroup.pageNum++,this.searchGroup())},searchGroup:function(){var e=this;return l()(i.a.mark(function t(){return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return 1==e.pageParamGroup.pageNum&&(e.groupList=[]),t.next=3,Object(d.b)("/haoban-manage3-web/hm/group/list",e.pageParamGroup).then(function(t){if(0==t.data.code){var a=t.data.result||{},r=a.result,o=a.pages;e.pageParamGroup.total=o,Array.isArray(r)&&(e.groupList=e.groupList.concat(r))}});case 3:case"end":return t.stop()}},t,e)}))()},remoteMethod:function(e){this.pageParamGroup.groupName=e,this.pageParamGroup.pageNum=1,this.groupList=[],this.searchGroup()},visibleChange:function(e){e||this.remoteMethod()},handleSelectionChange:function(e){this.multipleSelection=e,this.selectHmIds=e.map(function(e){return e.hmId})},batchGoupEvent:function(){if(0==this.selectHmIds.length)return this.$message({message:"请先选择活码",type:"warning"});this.dialogGroupFormVisible=!0,this.searchGroup()},batchOK:function(){var e=this;return l()(i.a.mark(function t(){var a;return i.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return a={hmIds:e.selectHmIds,groupId:e.formGroup.groupId},t.next=3,Object(d.f)("/haoban-manage3-web/hm/qrcode/update/qrcode/group",a).then(function(t){0==t.data.code&&(e.dialogGroupFormVisible=!1,e.$router.go(0))});case 3:case"end":return t.stop()}},t,e)}))()},handleCurrentChange:function(e){this.pageParam.pageNo=e,this.getTableList()},handleSizeChange:function(e){this.pageParam.pageNo=1,this.pageParam.pageSize=e,this.getTableList()},sortChange:function(e){this.sortColumn=e.prop,this.sortType="ascending"==e.order?"asc":"desc",this.inFields.orderByField=this.sortColumn+" "+this.sortType,this.getTableList()},searchListShop:function(){this.shopList=[]},searchList:function(e){this.pageParam.pageNo=1,this.getTableList()},getTableList:function(){var e=this;this.loadingStatus=!0,this.dateTime&&this.dateTime.length?(this.inFields.startTime=this.dateTime?this.dateTime[0]+" 00:00:00":"",this.inFields.endTime=this.dateTime?this.dateTime[1]+" 23:59:59":"",this.inFields.startTime=Date.parse(new Date(this.inFields.startTime).toString()),this.inFields.endTime=Date.parse(new Date(this.inFields.endTime).toString())):(this.inFields.startTime="",this.inFields.endTime=""),this.currentGroupId&&(this.inFields.hmGroupId=this.currentGroupId),""==this.inFields.hmSelect&&delete this.inFields.hmSelect,""==this.inFields.storeSelect&&delete this.inFields.storeSelect,""==this.inFields.clerkSelect&&delete this.inFields.clerkSelect,""==this.inFields.startTime&&delete this.inFields.startTime,""==this.inFields.endTime&&delete this.inFields.endTime;var t=o()({inFields:this.inFields},this.pageParam);this.selectPage.dataReady=!1,Object(c.a)(t).then(function(t){0==t.data.code&&(e.tableData=t.data.result.data||[],e.totalCount=t.data.result.page.totalCount),e.selectPage.dataReady=!0}).finally(function(t){e.loadingStatus=!1})}},watch:{currentGroupId:{handler:function(e){e&&(this.currentGroupId=e,this.pageParam.pageNo=1,this.getTableList())},immediate:!0}}},m={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{width:"100%"}},[a("el-form",{attrs:{inline:""}},[a("el-form-item",[a("el-input",{staticStyle:{width:"260px"},attrs:{placeholder:"请输入活码ID/名称、创建人",clearable:""},on:{change:e.searchList},model:{value:e.inFields.hmSelect,callback:function(t){e.$set(e.inFields,"hmSelect",t)},expression:"inFields.hmSelect"}},[a("i",{staticClass:"el-input__icon el-icon-search",attrs:{slot:"prefix"},slot:"prefix"})])],1),e._v(" "),a("el-form-item",[a("el-select",{staticStyle:{width:"128px"},attrs:{placeholder:"请选择"},on:{change:e.storeMemberSe},model:{value:e.storeSelect,callback:function(t){e.storeSelect=t},expression:"storeSelect"}},[a("el-option",{attrs:{label:"成员所属门店",value:1}}),e._v(" "),a("el-option",{attrs:{label:"关联导购",value:2}})],1),e._v(" "),1==e.storeSelect?a("el-select",{directives:[{name:"loadmore",rawName:"v-loadmore",value:e.onLoadmoreStore,expression:"onLoadmoreStore"}],staticStyle:{"margin-left":"-4px",width:"196px"},attrs:{filterable:"",remote:"",placeholder:"请输入门店名称/code","remote-method":e.remoteMethods,loading:e.selectLoading,clearable:"","popper-class":"s-select"},on:{change:e.searchList,clear:e.searchListShop},model:{value:e.inFields.storeSelect,callback:function(t){e.$set(e.inFields,"storeSelect",t)},expression:"inFields.storeSelect"}},e._l(e.shopList,function(t){return a("el-option",{key:t.storeId,attrs:{label:t.storeName,value:t.storeId}},[a("p",{staticClass:"sname"},[e._v(e._s(t.storeName))]),e._v(" "),a("p",{staticClass:"scode"},[e._v("code:"+e._s(t.storeCode))])])}),1):e._e(),e._v(" "),2==e.storeSelect?a("el-select",{staticStyle:{"margin-left":"-4px",width:"196px"},attrs:{filterable:"",remote:"",placeholder:"请输入成员名称/code","remote-method":e.remoteMethodShop,loading:e.selectLoading,clearable:"","popper-class":"s-select"},on:{change:e.searchList},model:{value:e.inFields.clerkSelect,callback:function(t){e.$set(e.inFields,"clerkSelect",t)},expression:"inFields.clerkSelect"}},e._l(e.memberList,function(t){return a("el-option",{key:t.clerkId,attrs:{label:t.clerkName,value:t.clerkId}},[a("p",{staticClass:"sname"},[e._v(e._s(t.clerkName))]),e._v(" "),a("p",{staticClass:"scode"},[e._v("code:"+e._s(t.clerkCode))])])}),1):e._e()],1),e._v(" "),a("el-form-item",[a("el-select",{staticClass:"w160",attrs:{placeholder:"全部状态",clearable:""},on:{change:e.searchList},model:{value:e.inFields.statusFlagInt,callback:function(t){e.$set(e.inFields,"statusFlagInt",t)},expression:"inFields.statusFlagInt"}},[a("el-option",{key:1,attrs:{label:"正常",value:1}}),e._v(" "),a("el-option",{key:2,attrs:{label:"作废",value:2}}),e._v(" "),a("el-option",{key:3,attrs:{label:"待生效",value:3}})],1)],1),e._v(" "),a("el-form-item",[a("el-select",{staticClass:"w160",attrs:{placeholder:"全部类型",clearable:""},on:{change:e.searchList},model:{value:e.inFields.hmTypeInt,callback:function(t){e.$set(e.inFields,"hmTypeInt",t)},expression:"inFields.hmTypeInt"}},[a("el-option",{key:1,attrs:{label:"单人活码",value:1}}),e._v(" "),a("el-option",{key:2,attrs:{label:"多人活码",value:2}})],1)],1),e._v(" "),a("el-form-item",[a("el-date-picker",{attrs:{editable:!1,"value-format":"yyyy-MM-dd",type:"daterange",align:"right","picker-options":e.pickerOptions,"range-separator":"至","start-placeholder":"创建开始日期","end-placeholder":"创建结束日期"},on:{change:e.searchList},model:{value:e.dateTime,callback:function(t){e.dateTime=t},expression:"dateTime"}})],1),e._v(" "),a("el-form-item",{staticClass:"frmbt20"},[e.$getButtonLimit(e.$buttonCode.batchGroup)?a("el-button",{attrs:{"limit-code":e.$buttonCode.batchGroup},on:{click:e.batchGoupEvent}},[e._v("批量分组")]):e._e(),e._v(" "),e.$getButtonLimit(e.$buttonCode.batchActCode)?a("el-button",{staticClass:"ghost-btn ",attrs:{type:"primary","limit-code":e.$buttonCode.batchActCode},on:{click:function(t){return e.$router.push("/actCodeBatch")}}},[e._v("批量创建活码")]):e._e(),e._v(" "),e.$getButtonLimit(e.$buttonCode.addActCode)?a("el-button",{attrs:{type:"primary","limit-code":e.$buttonCode.addActCode},on:{click:function(t){return e.$router.push("/actCodeAdd")}}},[e._v("新增活码")]):e._e()],1)],1),e._v(" "),a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loadingStatus,expression:"loadingStatus"}],ref:"actCodeTableRef",staticClass:"act-code-table",attrs:{data:e.tableData,"max-height":e.tableMaxHeight},on:{"sort-change":e.sortChange,"selection-change":e.handleSelectionChange}},[a("el-table-column",{attrs:{type:"selection","min-width":"60",fixed:""}}),e._v(" "),a("el-table-column",{attrs:{label:"活码ID",fixed:"","min-width":"110"},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",[e._v(e._s(r.hmCode))])]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"活码信息","min-width":"120"},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",{staticClass:"overflow-ellipsis",attrs:{title:r.hmName}},[e._v(e._s(r.hmName?r.hmName:"--"))]),e._v(" "),a("p",[1==r.hmType?a("span",{staticClass:"oneActCode"},[e._v("单人活码")]):a("span",{staticClass:"moreActCOde"},[e._v("多人活码")])])]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"活码状态","min-width":"110"},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",[1==r.statusFlag?a("span",{staticClass:"dot normal"},[e._v("正常")]):e._e(),2==r.statusFlag?a("span",{staticClass:"dot voided"},[e._v("作废")]):e._e(),3==r.statusFlag?a("span",{staticClass:"dot needSure"},[e._v("待生效")]):e._e()]),e._v(" "),1==r.overFlag?a("p",{staticClass:"toTopTip"},[e._v("(今日已达上限)")]):e._e()]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"添加好友人数",prop:"addNumT",sortable:"custom","min-width":"120"},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",[e._v(e._s(r.addNumT?r.addNumT:"--"))])]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"今日新增人数",prop:"addNum",sortable:"custom","min-width":"120"},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",[e._v(e._s(r.addNum?r.addNum:"--"))])]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"关联导购","min-width":"130","show-overflow-tooltip":""},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",{staticClass:"overflow-ellipsis"},[e._v(e._s(r.clerkList[0]?r.clerkList[0].clerkName:"--"))]),e._v(" "),a("p",{staticClass:"ft-12 phone overflow-ellipsis"},[e._v(e._s(r.clerkList[0]?"code:"+r.clerkList[0].clerkCode:"--"))]),e._v(" "),r.clerkList&&r.clerkList.length>1?a("p",[a("el-popover",{attrs:{width:"200",trigger:"click"}},[a("ul",{staticClass:"userMember-ul"},e._l(r.clerkList,function(t){return a("li",{key:t.clerkId,staticClass:"userMemberLi"},[a("p",{staticClass:"ulName"},[e._v(e._s(t.clerkName))]),e._v(" "),a("p",{staticClass:"ft-12 phone"},[e._v("code:"+e._s(t.clerkCode))])])}),0),e._v(" "),a("el-button",{staticClass:"ft-12",attrs:{slot:"reference",type:"text"},slot:"reference"},[e._v("查看更多")])],1)],1):e._e()]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"成员所属门店","min-width":"150","show-overflow-tooltip":""},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",{staticClass:"overflow-ellipsis"},[e._v(e._s(r.storeList[0]?r.storeList[0].storeName:"--"))]),e._v(" "),a("p",{staticClass:"ft-12 phone overflow-ellipsis"},[e._v(e._s(r.storeList[0]?"code:"+r.storeList[0].storeCode:"--"))]),e._v(" "),r.storeList&&r.storeList.length>1?a("p",[a("el-popover",{attrs:{width:"200",trigger:"click"}},[a("ul",{staticClass:"userMember-ul"},e._l(r.storeList,function(t){return a("li",{key:t.storeId,staticClass:"userMemberLi"},[a("p",{staticClass:"ulName"},[e._v(e._s(t.storeName))]),e._v(" "),a("p",{staticClass:"ft-12 phone"},[e._v("code:"+e._s(t.storeCode))])])}),0),e._v(" "),a("el-button",{staticClass:"ft-12",attrs:{slot:"reference",type:"text"},slot:"reference"},[e._v("查看更多")])],1)],1):e._e()]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"所属分组","min-width":"120","show-overflow-tooltip":""},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",{staticClass:"overflow-ellipsis"},[e._v(e._s(r.hmGroupName?r.hmGroupName:"--"))])]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"创建人","min-width":"100","show-overflow-tooltip":""},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("p",{staticClass:"overflow-ellipsis"},[e._v(e._s(r.creatorName?r.creatorName:"--"))])]}}])}),e._v(" "),a("el-table-column",{attrs:{label:"创建时间",prop:"createTime",sortable:"custom","min-width":"110"},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return r.createTime?[a("div",[e._v(e._s(e._f("timeStampToYmd")(r.createTime)))]),e._v(" "),a("div",[e._v(e._s(e._f("timeStampToHms")(r.createTime)))])]:void 0}}],!0)}),e._v(" "),a("el-table-column",{attrs:{label:"操作",width:"160",fixed:"right"},scopedSlots:e._u([{key:"default",fn:function(t){var r=t.row;return[a("dm-dropdown",{attrs:{"scope-data":r,max:3,configs:e.operateBtnArr}})]}}])})],1),e._v(" "),e.tableData.length?a("div",{staticClass:"block common-wrap__page text-right m-t-24"},[a("el-pagination",{attrs:{background:"","page-size":e.pageParam.pageSize,"current-page":e.pageParam.pageNo,layout:"total, sizes, prev, pager, next, jumper","page-sizes":[20,40,60,80],total:e.totalCount},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange,"update:pageSize":function(t){return e.$set(e.pageParam,"pageSize",t)},"update:page-size":function(t){return e.$set(e.pageParam,"pageSize",t)},"update:currentPage":function(t){return e.$set(e.pageParam,"pageNo",t)},"update:current-page":function(t){return e.$set(e.pageParam,"pageNo",t)}}})],1):e._e(),e._v(" "),a("el-dialog",{attrs:{title:"选择分组",visible:e.dialogGroupFormVisible,width:"500px"},on:{"update:visible":function(t){e.dialogGroupFormVisible=t}}},[a("el-form",{attrs:{model:e.formGroup}},[a("el-form-item",{attrs:{label:"活码分组",rules:[{required:!0,message:"请选择分组",trigger:"blur"}]}},[a("el-select",{directives:[{name:"loadmore",rawName:"v-loadmore",value:e.onLoadmore,expression:"onLoadmore"}],staticClass:"chooseGroup",attrs:{placeholder:"选择分组",filterable:"","filter-method":e.remoteMethod,clearable:""},on:{"visible-change":e.visibleChange},model:{value:e.formGroup.groupId,callback:function(t){e.$set(e.formGroup,"groupId",t)},expression:"formGroup.groupId"}},e._l(e.groupList,function(e){return a("el-option",{key:e.groupId,attrs:{label:e.groupName,value:e.groupId}})}),1)],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.dialogGroupFormVisible=!1}}},[e._v("取 消")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:e.batchOK}},[e._v("确 定")])],1)],1),e._v(" "),a("links",{attrs:{src:e.wxQrcode,show:e.show,imageName:e.imageName,sourceType:!1},on:{"update:show":function(t){e.show=t}}})],1)},staticRenderFns:[]};var h=a("VU/8")(p,m,!1,function(e){a("MtoL"),a("Uryh")},"data-v-76c52662",null);t.default=h.exports},rvwt:function(e,t){},t6Nl:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("Dd8w"),o=a.n(r),s=a("Xxa5"),i=a.n(s),n=a("exGp"),l=a.n(n),c=a("PeHS"),u=a("P9l9"),d={name:"staffActCodeGroupList",data:function(){var e,t=this;return{searchTip:!1,groupLoading:!1,currentListItemUuid:-1,groupList:[],scrollLoad:!1,title:"新增分组",addOrEditGroupDialog:!1,groupListForm:{groupName:"",groupId:""},groupListFormRules:{groupName:[{required:!0,message:"请输入分组名称",trigger:"blur"},{validator:(e=l()(i.a.mark(function e(a,r,o){return i.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Object(u.b)("/haoban-manage3-web/hm/group/check/name",{groupName:t.groupListForm.groupName}).then(function(e){if(t.checkNameLength=e.data.result.length,t.isEditGroup){var a=e.data.result.map(function(e){return e.groupName});t.checkNameLength>0&&t.editNamePre!=a&&o(new Error("该分组名称已存在,请重新输入")),o()}else t.checkNameLength>0&&o(new Error("该分组名称已存在,请重新输入")),o()});case 2:case"end":return e.stop()}},e,t)})),function(t,a,r){return e.apply(this,arguments)}),trigger:"blur"}]},isEditGroup:!1,allPageNum:1,pageP:{groupName:"",pageNum:1,pageSize:40},checkNameLength:-1,editNamePre:""}},created:function(){this.searchGroup()},activated:function(){this.searchGroup()},methods:{onSearch:function(){this.pageP.pageNum=1,this.searchGroup()},load:function(){this.pageP.pageNum<this.allPageNum&&(this.pageP.pageNum++,this.searchGroup())},clickGroupListItem:function(e){this.currentListItemUuid=e.groupId,this.$emit("updateList",this.currentListItemUuid)},isShowGroupListItemMore:function(e){return![1,2].includes(e.groupId)},addGroup:function(){var e=this;this.scrollLoad=!1,this.isEditGroup=!1,this.groupListForm={groupName:"",groupId:""},this.$nextTick(function(){e.$refs.groupListForm.clearValidate()}),this.addOrEditGroupDialog=!0},editGroupListItem:function(e){var t=this;this.isEditGroup=!0,this.editNamePre=e.groupName,this.$nextTick(function(){t.$refs.groupListForm.clearValidate()}),this.addOrEditGroupDialog=!0,this.groupListForm=o()({},e)},delGroupListItem:function(e){var t=this;this.$confirm("分组删除后,创建号活码时将无法选取到该分组,是否继续删除?","删除提示",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}).then(function(){if(!(t.groupList.findIndex(function(t){return t.groupId===e.groupId})<0)){var a={groupId:e.groupId};Object(c.d)(a).then(function(a){0==a.data.code&&(t.$message({type:"success",message:"删除成功!"}),t.currentListItemUuid==e.groupId&&(t.pageP.pageNum=1,t.currentListItemUuid=-1,t.$emit("updateList",t.currentListItemUuid)),t.pageP.pageNum=1,t.searchGroup())})}}).catch(function(){})},handleGroupListItem:function(){var e,t=this;this.$refs.groupListForm.validate((e=l()(i.a.mark(function e(a){var r,o,s,n;return i.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!a){e.next=15;break}if(r={},o=(t.isEditGroup?"修改":"新增")+"成功",!t.isEditGroup){e.next=10;break}return s={groupId:t.groupListForm.groupId,groupName:t.groupListForm.groupName},e.next=7,Object(c.f)(s);case 7:r=e.sent,e.next=14;break;case 10:return n={groupName:t.groupListForm.groupName},e.next=13,Object(c.b)(n);case 13:r=e.sent;case 14:0==r.data.code?(t.$message({type:"success",message:o,duration:1e3}),t.isEditGroup&&(t.groupList.find(function(e){return e.groupId==t.groupListForm.groupId}).groupName=t.groupListForm.groupName),t.pageP.pageNum=1,t.searchGroup(),t.addOrEditGroupDialog=!1):t.$message({type:"warning",message:r.data.message});case 15:case"end":return e.stop()}},e,t)})),function(t){return e.apply(this,arguments)}))},searchGroup:function(e){var t=this;return l()(i.a.mark(function e(){var a;return i.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t.groupLoading=!0,e.next=3,Object(u.b)("/haoban-manage3-web/hm/group/refer/count",{});case 3:return a=e.sent,1==t.pageP.pageNum&&(t.groupList=[{groupName:"全部分组",referNum:"",groupId:"-1"}],t.groupList[0].referNum=a.data.result),String(t.pageP.groupName)&&(t.pageP.pageNum=1,t.groupList=[]),e.next=8,Object(u.b)("/haoban-manage3-web/hm/group/list",t.pageP).then(function(e){if(0==e.data.code){var a=e.data.result||{},r=a.result,o=a.pages;t.groupList=t.groupList.concat(r),""==t.pageP.groupName?t.searchTip=!1:""!=t.pageP.groupName&&t.groupList.length<=0&&(t.searchTip=!0),t.allPageNum=o||1,t.groupLoading=!1}});case 8:case"end":return e.stop()}},e,t)}))()}}},p={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("div",{staticClass:"mb-10 mt-20 pl-16 pr-15"},[a("el-input",{attrs:{placeholder:"请输入分组名称",maxlength:"50",clearable:""},on:{change:e.onSearch},model:{value:e.pageP.groupName,callback:function(t){e.$set(e.pageP,"groupName",t)},expression:"pageP.groupName"}},[a("i",{staticClass:"el-input__icon el-icon-search",attrs:{slot:"prefix"},slot:"prefix"})])],1),e._v(" "),a("div",{staticClass:"lists-content-box infinite-list-wrapper"},[a("ul",{directives:[{name:"infinite-scroll",rawName:"v-infinite-scroll",value:e.load,expression:"load"}],staticClass:"list",attrs:{"infinite-scroll-disabled":"scrollLoad","infinite-scroll-immediate":"false","infinite-scroll-distance":"1"}},[e._l(e.groupList,function(t){return a("li",{key:t.groupId,class:["list-item","member-list",{"active-li":t.groupId==e.currentListItemUuid}],on:{click:function(a){return e.clickGroupListItem(t)}}},[a("div",{staticClass:"wrap"},[a("span",{staticClass:"listItemName overflow-ellipsis",attrs:{title:t.groupName}},[e._v(e._s(t.groupName))]),e._v(" "),a("span",[e._v(e._s("("+t.referNum+")"))])]),e._v(" "),e.isShowGroupListItemMore(t)?a("el-popover",{attrs:{placement:"bottom",trigger:"hover"}},[a("p",{staticClass:"more",on:{click:function(a){return e.editGroupListItem(t)}}},[e._v("编辑")]),e._v(" "),t.referNum?e._e():a("p",{staticClass:"more",on:{click:function(a){return e.delGroupListItem(t)}}},[e._v("删除")]),e._v(" "),"全部分组"!=t.groupName&&"默认分组"!=t.groupName?a("i",{staticClass:"iconfont-hb3 icongengduo3 icon iconhover",attrs:{slot:"reference"},slot:"reference"}):e._e()]):e._e()],1)}),e._v(" "),a("li",[e.groupLoading?a("div",{staticClass:"el-loading-spinner",staticStyle:{width:"86%"}},[a("i",{staticClass:"el-icon-loading"})]):e._e()])],2),e._v(" "),e.searchTip?a("p",{staticClass:"searchTip"},[e._v("没有找到和“"+e._s(e.pageP.groupName)+"”相关的内容")]):e._e()]),e._v(" "),e.groupList.length>1?a("div",{staticClass:"add-category"},[a("el-button",{staticClass:"ghost-btn add-group",attrs:{type:"primary"},on:{click:e.addGroup}},[e._v("新增分组")])],1):e._e(),e._v(" "),a("el-dialog",{attrs:{title:e.isEditGroup?"编辑分组":"新增分组",visible:e.addOrEditGroupDialog,width:"500px",top:"30vh","close-on-click-modal":!1},on:{"update:visible":function(t){e.addOrEditGroupDialog=t}}},[a("el-form",{ref:"groupListForm",attrs:{model:e.groupListForm,rules:e.groupListFormRules}},[a("el-form-item",{attrs:{label:"分组名称",prop:"groupName"}},[a("el-input",{attrs:{placeholder:"请输入分组名称",maxlength:10,"show-word-limit":"",clearable:""},model:{value:e.groupListForm.groupName,callback:function(t){e.$set(e.groupListForm,"groupName",t)},expression:"groupListForm.groupName"}})],1),e._v(" "),a("p",{directives:[{name:"show",rawName:"v-show",value:!e.isEditGroup,expression:"!isEditGroup"}],staticClass:"addGroupTip"},[e._v('分组名称不可重复,建议"创建人姓名-分组名称"')])],1),e._v(" "),a("span",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{on:{click:function(t){e.addOrEditGroupDialog=!1}}},[e._v("取 消")]),e._v(" "),a("el-button",{attrs:{type:"primary"},on:{click:e.handleGroupListItem}},[e._v("确 定")])],1)],1)],1)},staticRenderFns:[]};var m=a("VU/8")(d,p,!1,function(e){a("RXoq")},"data-v-192f497d",null);t.default=m.exports},tVK0:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("t6Nl"),o=a("XZyq"),s={name:"staffActCode",components:{GroupList:r.default,ActCodeTable:o.default},data:function(){return{currentGroupId:null}},methods:{getCurrentGroupID:function(e){this.currentGroupId=e}},watch:{currentGroupId:{handler:function(e){this.currentGroupId=e},immediate:!0}}},i={render:function(){var e=this.$createElement,t=this._self._c||e;return t("section",{staticClass:"app-detail-wrap"},[t("div",{staticClass:"border-box"},[t("div",{staticClass:"list-body flex"},[t("div",{staticClass:"list-left border-box"},[t("group-list",{ref:"groupListRef",on:{updateList:this.getCurrentGroupID}})],1),this._v(" "),t("div",{staticClass:"list-right p-20 border-box"},[t("dm-sub-title",{staticClass:"m-b-10",attrs:{text:"配置标签"}},[t("div",{staticClass:"title"},[t("span",[this._v("员工活码")]),this._v(" "),t("el-button",{directives:[{name:"jumpLink",rawName:"v-jumpLink:codeList",arg:"codeList"}],attrs:{type:"text"}},[t("i",{staticClass:"iconfont-hb3 iconzhibiaoshuoming m-r-6"}),this._v("指标说明")])],1)]),this._v(" "),t("act-code-table",{attrs:{currentGroupId:this.currentGroupId}})],1)])])])},staticRenderFns:[]};var n=a("VU/8")(s,i,!1,function(e){a("rvwt")},"data-v-38d73068",null);t.default=n.exports}});
\ No newline at end of file
webpackJsonp([126],{"/wAz":function(e,t){},0:function(e,t,a){a("j1ja"),e.exports=a("NHnr")},"0xDb":function(e,t,a){"use strict";t.a=function(){var e=new Date((new Date).getTime()-864e5),t=e.getTime()-7776e6,a=e.getFullYear(),o=e.getMonth()+1,n=e.getDate()<10?"0"+e.getDate():e.getDate(),r=o<10?"0"+o:o,s=new Date(t),i=s.getFullYear(),p=s.getMonth()+1,d=s.getDate()<10?"0"+s.getDate():s.getDate();return[i+"-"+(p<10?"0"+p:p)+"-"+d,a+"-"+r+"-"+n]};var o=a("woOf"),n=(a.n(o),a("fZjL")),r=(a.n(n),a("pFYg"));a.n(r),new Date},"4qCZ":function(e,t){},"5tgt":function(e,t,a){e.exports=function(e,t){return function(o){a("Opzk")("./"+e+"/"+t+".vue").then(function(e){o(e)})}}},"Ch4/":function(e,t,a){"use strict";var o=a("l6IN"),n=(a.n(o),JSON.parse(sessionStorage.getItem("userInfos")||"{}")),r="string"==typeof n.gicHost?n.gicHost.replace(/\/$/,""):"";location.origin.indexOf("localhost")>=0&&(r=location.origin),t.a={errorMsg:function(e){if(1!=e.errorCode){if(4==e.errorCode)return window.location.href=r+"/gic-web/#/login?ishb=1",!1;if(10==e.errorCode)return window.location.href=r+"/haoban-3/#/index",!1;o.Message.error({duration:2e3,message:e.message||"接口异常"})}}}},FHfR:function(e,t){e.exports={multipleAssign:"multipleAssign",assign:"assign",willSyncTag:"willSyncTag",breakSyncTag:"breakSyncTag",addShowRules:"addShowRules",editShowRules:"editShowRules",delShowRules:"delShowRules",groupExpire:"groupExpire",syncGroup:"syncGroup",addGroupTemp:"addGroupTemp",editGroupTemp:"editGroupTemp",setStoreArea:"setStoreArea",delGroupTemp:"delGroupTemp",searchSetSave:"searchSetSave",saveTrafficTaskSet:"saveTrafficTaskSet",addCard:"addCard",editCard:"editCard",delCard:"delCard",sendCardLog:"sendCardLog",getCardLog:"getCardLog",saveEvaluateSet:"saveEvaluateSet",addMaterialGroup:"addMaterialGroup",editMaterialGroup:"editMaterialGroup",delMaterialGroup:"delMaterialGroup",multipleDelAssets:"multipleDelAssets",multipleMoveAssets:"multipleMoveAssets",addText:"addText",editText:"editText",delText:"delText",textAssignStore:"textAssignStore",addImage:"addImage",editImage:"editImage",delImage:"delImage",imageAssignStore:"imageAssignStore",addWeb:"addWeb",editWeb:"editWeb",delWeb:"delWeb",webAssignStore:"webAssignStore",addVideo:"addVideo",editVideo:"editVideo",delVideo:"delVideo",videoAssignStore:"videoAssignStore",addFile:"addFile",editFile:"editFile",delFile:"delFile",fileAssignStore:"fileAssignStore",addApps:"addApps",editApps:"editApps",delApps:"delApps",appsAssignStore:"appsAssignStore",saveGoodsSet:"saveGoodsSet",exportActiveUser:"exportActiveUser",exportLoginUser:"exportLoginUser",exportAreaLoginUser:"exportAreaLoginUser",multipleDelReport:"multipleDelReport",exportReport:"exportReport",reportDetail:"reportDetail",multipleDelReportDetail:"multipleDelReportDetail",delReportDetail:"delReportDetail",showReportDetail:"showReportDetail",multipleExportReport:"multipleExportReport",saveTaskSet:"saveTaskSet",settingSystemReport:"settingSystemReport",saveSystemReport:"saveSystemReport",addCustomReport:"addCustomReport",copyCustomReport:"copyCustomReport",editCustomReport:"editCustomReport",delCustomReport:"delCustomReport",monthTarget:"monthTarget",dayTarget:"dayTarget",exportMonthTask:"exportMonthTask",checkMonthTask:"checkMonthTask",multipleDelTask:"multipleDelTask",delTask:"delTask",exportStoreList:"exportStoreList",checkStoreList:"checkStoreList",exportStoreDetail:"exportStoreDetail",checkStoreDetail:"checkStoreDetail",exportStoreDetailPop:"exportStoreDetailPop",previewStoreDetail:"previewStoreDetail",exportGrTaskList:"exportGrTaskList",checkGrTaskList:"checkGrTaskList",exportTaskRecord:"exportTaskRecord",multipleDelTaskRecord:"multipleDelTaskRecord",checkTaskRecord:"checkTaskRecord",exportTaskDetail:"exportTaskDetail",multipleDelTaskDetail:"multipleDelTaskDetail",delTaskDetail:"delTaskDetail",resolveTaskDetail:"resolveTaskDetail",previewTaskDetail:"previewTaskDetail",exportTaskView:"exportTaskView",multipleDelTaskView:"multipleDelTaskView",checkTaskView:"checkTaskView",exportTaskViewDetail:"exportTaskViewDetail",multipleDelTaskViewDetail:"multipleDelTaskViewDetail",checkTaskDetail:"checkTaskDetail",addSalutatory:"addSalutatory",editSalutatory:"editSalutatory",delSalutatory:"delSalutatory",multipleResolve:"multipleResolve",singleResolve:"singleResolve",singleReject:"singleReject",saveApplySetting:"saveApplySetting",refreshStoreMember:"refreshStoreMember",exportContact:"exportContact",checkContactDetail:"checkContactDetail",checkContactMemberDetail:"checkContactMemberDetail",checkLog:"checkLog",saveGuideSetting:"saveGuideSetting",saveAppsVisible:"saveAppsVisible",refreshStoreInfo:"refreshStoreInfo",saveMemberSecret:"saveMemberSecret",addMemberAppsSecret:"addMemberAppsSecret",editMemberAppsSecret:"editMemberAppsSecret",delMemberAppsSecret:"delMemberAppsSecret",addAppsSecret:"addAppsSecret",getAppsSecret:"getAppsSecret",editAppsSecret:"editAppsSecret",delAppsSecret:"delAppsSecret",checkAuth:"checkAuth",bindStoreList:"bindStoreList",refreshStore:"refreshStore",refreshAdminList:"refreshAdminList",addActCode:"addActCode",batchActCode:"batchActCode",batchGroup:"batchGroup",dataActCode:"dataActCode",infoActCode:"infoActCode",editActCode:"editActCode",downActCode:"downActCode",delActCode:"delActCode",recordCode:"recordCode",addLink:"addLink",dataLink:"dataLink",infoLink:"infoLink",editLink:"editLink",downLink:"downLink",recordLink:"recordLink"}},MtkU:function(e,t){},NHnr:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=a("fZjL"),n=a.n(o),r=(a("j1ja"),a("hKoQ")),s=a.n(r),i=a("mvHQ"),p=a.n(i),d=a("//Fk"),c=a.n(d),l=a("lRwf"),u=a.n(l),m=a("Ch4/"),g=a("P9l9"),h=a("Gu7T"),f=a.n(h),v=a("pRNm"),w=a.n(v),S=a("5tgt"),C=a.n(S),D=[{path:"/staffActCode",name:"员工活码",component:C()("salesleads/actCodeManage/staffActCode","index"),meta:{componentName:"staffActCode",fromPath:["/actCodeEdit","/actCodeBatch","/actCodeDetail","/actCodeDetails"]}},{path:"/actCodeRecord",name:"查看记录",component:C()("salesleads/actCodeManage/staffActCode","actCodeRecord")},{path:"/actCodeDetail",name:"活码详情-数据",component:C()("salesleads/actCodeManage/staffActCode","actCodeDetail")},{path:"/actCodeDetails",name:"活码详情-详情",component:C()("salesleads/actCodeManage/staffActCode","actCodeDetail"),meta:{componentName:"actCodeDetail",fromPath:["/actCodeRecord"]}},{path:"/actCodeAdd",name:"新增活码",component:C()("salesleads/actCodeManage/staffActCode/views","setActCode")},{path:"/actCodeEdit",name:"编辑活码",component:C()("salesleads/actCodeManage/staffActCode/views","setActCode")},{path:"/actCodeBatch",name:"批量创建活码",component:C()("salesleads/actCodeManage/staffActCode/views","batchAddCode")}],k=[{path:"/attractFlowLink",name:"引流链接",component:C()("salesleads/actCodeManage/attractFlowLink","index"),meta:{componentName:"attractFlowLink",fromPath:["/attractFlowLinkEdit/:id","/attractFlowLinkInfo/:id","/attractFlowLinkInfos/:id"]}},{path:"/attractFlowLinkAdd",name:"新增引流链接",meta:{type:"add"},component:C()("salesleads/actCodeManage/attractFlowLink","detail")},{path:"/attractFlowLinkEdit/:id",name:"编辑引流链接",meta:{type:"edit"},component:C()("salesleads/actCodeManage/attractFlowLink","detail")},{path:"/attractFlowLinkInfo/:id",name:"详情引流链接",meta:{type:"info"},component:C()("salesleads/actCodeManage/attractFlowLink","info")},{path:"/attractFlowLinkInfos/:id",name:"详情引流链接",meta:{type:"info"},component:C()("salesleads/actCodeManage/attractFlowLink","info")},{path:"/attLinkRecord",name:"查看记录",component:C()("salesleads/actCodeManage/staffActCode","actCodeRecord")},{path:"/ladingPageList",name:"落地页列表",component:C()("salesleads/actCodeManage/attractFlowLink/landingPage","list"),meta:{componentName:"ladingPageList",fromPath:["/ladingPageEdit/:id"]}},{path:"/ladingPageAdd",name:"新建落地页",meta:{type:"add"},component:C()("salesleads/actCodeManage/attractFlowLink/landingPage","detail")},{path:"/ladingPageEdit/:id",name:"编辑落地页",meta:{type:"edit"},component:C()("salesleads/actCodeManage/attractFlowLink/landingPage","detail")},{path:"/operationLog",name:"操作日志",component:C()("salesleads/actCodeManage","operateLog")}],b=[].concat(f()(D),f()(k));u.a.use(w.a);var x=function(e){a.e(1).then(a.bind(null,"ODjX")).then(function(t){e(t)})};window.sessionStorage.getItem("token")&&store.commit(types.LOGIN,window.sessionStorage.getItem("token"));var y=[{path:"/loginMore",name:"登录",component:C()("login","login-more")},{path:"/refresh",name:"刷新",component:C()("errorPage","refresh")},{path:"/",redirect:"/index",component:function(){return Promise.all([a.e(0),a.e(8)]).then(a.bind(null,"xW93"))},children:[{path:"/contactsList",name:"通讯录",component:C()("business","contacts")},{path:"/syncLog",name:"通讯录日志",component:C()("business","syncLog")},{path:"/authMerchant",name:"授权商户",component:C()("business","authMerchant")},{path:"/authMerchantForm",name:"新建授权商户",component:C()("business","authMerchant-form")},{path:"/merchantStoreList",name:"绑定门店列表",component:C()("business","storeList")},{path:"/enterpriseSet",name:"企业信息",component:C()("enterprise","enterpriseSet")},{path:"/adminList",name:"企业信息",component:C()("enterprise","adminList")},{path:"/material",name:"素材库",component:C()("enterprise","material")},{path:"/salutatory",name:"欢迎语",component:C()("enterprise","salutatoryIndex"),meta:{componentName:"salutatoryIndex",fromPath:["/editSalutatorySet"]}},{path:"/salutatorySet",name:"新建欢迎语",component:C()("enterprise","salutatorySet")},{path:"/editSalutatorySet",name:"编辑欢迎语",component:C()("enterprise","salutatorySet")},{path:"/guide-setting",name:"导购设置",component:C()("enterprise","guide-setting")},{path:"/setting",name:"操作设置",component:C()("setting","index")},{path:"/unreview",name:"未审核",component:C()("reviewCenter","unreview")},{path:"/reviewed",name:"已审核",component:C()("reviewCenter","reviewed")},{path:"/reviewSet",name:"审核设置",component:C()("reviewCenter","reviewSet")},{path:"/taskRecord",name:"话务任务记录",component:C()("salesleads/trafficTask","taskRecord"),meta:{componentName:"TaskRecord",fromPath:["/taskDetail"]}},{path:"/taskView",name:"话务任务记录",component:C()("salesleads/trafficTask","taskView")},{path:"/taskDetail",name:"话务任务详情",component:C()("salesleads/trafficTask","taskDetail")},{path:"/taskViewDetail",name:"话务任务详情",component:C()("salesleads/trafficTask","taskViewDetail")},{path:"/trafficTaskSet",name:"话务任务设置",component:C()("salesleads/trafficTask","trafficTaskSet")},{path:"/grStoreList",name:"门店视图",component:C()("salesleads/groupSend","grStoreList"),meta:{componentName:"grStoreList",fromPath:["/grStoreDetail/:id"]}},{path:"/grStoreDetail/:id",name:"门店视图",component:C()("salesleads/groupSend","grStoreDetail")},{path:"/grTaskList",name:"计划视图",component:C()("salesleads/groupSend","grTaskList")},{path:"/enterpriseUseData",name:"好办使用详情",component:C()("enterpriseData","enterpriseUseData")},{path:"/activeDetail",name:"激活人员明细",component:C()("enterpriseData","activeDetail")},{path:"/loginDetail",name:"登录人员明细",component:C()("enterpriseData","loginDetail")},{path:"/areaLoginDetail",name:"区域登录人员明细",component:C()("enterpriseData","areaLoginDetail")},{path:"/overStoreList",name:"溢出门店",component:C()("overstore","overStoreList")},{path:"/memberShowSet",name:"客户展示设置",component:C()("apps/customerApp","memberShowSet")},{path:"/addMemberShowRules",name:"新增特殊策略",component:C()("apps/customerApp","add-member-show-rules")},{path:"/editMemberShowRules",name:"编辑特殊策略",component:C()("apps/customerApp","add-member-show-rules")},{path:"/memberGroupSet",name:"客户分组设置",component:C()("apps/customerApp","memberGroupSet"),meta:{componentName:"memberGroupSet",fromPath:["/addGroupTemplate","/editGroupTemplate","/storeRangeSet"]}},{path:"/memberSearchSet",name:"客户搜索设置",component:C()("apps/customerApp","memberSearchSet")},{path:"/memberTagSet",name:"客户标签设置",component:C()("apps/customerApp","memberTagSet")},{path:"/syncHistory",name:"同步历史",component:C()("apps/customerApp","syncHistory")},{path:"/myCustomerList",name:"我的客户列表",component:C()("apps/customerApp","myCustomerList")},{path:"/addGroupTemplate",name:"添加模板",component:C()("apps/customerApp","addGroupTemplate")},{path:"/editGroupTemplate",name:"编辑模板",component:C()("apps/customerApp","addGroupTemplate")},{path:"/storeRangeSet",name:"门店范围设置",component:C()("apps/customerApp","storeRangeSet")},{path:"/dailyRecord",name:"云日报记录",component:C()("apps/cloudDaily","dailyRecord")},{path:"/dailyExport",name:"云日报导出",component:C()("apps/cloudDaily","dailyExport")},{path:"/dailyDetail",name:"日报详情",component:C()("apps/cloudDaily","dailyDetail")},{path:"/taskAssign",name:"任务下发设置",component:C()("apps/cloudDaily","taskAssign")},{path:"/daily-setting",name:"系统报表",component:C()("apps/cloudDaily","daily-setting")},{path:"/customReportSet",name:"新增自定义报表设置",component:C()("apps/cloudDaily","customReportSet")},{path:"/customReportCopy",name:"复制自定义报表设置",component:C()("apps/cloudDaily","customReportSet")},{path:"/customReportEdit",name:"编辑自定义报表设置",component:C()("apps/cloudDaily","customReportSet")},{path:"/monthList",name:"月指标列表",component:C()("apps/quota","monthList")},{path:"/storeMonthTask",name:"门店月指标",component:C()("apps/quota","storeMonthTask")},{path:"/salerMonthDetail",name:"导购月指标详情",component:C()("apps/quota","salerMonthDetail")},{path:"/companyDaySet",name:"商户日权重",component:C()("apps/quota","companyDaySet")},{path:"/monthTask",name:"月指标任务",component:C()("apps/quota","monthTask"),meta:{componentName:"monthTask",fromPath:["/monthTaskDetail"]}},{path:"/monthTaskDetail",name:"月指标任务详情",component:C()("apps/quota","monthTaskDetail")},{path:"/cardList",name:"卡券列表",component:C()("apps/card","cardList")},{path:"/cardRecord",name:"卡券记录",component:C()("apps/card","cardRecord")},{path:"/newCard",name:"新建卡券",component:C()("apps/card","newCard")},{path:"/editCard",name:"编辑卡券",component:C()("apps/card","newCard")},{path:"/cardTemplate",name:"卡券模板",component:C()("apps/protectCard","cardTemplate")},{path:"/newCardTemp",name:"新建模板",component:C()("apps/protectCard","newCardTemp")},{path:"/cardStrategy",name:"卡券策略",component:C()("apps/protectCard","cardStrategy")},{path:"/newCardStrategy",name:"新建策略",component:C()("apps/protectCard","newCardStrategy")},{path:"/cardPut",name:"内购券投放",component:C()("apps/protectCard","cardPut")},{path:"/newCardPut",name:"新建补发",component:C()("apps/protectCard","newCardPut")},{path:"/cardPutRecord",name:"投放记录",component:C()("apps/protectCard","cardPutRecord")},{path:"/cardGetRecord",name:"领取记录",component:C()("apps/protectCard","cardGetRecord")},{path:"/goodsShowSet",name:"商品展示设置",component:C()("apps/shoppingCenter","goodsShowSet")},{path:"/evaluate-set",name:"订单评价",component:C()("apps/order-evaluate","evaluate-set")}].concat(f()(b),[{path:"/403",name:"无权访问",component:x},{path:"/404",name:"error404",component:x},{path:"/500",name:"error500",component:x}])},{path:"/gic-error",name:"gic跳转失败页",component:C()("errorPage","gic-error")}],A=new w.a({routes:y,scrollBehavior:function(){return{y:0}}}),T=["/login","/loginMore"],M="",R="";A.beforeEach(function(e,t,a){M=e.path,R=t.path,sessionStorage.getItem("hbReload")?sessionStorage.removeItem("hbReload"):T.includes(R)&&(sessionStorage.setItem("hbReload",1),setTimeout(function(){location.reload()},50)),a()});var L={name:"App",data:function(){return{loading:!0,menuList:[],pageRight:[]}},beforeDestroy:function(){document.removeEventListener("visibilitychange",this.checkUser)},created:function(){var e=this;document.addEventListener("visibilitychange",this.checkUser),this.getUserInfo().then(function(){T.includes(M)||T.includes(R)?e.loading=!1:c.a.all([e.getRight(),e.getMenuList()]).finally(function(){setTimeout(function(){return e.loading=!1},200)})})},methods:{checkUser:function(){var e=this;if(!document.hidden){var t=JSON.parse(sessionStorage.getItem("userInfos"));this.getUserInfo().then(function(){JSON.parse(sessionStorage.getItem("userInfos")).clerkId!=t.clerkId&&e.$router.push("/refresh")})}},getUserInfo:function(){return Object(g.g)("/haoban-manage3-web/get-login-info",{}).then(function(e){var t=e.data||{},a=t.errorCode,o=t.result;1==a?(sessionStorage.setItem("userInfos",p()(o)),o.enterpriseId&&(u.a.axios.defaults.headers.common.enterpriseId=o.enterpriseId)):m.a.errorMsg(e.data)})},getMenuList:function(){var e=this;return Object(g.b)("/haoban-manage3-web/get-haoban-menu",{}).then(function(t){var a=t.data||[],o=a.errorCode,n=a.result;1==o?Array.isArray(n)&&(e.menuList=n,e.setIndexRoute(n)):m.a.errorMsg(t.data)})},getRight:function(){var e=this;return Object(g.b)("/haoban-manage3-web/get-haoban-right",{}).then(function(t){var a=t.data||{},o=a.errorCode,n=a.result;1==o?(e.pageRight=e.getPageRight(n.menu),e.checkButtonRight(n.button),e.checkPageRight(e.pageRight,function(e){return function(e,t){e&&e.menuCode&&console.log(t.filter(function(t){return t.parentCode==e.menuCode}))}(e,n.button)})):m.a.errorMsg(t.data)})},getPageRight:function(e){return e.filter(function(e){return"string"==typeof e.menuUrl&&e.menuUrl.length>0}).map(function(e){for(var t=e.menuUrl,a=/(:.*)(\/?)/;a.test(t);)t=t.replace(a,"([\\d\\w]+[\\-]*[\\d\\w]*)$2");for(a=/(\/\*)(\/?)/;a.test(t);)t=t.replace(a,"([\\d\\w]+[\\-]*[\\d\\w]*)$2");return e.regexp=new RegExp("^/"+t+"$"),e})},checkButtonRight:function(e){u.a.prototype.$getButtonLimit=function(t){return 1==(e.find(function(e){return e.menuCode==t})||{}).hasRight}},checkPageRight:function(e,t){var a=e.find(function(e){return e.regexp.test(M)});if(a&&0==a.hasRight){var o=sessionStorage.getItem("hbReloadPath")||"";a.menuUrl==o.substr(1)?(this.$router.push("/index"),sessionStorage.removeItem("hbReloadPath")):this.$router.push({path:"/403"})}t(a),A.beforeEach(function(a,o,n){var r=e.find(function(e){return e.regexp.test(a.path)});if(t(r),r&&0==r.hasRight)return n({path:"/403"});n()})},setIndexRoute:function(e){var t="",a=[{path:"*",redirect:"/404"}];e.some(function(e){return e.hasRight&&e.isShow&&Array.isArray(e.childList)&&e.childList.some(function(e){return e.hasRight&&e.isShow&&Array.isArray(e.childList)&&e.childList.some(function(e){return e.hasRight&&e.isShow&&(t=e.menuUrl),e.hasRight&&e.isShow}),t}),t}),t&&a.push({path:"/index",redirect:"/"+t}),this.$router.addRoutes(a)}}},E={render:function(){var e=this.$createElement,t=this._self._c||e;return t("div",{directives:[{name:"loading",rawName:"v-loading",value:this.loading,expression:"loading"}],staticStyle:{"min-height":"100vh"},attrs:{id:"app"}},[t("transition",{attrs:{name:"fade",mode:"out-in"}},[this.loading?this._e():t("router-view",{attrs:{"menu-list":this.menuList,"page-right":this.pageRight}})],1)],1)},staticRenderFns:[]};var I,P=a("VU/8")(L,E,!1,function(e){a("MtkU")},null,null).exports,F=a("bOdI"),G=a.n(F),V=a("SJI6"),j=a.n(V),q=a("0xDb");u.a.use(j.a);var N=new j.a.Store({state:{user:{},token:null,title:"",show:!1,bgHeight:window.screen.availHeight-440-24+"px",addDepartment:[],editDepartment:[],delDepartment:[],wxEnterpriseType:0,salesDate:Object(q.a)()},mutations:(I={},G()(I,"login",function(e,t){sessionStorage.token=t,e.token=t}),G()(I,"logout",function(e){sessionStorage.removeItem("token"),e.token=null}),G()(I,"title",function(e,t){e.title=t}),G()(I,"show",function(e,t){e.show=t}),G()(I,"saveAdd",function(e,t){e.addDepartment.push(t)}),G()(I,"saveEdit",function(e,t){e.editDepartment.push(t)}),G()(I,"saveDel",function(e,t){e.delDepartment.push(t)}),G()(I,"clearAdd",function(e){e.addDepartment=[]}),G()(I,"clearEdit",function(e){e.editDepartment=[]}),G()(I,"clearData",function(e){e.addDepartment=[],e.editDepartment=[],e.delDepartment=[]}),G()(I,"changeWxEntertype",function(e,t){e.wxEnterpriseType=t}),G()(I,"changeSalesDate",function(e,t){e.salesDate=t}),I),actions:{saveAddInfo:function(e,t){e.commit("saveAdd",t)},saveEditInfo:function(e,t){e.commit("saveEdit",t)},saveDelInfo:function(e,t){e.commit("saveDel",t)},clearAddData:function(e,t){e.commit("clearAdd")},clearEditData:function(e,t){e.commit("clearEdit")},clearTreeData:function(e,t){e.commit("clearData")},changeWxEntertypeData:function(e,t){e.commit("changeWxEntertype",t)},changeSales:function(e,t){e.commit("changeSalesDate",t)}}}),U={codeList:"https://www.yuque.com/exnmlu/oo64hg/thm172#WRdju",codeGl:"https://www.yuque.com/exnmlu/oo64hg/thm172#ADEzt",codeCkmx:"https://www.yuque.com/exnmlu/oo64hg/thm172#mDlza",linkList:"https://www.yuque.com/exnmlu/oo64hg/lggf7q#WRdju",linkGl:"https://www.yuque.com/exnmlu/oo64hg/lggf7q#ADEzt",linkCkmx:"https://www.yuque.com/exnmlu/oo64hg/lggf7q#mDlza"},H={clipboard:{bind:function(e,t,a,o){e.val=t.value,e.handler=function(){var t=e.val,a=document.createElement("input");e.appendChild(a),a.value=t,a.select(),document.execCommand("Copy"),u.a.prototype.$message({type:"success",message:"复制成功"}),a.parentNode.removeChild(a)},e.addEventListener("click",e.handler)},update:function(e,t,a,o){e.val=t.value},unbind:function(e){e.removeEventListener("click",e.handler)}},jumpLink:{bind:function(e,t){var a=t.arg;e.handler=function(){window.open(U[a])},e.addEventListener("click",e.handler)},unbind:function(e){e.removeEventListener("click",e.handler)}}},O=(a("/wAz"),a("pc4g"),a("4qCZ"),a("xtVA"),a("Q0Ca")),Y={props:{size:{type:[Number,String],default:20},iconname:{type:String,default:""}},computed:{ClassStyle:function(){return"width:"+parseInt(this.size)+";height:"+parseInt(this.size)+";"},IconName:function(){return"#"+this.iconname}}},z={render:function(){var e=this.$createElement,t=this._self._c||e;return t("svg",{staticClass:"icon svg-icon svg-iconfont-hb3",style:this.ClassStyle,attrs:{"aria-hidden":"true"}},[t("use",{attrs:{"xlink:href":this.IconName}})])},staticRenderFns:[]};var W=a("VU/8")(Y,z,!1,function(e){a("mF/g")},"data-v-aa28dd00",null).exports,$=a("TUaa"),J=a.n($),B=a("tyqE"),X=a.n(B),Q=a("pRVe"),K=a.n(Q),Z=a("XsK6"),_=a.n(Z),ee=a("QRL9"),te=a.n(ee),ae=a("eMjc"),oe=a.n(ae),ne=a("l9mu"),re=a.n(ne),se={install:function(e,t){e.prototype.getPdf=function(){var e=this.htmlTitle;oe()(document.querySelector("#pdfDom"),{allowTaint:!0,foreignObjectRendering:!0}).then(function(t){var a=t.width,o=t.height,n=a/592.28*841.89,r=o,s=0,i=592.28/a*o,p=t.toDataURL("image/jpeg",1),d=new re.a("","pt","a4");if(r<n)d.addImage(p,"JPEG",0,0,595.28,i);else for(;r>0;)d.addImage(p,"JPEG",0,s,595.28,i),s-=841.89,(r-=n)>0&&d.addPage();d.save(e+".pdf")})}}},ie=a("/IwO"),pe=a.n(ie),de=a("FHfR"),ce=a.n(de),le={name:"HbFormBottom",inject:["layoutVm"],props:{horizontal:{type:String,default:"center"}},data:function(){return{width:"0px"}},mounted:function(){this.width=this.$parent.$el.offsetWidth+"px",this.layoutVm.pagePaddingBottom=this.$el.offsetHeight+"px"},beforeDestroy:function(){this.layoutVm.pagePaddingBottom=null}},ue={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"hb-form-bottom",style:{width:this.width,"justify-content":"left"==this.horizontal?"flex-start":"right"==this.horizontal?"flex-end":"center"}},[this._t("default")],2)},staticRenderFns:[]};var me=a("VU/8")(le,ue,!1,function(e){a("dKGT")},"data-v-87d7ea0c",null).exports;s.a.polyfill(),u.a.component("svg-icon",W),n()(H).map(function(e){return u.a.directive(e,H[e])}),u.a.use(pe.a),pe.a.initAMapApiLoader({key:"d53a58848be368a7398dc56d5670fe9c",plugin:["Autocomplete","PlaceSearch","Scale","OverView","Geocoder","ToolBar","MapType","PolyEditor","AMap.CircleEditor"],v:"1.4.4"}),window.ELEMENT.Dialog.props.closeOnClickModal.default=!1,u.a.use(se),u.a.use(_.a),u.a.use(te.a),u.a.use(K.a),u.a.use(X.a),u.a.use(J.a),u.a.component("hb-form-bottom",me),u.a.config.productionTip=!1,n()(O.a).forEach(function(e){u.a.filter(e,O.a[e])}),A.beforeEach(function(e,t,a){window.axiosPromiseArr&&axiosPromiseArr.forEach(function(e,t){e.cancel(),delete axiosPromiseArr[t]});var o=window.location.origin;o.indexOf("localhost"),a()}),u.a.prototype.$buttonCode=ce.a,new u.a({el:"#app",router:A,store:N,components:{App:P},template:"<App/>"})},OMN4:function(e,t){e.exports=axios},Opzk:function(e,t,a){var o={"./apps/badEvaluate/badEvaluateDetail.vue":["Yz8m",0,78],"./apps/badEvaluate/badEvaluateRecord.vue":["DCIc",0,98],"./apps/badEvaluate/badEvaluateSet.vue":["moBL",0,89],"./apps/badEvaluate/index.vue":["AG22",0,40],"./apps/card/cardList.vue":["X5LE",0,101],"./apps/card/cardRecord.vue":["xDJN",0,29],"./apps/card/index.vue":["nV1L",0,67],"./apps/card/newCard.vue":["7/Zw",0,22],"./apps/cloudDaily/customReport.vue":["ak3k",0,64],"./apps/cloudDaily/customReportSet.vue":["LTPC",0,7],"./apps/cloudDaily/daily-setting.vue":["RnLd",0,6],"./apps/cloudDaily/dailyDetail.vue":["JwJ7",0,30],"./apps/cloudDaily/dailyExport.vue":["H3Dc",0,38],"./apps/cloudDaily/dailyRecord.vue":["IuWw",0,65],"./apps/cloudDaily/index.vue":["4QyY",0,90],"./apps/cloudDaily/systemReport.vue":["J/6z",0,9],"./apps/cloudDaily/taskAssign.vue":["Hb/M",0,53],"./apps/cloudDaily/template/block.vue":["O3gZ",88],"./apps/cloudDaily/template/date-range.vue":["2WGr",81],"./apps/cloudDaily/template/image.vue":["8dpP",55],"./apps/cloudDaily/template/input.vue":["zHtI",96],"./apps/cloudDaily/template/select.vue":["rYZf",84],"./apps/customerApp/add-member-show-rules.vue":["SUcx",58],"./apps/customerApp/addGroupTemplate.vue":["vIlm",0,41],"./apps/customerApp/index.vue":["QHTa",0,62],"./apps/customerApp/memberDetailSet.vue":["F1Rz",0,54],"./apps/customerApp/memberGroupList.vue":["scn4",0,68],"./apps/customerApp/memberGroupSet.vue":["JuNN",0,18],"./apps/customerApp/memberGroupSetList.vue":["8fbE",0,113],"./apps/customerApp/memberSearchSet.vue":["Z3Aa",0,122],"./apps/customerApp/memberShowSet.vue":["odfG",99],"./apps/customerApp/memberTagSet.vue":["HmLC",51],"./apps/customerApp/myCustomerList.vue":["9CCr",0,11],"./apps/customerApp/storeRangeSet.vue":["z3jf",0,86],"./apps/customerApp/syncHistory.vue":["T435",52],"./apps/index.vue":["K1Vb",0,73],"./apps/order-evaluate/bad-evaluate-set.vue":["z2RJ",0,77],"./apps/order-evaluate/evaluate-set.vue":["RvMj",94],"./apps/order-evaluate/index.vue":["NUSj",0,61],"./apps/protectCard/cardGetRecord.vue":["5GE8",0,117],"./apps/protectCard/cardPut.vue":["cD4x",0,76],"./apps/protectCard/cardPutRecord.vue":["dhLd",0,104],"./apps/protectCard/cardStrategy.vue":["rUvh",0,45],"./apps/protectCard/cardTemplate.vue":["c7iB",0,102],"./apps/protectCard/index.vue":["aWmL",0,121],"./apps/protectCard/newCardPut.vue":["9db3",0,15],"./apps/protectCard/newCardStrategy.vue":["8Rwt",0,16],"./apps/protectCard/newCardTemp.vue":["tF0P",0,80],"./apps/quota/companyDaySet.vue":["NiGE",0,92],"./apps/quota/index.vue":["qSX4",0,95],"./apps/quota/monthList.vue":["fAFA",0,97],"./apps/quota/monthTask.vue":["NpHY",0,66],"./apps/quota/monthTaskDetail.vue":["YKf6",0,79],"./apps/quota/salerMonthDetail.vue":["+qr5",0,120],"./apps/quota/storeMonthTask.vue":["qWC+",0,69],"./apps/shoppingCenter/goodsShowSet.vue":["XrL3",0,93],"./apps/shoppingCenter/index.vue":["FIFf",0,109],"./business/authMerchant-dailog.vue":["/cEq",0,33],"./business/authMerchant-form.vue":["2xxS",0,10],"./business/authMerchant.vue":["mjMK",123],"./business/contacts.vue":["/W60",0,4],"./business/index.vue":["jPcV",0,100],"./business/not-manager.vue":["9F6+",0],"./business/orgStructSet.vue":["OI5V",0,3],"./business/recycle.vue":["K8Yn",0,75],"./business/storeList.vue":["QZxC",0,111],"./business/syncLog.vue":["20P3",0,46],"./enterprise/adminList.vue":["zYBJ",0,119],"./enterprise/app-visible-setting.vue":["w5vQ",72],"./enterprise/enterpriseSet.vue":["x5Fx",0,21],"./enterprise/guide-auth-setting.vue":["i0rV",116],"./enterprise/guide-setting.vue":["tPY2",24],"./enterprise/index.vue":["m9dW",0,107],"./enterprise/material.vue":["q+Sm",0,2],"./enterprise/relationDialog.vue":["+hGG",0],"./enterprise/salutatory.vue":["xWf4",0,74],"./enterprise/salutatoryIndex.vue":["nExe",0,27],"./enterprise/salutatorySet.vue":["vqCN",0,19],"./enterpriseData/activeDetail.vue":["h9Ca",0,32],"./enterpriseData/areaLoginDetail.vue":["TLd+",0,26],"./enterpriseData/enterpriseUseData.vue":["i4c9",0,5],"./enterpriseData/index.vue":["CTf4",0,91],"./enterpriseData/loginDetail.vue":["kX6v",0,12],"./errorPage/403.vue":["6XGN",43],"./errorPage/404.vue":["AejC",42],"./errorPage/500.vue":["FskK",35],"./errorPage/gic-error.vue":["Q3j/",70],"./errorPage/index.vue":["ODjX",1],"./errorPage/refresh.vue":["0/JE",124],"./index/index.vue":["JXTs",0,37],"./login/index.vue":["T+/8",0,34],"./login/login-more.vue":["AVFt",0,50],"./overstore/index.vue":["Y55K",0,118],"./overstore/overStoreList.vue":["vuAV",0,57],"./reviewCenter/index.vue":["+lem",110],"./reviewCenter/reviewSet.vue":["6j9f",0,103],"./reviewCenter/reviewed.vue":["CLYF",0,31],"./reviewCenter/unreview.vue":["xCEU",0,17],"./salesleads/actCodeManage/attractFlowLink/detail.vue":["ATNk",0,47],"./salesleads/actCodeManage/attractFlowLink/index.vue":["7m4r",0,105],"./salesleads/actCodeManage/attractFlowLink/info.vue":["phd8",0,23],"./salesleads/actCodeManage/attractFlowLink/landingPage/cardView.vue":["4KYo",48],"./salesleads/actCodeManage/attractFlowLink/landingPage/detail.vue":["t/sc",0,112],"./salesleads/actCodeManage/attractFlowLink/landingPage/list.vue":["fjEt",0,13],"./salesleads/actCodeManage/attractFlowLink/landingPage/relationDialog.vue":["GdW8",0,106],"./salesleads/actCodeManage/attractFlowLink/newAddChart.vue":["tqu3",0,114],"./salesleads/actCodeManage/components/select-clerk/index.vue":["znzC",0],"./salesleads/actCodeManage/components/select-clerk/select-clerk.vue":["1Am8",0],"./salesleads/actCodeManage/components/select-clerk/selected-clerk-item.vue":["jMsE",0],"./salesleads/actCodeManage/operateLog.vue":["EzCA",0,87],"./salesleads/actCodeManage/staffActCode/actCodeDetail.vue":["DWsn",0,28],"./salesleads/actCodeManage/staffActCode/actCodeDetailStatistics.vue":["YQXN",0,85],"./salesleads/actCodeManage/staffActCode/actCodeRecord.vue":["jx8Q",0,36],"./salesleads/actCodeManage/staffActCode/index.vue":["tVK0",0,14],"./salesleads/actCodeManage/staffActCode/newAddChart.vue":["eaYI",0],"./salesleads/actCodeManage/staffActCode/views/act-code-table.vue":["XZyq",0,39],"./salesleads/actCodeManage/staffActCode/views/batchAddCode.vue":["/pg7",0,56],"./salesleads/actCodeManage/staffActCode/views/group-list.vue":["t6Nl",0,115],"./salesleads/actCodeManage/staffActCode/views/setActCode.vue":["txZy",0,83],"./salesleads/components/act-code-set.vue":["1fzb",0],"./salesleads/components/actCodeDetailInfo.vue":["DvcT",0],"./salesleads/components/dataDetail.vue":["/p6h",0],"./salesleads/components/welcomesItem.vue":["42hH",0],"./salesleads/groupSend/grStoreDetail.vue":["XF7X",0,20],"./salesleads/groupSend/grStoreList.vue":["w4UW",0,71],"./salesleads/groupSend/grTaskList.vue":["Uvr8",0,108],"./salesleads/index.vue":["owWS",0,44],"./salesleads/trafficTask/taskDetail.vue":["wRTX",0,25],"./salesleads/trafficTask/taskRecord.vue":["Wj0m",0,60],"./salesleads/trafficTask/taskView.vue":["TsS9",0,49],"./salesleads/trafficTask/taskViewDetail.vue":["f1qT",0,63],"./salesleads/trafficTask/trafficTaskSet.vue":["3Qek",0,59],"./setting/index.vue":["VlR1",0,82]};function n(e){var t=o[e];return t?Promise.all(t.slice(1).map(a.e)).then(function(){return a(t[0])}):Promise.reject(new Error("Cannot find module '"+e+"'."))}n.keys=function(){return Object.keys(o)},n.id="Opzk",e.exports=n},P9l9:function(e,t,a){"use strict";a.d(t,"b",function(){return D}),a.d(t,"a",function(){return k}),a.d(t,"g",function(){return b}),a.d(t,"f",function(){return x}),a.d(t,"e",function(){return y}),a.d(t,"d",function(){return A}),a.d(t,"c",function(){return T});var o=a("//Fk"),n=a.n(o),r=a("lRwf"),s=a.n(r),i=a("Rf8U"),p=a.n(i),d=a("OMN4"),c=a.n(d),l=a("mw3O"),u=a.n(l),m=a("l6IN");a.n(m);s.a.use(p.a,c.a),s.a.axios.defaults.withCredentials=!0,s.a.axios.defaults.headers.common.platform="haoban",s.a.axios.defaults.timeout=5e5;var g=window.location.origin,h=JSON.parse(sessionStorage.getItem("userInfos")||"{}"),f="string"==typeof h.gicHost?h.gicHost.replace(/\/$/,""):"";console.log(f),g.indexOf("localhost")>=0&&(f=g);var v=[],w=[],S=s.a.axios.CancelToken,C=function(e){for(var t in w)w[t].u===e.url+"&"+e.method&&(w[t].f(),w.splice(t,1))};s.a.axios.interceptors.request.use(function(e){if(C(e),e.cancelToken=new S(function(t){w.push({u:e.url+"&"+e.method,f:t})}),e.cancelToken=new s.a.axios.CancelToken(function(e){v.push({cancel:e})}),sessionStorage.getItem("userInfoBrandId")){var t=sessionStorage.getItem("userInfoBrandId");t&&(e.headers.enterpriseId=t)}return e},function(e){return m.Message.error({message:"请求超时!"}),n.a.resolve(e)}),s.a.axios.interceptors.response.use(function(e){if(C(e.config),e.status&&200==e.status&&1!=e.data.errorCode&&0!=e.data.code){if(4==e.data.errorCode){if(-1!=window.location.href.indexOf("gic-error"))return!1;window.location.href=f+"/gic-web/#/login?ishb=1"}return 10!=e.data.errorCode&&7!=e.data.errorCode||(window.location.href=f+"/haoban-3/#/index"),e}return e},function(e){return 502==e.response.status&&(window.location.href=f+"/gic-web/#/login?ishb=1",m.Message.error({message:"服务异常⊙﹏⊙∥"})),403!=e.response.status&&(window.location.href=f+"/gic-web/#/login?ishb=1",m.Message.error({message:"登录失效!"})),n.a.resolve(e)});var D=function(e,t){return t.requestProject="haoban-manage-web",s.a.axios({method:"get",url:""+g+e,data:{},params:t,headers:{"Content-type":"application/x-www-form-urlencoded"}})},k=function(e,t){return t.requestProject="haoban-manage-web",s.a.axios({method:"delete",url:""+g+e,data:{},params:t,headers:{"Content-type":"application/x-www-form-urlencoded"}})},b=function(e,t){return t.requestProject="haoban-manage-web",s.a.axios({method:"post",url:""+g+e,data:u.a.stringify(t),headers:{"Content-type":"application/x-www-form-urlencoded"}})},x=function(e,t){return t.requestProject="haoban-manage-web",s.a.axios({method:"post",url:""+g+e,data:t,headers:{"Content-Type":"application/json;charset=UTF-8"}})},y=function(e,t){return s.a.axios({method:"post",url:""+g+e,data:t,params:{requestProject:"haoban-manage-web"},headers:{"Content-Type":"application/json;charset=UTF-8"}})},A=function(e,t){return t.requestProject="haoban-manage-web",s.a.axios({method:"post",url:""+g+e,data:t,headers:{}})},T=function(e,t){return t.requestProject="haoban-manage-web",s.a.axios({method:"post",url:""+g+e,data:u.a.stringify(t),responseType:"blob",headers:{"content-type":"application/x-www-form-urlencoded"}})}},Q0Ca:function(e,t,a){"use strict";t.a={dateFormat:function(e,t){if(e){e=10===e.toString().length?1e3*e:e;var a=new Date(e),o={"M+":a.getMonth()+1,"D+":a.getDate(),W:"日一二三四五六".charAt(a.getDay()),"h+":a.getHours(),"m+":a.getMinutes(),"s+":a.getSeconds(),"q+":Math.floor((a.getMonth()+3)/3),S:a.getMilliseconds()};for(var n in/(Y+)/.test(t)&&(t=t.replace(RegExp.$1,(a.getFullYear()+"").substr(4-RegExp.$1.length))),o)new RegExp("("+n+")").test(t)&&(t=t.replace(RegExp.$1,1===RegExp.$1.length?o[n]:("00"+o[n]).substr((""+o[n]).length)));return t}},formatTimeStamp:function(e){if(e){var t=new Date(e),a=t.getMonth()+1,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=a<10?"0"+a:a,r=t.getHours()<10?"0"+t.getHours():t.getHours(),s=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes(),i=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds();return t.getFullYear()+"-"+n+"-"+o+" "+r+":"+s+":"+i}},timeStampToYm:function(e){if(e){var t=new Date(e),a=t.getMonth()+1,o=a<10?"0"+a:a;return t.getFullYear()+"-"+o}},timeStampToYmd:function(e){if(e){var t=new Date(e),a=t.getMonth()+1,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=a<10?"0"+a:a;return t.getFullYear()+"-"+n+"-"+o}},timeStampToHms:function(e){if(e){var t=new Date(e);return(t.getHours()<10?"0"+t.getHours():t.getHours())+":"+(t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes())+":"+(t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds())}},formatTimeYmdHms:function(e){if(e){var t=new Date(e),a=t.getMonth()+1,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=a<10?"0"+a:a,r=t.getHours()<10?"0"+t.getHours():t.getHours(),s=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes(),i=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds();return t.getFullYear()+"."+n+"."+o+" "+r+":"+s+":"+i}},formatPhoneNum:function(e){return e?(e=e.toString()).substr(0,3)+"****"+e.substr(7,11):""},timeStampToYmd2:function(e){if(e){var t=new Date(e-864e5),a=t.getMonth()+1,o=t.getDate()<10?"0"+t.getDate():t.getDate(),n=a<10?"0"+a:a;return t.getFullYear()+"-"+n+"-"+o}},formatName:function(e){return e?"**"+(e=e.toString()).substr(e.length-1,e.length):""},timeStampSpace:function(e){if(e){var t=new Date,a=new Date(Number(e)).getTime()-t.getTime();if(a<0)return"";var o=a%864e5,n=o%36e5;return Math.floor(a/864e5)+"天"+Math.floor(o/36e5)+"小时"+Math.floor(n/6e4)+"分"}},formatTime:function(e){if(!e)return"00:00:00";var t=e/1e3,a=Math.floor(t/60/60/24);return(24*a+Math.floor(t/60/60)%24<10?"0"+(24*a+Math.floor(t/60/60)%24):24*a+Math.floor(t/60/60)%24)+":"+(Math.floor(t/60)%60<10?"0"+Math.floor(t/60)%60:Math.floor(t/60)%60)+":"+(Math.floor(t)%60<10?"0"+Math.floor(t)%60:Math.floor(t)%60)},formatInvalidStatus:function(e){var t="--";return 1==e?t="未失效":2==e&&(t="已失效"),t}}},SJI6:function(e,t){e.exports=Vuex},dKGT:function(e,t){},l6IN:function(e,t){e.exports=ELEMENT},lRwf:function(e,t){e.exports=Vue},"mF/g":function(e,t){},pRNm:function(e,t){e.exports=VueRouter},pc4g:function(e,t){},xtVA:function(e,t){}},[0]);
\ No newline at end of file
<<<<<<< HEAD:dist/static/js/manifest.e717f3f6c902c7a6d67f.js
!function(e){var f=window.webpackJsonp;window.webpackJsonp=function(a,b,n){for(var r,t,o,i=0,u=[];i<a.length;i++)t=a[i],c[t]&&u.push(c[t][0]),c[t]=0;for(r in b)Object.prototype.hasOwnProperty.call(b,r)&&(e[r]=b[r]);for(f&&f(a,b,n);u.length;)u.shift()();if(n)for(i=0;i<n.length;i++)o=d(d.s=n[i]);return o};var a={},c={127:0};function d(f){if(a[f])return a[f].exports;var c=a[f]={i:f,l:!1,exports:{}};return e[f].call(c.exports,c,c.exports,d),c.l=!0,c.exports}d.e=function(e){var f=c[e];if(0===f)return new Promise(function(e){e()});if(f)return f[2];var a=new Promise(function(a,d){f=c[e]=[a,d]});f[2]=a;var b=document.getElementsByTagName("head")[0],n=document.createElement("script");n.type="text/javascript",n.charset="utf-8",n.async=!0,n.timeout=12e4,d.nc&&n.setAttribute("nonce",d.nc),n.src=d.p+"static/js/"+e+"."+{0:"bd8122baa17a6bf40950",1:"fd15a7f381f3fc4a55fe",2:"faa3f58faff392d74bbb",3:"cf88d56554ebd1b98880",4:"f48e99bcbd5757fd7f21",5:"9caf2662daa480edc216",6:"af2182f100f8821a40bf",7:"ce05700a7df2d5562c63",8:"a68ff96625b01ad69eb7",9:"ccdd5ef4287324da425a",10:"0c309eceb04d492e8695",11:"c8269a6ce3166c2baddb",12:"62aacaf39a18c9d0c559",13:"af8dbda8aead2733f959",14:"34ac983117b5d6440647",15:"9d0d587ff1c54fd27ed2",16:"03efbc3fd86def29dffe",17:"bea90e10f3e91e59fb36",18:"edc7a426bdab510f497a",19:"13396f66eabc204faf54",20:"b2063783bda9d1a2361e",21:"11826617f80c3d124999",22:"ed2d87a3b61cb1bcd405",23:"33ace7a5fc24922ae259",24:"f4f5fbc8a0755d988763",25:"f0488296b7e86a8c6ef0",26:"9bcaea2d90c17205d28d",27:"aeef277e50f51aee1062",28:"97cc4ec34acceea6b0fc",29:"de009f2b0d63edea642f",30:"060b9cefa8769c93002d",31:"f831c34cfed019396376",32:"43cb44570ca4705a8e71",33:"7905d75f9175f609d621",34:"6bc9f5faa99efb8fd2e9",35:"46083964a212c678907a",36:"3a5599a16aac7937e555",37:"850afd86dcf45b00c297",38:"01bc0f8f23d0731dda44",39:"c77317bde6a560f384ce",40:"a21604896caab2ce2991",41:"5aaff40d52d018b1d342",42:"4c5c6fb596a3a580d5e6",43:"8fd4c4cc5cbfefdef418",44:"6b085ba5eccd8e026fb4",45:"ccba0860f1d79740cbfe",46:"8c5af0d05d98b6e7f672",47:"d40cbe8899a76e2b13dd",48:"9f17d9a314a70880c83b",49:"55ed36c94931276ccedd",50:"480dab4ae9e1e775459c",51:"cb35a36da37fff01aebf",52:"d011bbf6eb68b0afe482",53:"5eb6577a05917a822fa5",54:"000e875fc44a37d1bffa",55:"b6e727b20fb3f6b2db14",56:"97ccee7ced4746e51568",57:"f65318474f9d86cf98a3",58:"7eb9b5cd2237002868a5",59:"7f512eb01d2e429c2476",60:"e6b9c65ce37c1929ba43",61:"e4069c16ebc689b0dc37",62:"08c93fc8b5cec569384e",63:"0cc4b18a26aae449bca8",64:"8d2437cad744ac931b05",65:"eba6f55d8e9a3f5f1556",66:"4ff9b01f9f65e8d72911",67:"2ad7878ba5300bbb2075",68:"6ede6fc15f1a70e4d43e",69:"d94655bd1519e3531e92",70:"808db550f342fbfe1d67",71:"766bab0863a53aeb3841",72:"44f1e5c579e6a918563f",73:"40d5effce4dd1d610bae",74:"d2df8a125f082781388a",75:"2c7a9137991f6fac666f",76:"6fa5a4895a9b645af850",77:"3755e506e2e6ccb2f4e0",78:"e4261d251a8566c89c9e",79:"c367f2170b933640c5fb",80:"b4da3a16a49aa7dec44c",81:"ed9f776c33449e4502f5",82:"f1f0b8be9fe8c0a48f49",83:"c298352267668f8595b9",84:"3a3d94cb0710361148ba",85:"0d7ce1d2a38c10ad5a2e",86:"c0ad564fc61aa87cc435",87:"a39c162a5f1066e1f2f6",88:"b535eaf6d4dcf1bee6c5",89:"640cf72f57490ec7bf53",90:"ae2a8e165d9d9a31e58e",91:"4e3182a759a0deb7737b",92:"0e522fc1ebf4f123fbbc",93:"527fae0b341867534fcb",94:"b17e42293b65c7831e31",95:"1cd2779682b88f36cc44",96:"2608b94dc3560dd462cc",97:"286de4a55de4f21aefa4",98:"f395537903ef38a74302",99:"56bd214ee9e9f47d1319",100:"8cd690fd2c3b369ca997",101:"e9b064951e0bd2ac4fc1",102:"6266585ead51278628b3",103:"f365ce110e2febef23d2",104:"7ddd6d683f54c5c651e4",105:"dd7cffff77160083ac84",106:"360b805cc2bdec5f62f8",107:"666d576bb039b61dfed5",108:"26497aa6b68d1990d2b5",109:"9d53d6f7cda3a99ed217",110:"7f2acc61341dfb31cc16",111:"f904f0da7f8b566254f2",112:"8de9fb6d574ec5e1563a",113:"327231106e788fa15be9",114:"ff12a943c23c0f590d98",115:"ce4969a4fb2eec09fb34",116:"876d6cbfd9ba3b20e6a3",117:"579a3852194611d7f74f",118:"21e29512096ca553a970",119:"b3a1ae7697da88feebe9",120:"88735ccd1c5ad39b0619",121:"e6c2472082fd34715888",122:"f198a229d799225c8247",123:"e04284f495f670fd6bd7",124:"29147952d0ffef007ae9"}[e]+".js";var r=setTimeout(t,12e4);function t(){n.onerror=n.onload=null,clearTimeout(r);var f=c[e];0!==f&&(f&&f[1](new Error("Loading chunk "+e+" failed.")),c[e]=void 0)}return n.onerror=n.onload=t,b.appendChild(n),a},d.m=e,d.c=a,d.d=function(e,f,a){d.o(e,f)||Object.defineProperty(e,f,{configurable:!1,enumerable:!0,get:a})},d.n=function(e){var f=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(f,"a",f),f},d.o=function(e,f){return Object.prototype.hasOwnProperty.call(e,f)},d.p="./",d.oe=function(e){throw console.error(e),e}}([]);
=======
!function(e){var f=window.webpackJsonp;window.webpackJsonp=function(c,b,n){for(var r,t,o,i=0,u=[];i<c.length;i++)t=c[i],a[t]&&u.push(a[t][0]),a[t]=0;for(r in b)Object.prototype.hasOwnProperty.call(b,r)&&(e[r]=b[r]);for(f&&f(c,b,n);u.length;)u.shift()();if(n)for(i=0;i<n.length;i++)o=d(d.s=n[i]);return o};var c={},a={127:0};function d(f){if(c[f])return c[f].exports;var a=c[f]={i:f,l:!1,exports:{}};return e[f].call(a.exports,a,a.exports,d),a.l=!0,a.exports}d.e=function(e){var f=a[e];if(0===f)return new Promise(function(e){e()});if(f)return f[2];var c=new Promise(function(c,d){f=a[e]=[c,d]});f[2]=c;var b=document.getElementsByTagName("head")[0],n=document.createElement("script");n.type="text/javascript",n.charset="utf-8",n.async=!0,n.timeout=12e4,d.nc&&n.setAttribute("nonce",d.nc),n.src=d.p+"static/js/"+e+"."+{0:"23523c5eee1fd093314d",1:"fd15a7f381f3fc4a55fe",2:"e10c1ef8b5f00dafcabe",3:"cf88d56554ebd1b98880",4:"f48e99bcbd5757fd7f21",5:"3734ef864d7dffe7af16",6:"af2182f100f8821a40bf",7:"ce05700a7df2d5562c63",8:"a68ff96625b01ad69eb7",9:"ccdd5ef4287324da425a",10:"0c309eceb04d492e8695",11:"c8269a6ce3166c2baddb",12:"62aacaf39a18c9d0c559",13:"45d70634362111570db1",14:"d30ac3318aba3c694af0",15:"9d0d587ff1c54fd27ed2",16:"03efbc3fd86def29dffe",17:"bea90e10f3e91e59fb36",18:"edc7a426bdab510f497a",19:"13396f66eabc204faf54",20:"b2063783bda9d1a2361e",21:"9d28421365d59dd36d09",22:"ed2d87a3b61cb1bcd405",23:"33ace7a5fc24922ae259",24:"f4f5fbc8a0755d988763",25:"f0488296b7e86a8c6ef0",26:"9bcaea2d90c17205d28d",27:"aeef277e50f51aee1062",28:"97cc4ec34acceea6b0fc",29:"de009f2b0d63edea642f",30:"060b9cefa8769c93002d",31:"f831c34cfed019396376",32:"43cb44570ca4705a8e71",33:"7905d75f9175f609d621",34:"6bc9f5faa99efb8fd2e9",35:"46083964a212c678907a",36:"3a5599a16aac7937e555",37:"850afd86dcf45b00c297",38:"01bc0f8f23d0731dda44",39:"c77317bde6a560f384ce",40:"a21604896caab2ce2991",41:"5aaff40d52d018b1d342",42:"4c5c6fb596a3a580d5e6",43:"8fd4c4cc5cbfefdef418",44:"6b085ba5eccd8e026fb4",45:"ccba0860f1d79740cbfe",46:"8c5af0d05d98b6e7f672",47:"d40cbe8899a76e2b13dd",48:"9f17d9a314a70880c83b",49:"55ed36c94931276ccedd",50:"480dab4ae9e1e775459c",51:"cb35a36da37fff01aebf",52:"d011bbf6eb68b0afe482",53:"5eb6577a05917a822fa5",54:"000e875fc44a37d1bffa",55:"b6e727b20fb3f6b2db14",56:"97ccee7ced4746e51568",57:"f65318474f9d86cf98a3",58:"7eb9b5cd2237002868a5",59:"7f512eb01d2e429c2476",60:"e6b9c65ce37c1929ba43",61:"e4069c16ebc689b0dc37",62:"08c93fc8b5cec569384e",63:"0cc4b18a26aae449bca8",64:"8d2437cad744ac931b05",65:"eba6f55d8e9a3f5f1556",66:"4ff9b01f9f65e8d72911",67:"2ad7878ba5300bbb2075",68:"6ede6fc15f1a70e4d43e",69:"d94655bd1519e3531e92",70:"808db550f342fbfe1d67",71:"766bab0863a53aeb3841",72:"44f1e5c579e6a918563f",73:"40d5effce4dd1d610bae",74:"d2df8a125f082781388a",75:"2c7a9137991f6fac666f",76:"6fa5a4895a9b645af850",77:"3755e506e2e6ccb2f4e0",78:"e4261d251a8566c89c9e",79:"c367f2170b933640c5fb",80:"b4da3a16a49aa7dec44c",81:"ed9f776c33449e4502f5",82:"f1f0b8be9fe8c0a48f49",83:"c298352267668f8595b9",84:"3a3d94cb0710361148ba",85:"0d7ce1d2a38c10ad5a2e",86:"c0ad564fc61aa87cc435",87:"a39c162a5f1066e1f2f6",88:"b535eaf6d4dcf1bee6c5",89:"640cf72f57490ec7bf53",90:"ae2a8e165d9d9a31e58e",91:"4e3182a759a0deb7737b",92:"0e522fc1ebf4f123fbbc",93:"527fae0b341867534fcb",94:"b17e42293b65c7831e31",95:"1cd2779682b88f36cc44",96:"2608b94dc3560dd462cc",97:"286de4a55de4f21aefa4",98:"f395537903ef38a74302",99:"56bd214ee9e9f47d1319",100:"8cd690fd2c3b369ca997",101:"e9b064951e0bd2ac4fc1",102:"6266585ead51278628b3",103:"f365ce110e2febef23d2",104:"7ddd6d683f54c5c651e4",105:"dd7cffff77160083ac84",106:"360b805cc2bdec5f62f8",107:"666d576bb039b61dfed5",108:"26497aa6b68d1990d2b5",109:"9d53d6f7cda3a99ed217",110:"7f2acc61341dfb31cc16",111:"f904f0da7f8b566254f2",112:"8de9fb6d574ec5e1563a",113:"327231106e788fa15be9",114:"ff12a943c23c0f590d98",115:"ce4969a4fb2eec09fb34",116:"876d6cbfd9ba3b20e6a3",117:"579a3852194611d7f74f",118:"21e29512096ca553a970",119:"b3a1ae7697da88feebe9",120:"88735ccd1c5ad39b0619",121:"e6c2472082fd34715888",122:"f198a229d799225c8247",123:"e04284f495f670fd6bd7",124:"29147952d0ffef007ae9"}[e]+".js";var r=setTimeout(t,12e4);function t(){n.onerror=n.onload=null,clearTimeout(r);var f=a[e];0!==f&&(f&&f[1](new Error("Loading chunk "+e+" failed.")),a[e]=void 0)}return n.onerror=n.onload=t,b.appendChild(n),c},d.m=e,d.c=c,d.d=function(e,f,c){d.o(e,f)||Object.defineProperty(e,f,{configurable:!1,enumerable:!0,get:c})},d.n=function(e){var f=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(f,"a",f),f},d.o=function(e,f){return Object.prototype.hasOwnProperty.call(e,f)},d.p="./",d.oe=function(e){throw console.error(e),e}}([]);
>>>>>>> parent of 5210656b... update: dist:dist/static/js/manifest.81a98aa67000f6a4682e.js
......@@ -13,7 +13,7 @@
<meta charset="utf-8">
<link rel="shortcut icon" href="./favicon.ico" />
<title>好办管理平台</title>
<link rel="stylesheet" type="text/css" href="//web-1251519181.file.myqcloud.com/custom-element/custom-element.1.0.73.css" />
<link rel="stylesheet" type="text/css" href="//web-1251519181.file.myqcloud.com/custom-element/custom-element.1.0.76.css" />
<!--好办后台3.0-->
<!-- <link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_1628375_vcg1gtmx7lb.css" /> -->
<script src="//at.alicdn.com/t/font_1628375_vcg1gtmx7lb.js"></script>
......@@ -29,7 +29,7 @@
(function() {
var src = '/component/static/import-component.js?timestrap='+ new Date().getTime();
var host = window.location.host;
host = host.indexOf('localhost') > -1 || host.indexOf('192.168') > -1 ? 'gicdev.demogic.com' : host;
host = host.indexOf('localhost') > -1 || host.indexOf('192.168') > -1 ? 'www.gicdev.com' : host;
document.write('<script src="//'+ host + src +'"><\/script>')
})()
</script>
......
......@@ -322,6 +322,25 @@ module.exports = {
adminList: {
// 1.刷新(按钮)
refreshAdminList: ['刷新', 1, 2]
}
},
// 按钮名称、是否受权限控制0否1是、是否增删改0:跳转 1:增删改 2:其他、按钮跳转路径
actCode: {
addActCode: ['新建活码', 1, 0],
batchActCode: ['批量创建活码', 1, 0],
batchGroup: ['批量分组', 1, 1],
dataActCode: ['数据', 1, 0],
infoActCode: ['详情', 1, 0],
editActCode: ['编辑', 1, 1],
downActCode: ['下载活码', 1, 1],
delActCode: ['作废', 1, 1],
recordCode: ['查看记录', 1, 0]
},
linkCode: {
addLink: ['新建链接', 1, 0],
dataLink: ['数据', 1, 0],
infoLink: ['详情', 1, 0],
editLink: ['编辑', 1, 0],
downLink: ['链接', 1, 1],
recordLink: ['查看记录', 1, 0]
}
}
{"multipleAssign":"multipleAssign","assign":"assign","willSyncTag":"willSyncTag","breakSyncTag":"breakSyncTag","addShowRules":"addShowRules","editShowRules":"editShowRules","delShowRules":"delShowRules","groupExpire":"groupExpire","syncGroup":"syncGroup","addGroupTemp":"addGroupTemp","editGroupTemp":"editGroupTemp","setStoreArea":"setStoreArea","delGroupTemp":"delGroupTemp","searchSetSave":"searchSetSave","saveTrafficTaskSet":"saveTrafficTaskSet","addCard":"addCard","editCard":"editCard","delCard":"delCard","sendCardLog":"sendCardLog","getCardLog":"getCardLog","saveEvaluateSet":"saveEvaluateSet","addMaterialGroup":"addMaterialGroup","editMaterialGroup":"editMaterialGroup","delMaterialGroup":"delMaterialGroup","multipleDelAssets":"multipleDelAssets","multipleMoveAssets":"multipleMoveAssets","addText":"addText","editText":"editText","delText":"delText","textAssignStore":"textAssignStore","addImage":"addImage","editImage":"editImage","delImage":"delImage","imageAssignStore":"imageAssignStore","addWeb":"addWeb","editWeb":"editWeb","delWeb":"delWeb","webAssignStore":"webAssignStore","addVideo":"addVideo","editVideo":"editVideo","delVideo":"delVideo","videoAssignStore":"videoAssignStore","addFile":"addFile","editFile":"editFile","delFile":"delFile","fileAssignStore":"fileAssignStore","addApps":"addApps","editApps":"editApps","delApps":"delApps","appsAssignStore":"appsAssignStore","saveGoodsSet":"saveGoodsSet","exportActiveUser":"exportActiveUser","exportLoginUser":"exportLoginUser","exportAreaLoginUser":"exportAreaLoginUser","multipleDelReport":"multipleDelReport","exportReport":"exportReport","reportDetail":"reportDetail","multipleDelReportDetail":"multipleDelReportDetail","delReportDetail":"delReportDetail","showReportDetail":"showReportDetail","multipleExportReport":"multipleExportReport","saveTaskSet":"saveTaskSet","settingSystemReport":"settingSystemReport","saveSystemReport":"saveSystemReport","addCustomReport":"addCustomReport","copyCustomReport":"copyCustomReport","editCustomReport":"editCustomReport","delCustomReport":"delCustomReport","monthTarget":"monthTarget","dayTarget":"dayTarget","exportMonthTask":"exportMonthTask","checkMonthTask":"checkMonthTask","multipleDelTask":"multipleDelTask","delTask":"delTask","exportStoreList":"exportStoreList","checkStoreList":"checkStoreList","exportStoreDetail":"exportStoreDetail","checkStoreDetail":"checkStoreDetail","exportStoreDetailPop":"exportStoreDetailPop","previewStoreDetail":"previewStoreDetail","exportGrTaskList":"exportGrTaskList","checkGrTaskList":"checkGrTaskList","exportTaskRecord":"exportTaskRecord","multipleDelTaskRecord":"multipleDelTaskRecord","checkTaskRecord":"checkTaskRecord","exportTaskDetail":"exportTaskDetail","multipleDelTaskDetail":"multipleDelTaskDetail","delTaskDetail":"delTaskDetail","resolveTaskDetail":"resolveTaskDetail","previewTaskDetail":"previewTaskDetail","exportTaskView":"exportTaskView","multipleDelTaskView":"multipleDelTaskView","checkTaskView":"checkTaskView","exportTaskViewDetail":"exportTaskViewDetail","multipleDelTaskViewDetail":"multipleDelTaskViewDetail","checkTaskDetail":"checkTaskDetail","addSalutatory":"addSalutatory","editSalutatory":"editSalutatory","delSalutatory":"delSalutatory","multipleResolve":"multipleResolve","singleResolve":"singleResolve","singleReject":"singleReject","saveApplySetting":"saveApplySetting","refreshStoreMember":"refreshStoreMember","exportContact":"exportContact","checkContactDetail":"checkContactDetail","checkContactMemberDetail":"checkContactMemberDetail","checkLog":"checkLog","saveGuideSetting":"saveGuideSetting","saveAppsVisible":"saveAppsVisible","refreshStoreInfo":"refreshStoreInfo","saveMemberSecret":"saveMemberSecret","addMemberAppsSecret":"addMemberAppsSecret","editMemberAppsSecret":"editMemberAppsSecret","delMemberAppsSecret":"delMemberAppsSecret","addAppsSecret":"addAppsSecret","getAppsSecret":"getAppsSecret","editAppsSecret":"editAppsSecret","delAppsSecret":"delAppsSecret","checkAuth":"checkAuth","bindStoreList":"bindStoreList","refreshStore":"refreshStore","refreshAdminList":"refreshAdminList"}
\ No newline at end of file
{"multipleAssign":"multipleAssign","assign":"assign","willSyncTag":"willSyncTag","breakSyncTag":"breakSyncTag","addShowRules":"addShowRules","editShowRules":"editShowRules","delShowRules":"delShowRules","groupExpire":"groupExpire","syncGroup":"syncGroup","addGroupTemp":"addGroupTemp","editGroupTemp":"editGroupTemp","setStoreArea":"setStoreArea","delGroupTemp":"delGroupTemp","searchSetSave":"searchSetSave","saveTrafficTaskSet":"saveTrafficTaskSet","addCard":"addCard","editCard":"editCard","delCard":"delCard","sendCardLog":"sendCardLog","getCardLog":"getCardLog","saveEvaluateSet":"saveEvaluateSet","addMaterialGroup":"addMaterialGroup","editMaterialGroup":"editMaterialGroup","delMaterialGroup":"delMaterialGroup","multipleDelAssets":"multipleDelAssets","multipleMoveAssets":"multipleMoveAssets","addText":"addText","editText":"editText","delText":"delText","textAssignStore":"textAssignStore","addImage":"addImage","editImage":"editImage","delImage":"delImage","imageAssignStore":"imageAssignStore","addWeb":"addWeb","editWeb":"editWeb","delWeb":"delWeb","webAssignStore":"webAssignStore","addVideo":"addVideo","editVideo":"editVideo","delVideo":"delVideo","videoAssignStore":"videoAssignStore","addFile":"addFile","editFile":"editFile","delFile":"delFile","fileAssignStore":"fileAssignStore","addApps":"addApps","editApps":"editApps","delApps":"delApps","appsAssignStore":"appsAssignStore","saveGoodsSet":"saveGoodsSet","exportActiveUser":"exportActiveUser","exportLoginUser":"exportLoginUser","exportAreaLoginUser":"exportAreaLoginUser","multipleDelReport":"multipleDelReport","exportReport":"exportReport","reportDetail":"reportDetail","multipleDelReportDetail":"multipleDelReportDetail","delReportDetail":"delReportDetail","showReportDetail":"showReportDetail","multipleExportReport":"multipleExportReport","saveTaskSet":"saveTaskSet","settingSystemReport":"settingSystemReport","saveSystemReport":"saveSystemReport","addCustomReport":"addCustomReport","copyCustomReport":"copyCustomReport","editCustomReport":"editCustomReport","delCustomReport":"delCustomReport","monthTarget":"monthTarget","dayTarget":"dayTarget","exportMonthTask":"exportMonthTask","checkMonthTask":"checkMonthTask","multipleDelTask":"multipleDelTask","delTask":"delTask","exportStoreList":"exportStoreList","checkStoreList":"checkStoreList","exportStoreDetail":"exportStoreDetail","checkStoreDetail":"checkStoreDetail","exportStoreDetailPop":"exportStoreDetailPop","previewStoreDetail":"previewStoreDetail","exportGrTaskList":"exportGrTaskList","checkGrTaskList":"checkGrTaskList","exportTaskRecord":"exportTaskRecord","multipleDelTaskRecord":"multipleDelTaskRecord","checkTaskRecord":"checkTaskRecord","exportTaskDetail":"exportTaskDetail","multipleDelTaskDetail":"multipleDelTaskDetail","delTaskDetail":"delTaskDetail","resolveTaskDetail":"resolveTaskDetail","previewTaskDetail":"previewTaskDetail","exportTaskView":"exportTaskView","multipleDelTaskView":"multipleDelTaskView","checkTaskView":"checkTaskView","exportTaskViewDetail":"exportTaskViewDetail","multipleDelTaskViewDetail":"multipleDelTaskViewDetail","checkTaskDetail":"checkTaskDetail","addSalutatory":"addSalutatory","editSalutatory":"editSalutatory","delSalutatory":"delSalutatory","multipleResolve":"multipleResolve","singleResolve":"singleResolve","singleReject":"singleReject","saveApplySetting":"saveApplySetting","refreshStoreMember":"refreshStoreMember","exportContact":"exportContact","checkContactDetail":"checkContactDetail","checkContactMemberDetail":"checkContactMemberDetail","checkLog":"checkLog","saveGuideSetting":"saveGuideSetting","saveAppsVisible":"saveAppsVisible","refreshStoreInfo":"refreshStoreInfo","saveMemberSecret":"saveMemberSecret","addMemberAppsSecret":"addMemberAppsSecret","editMemberAppsSecret":"editMemberAppsSecret","delMemberAppsSecret":"delMemberAppsSecret","addAppsSecret":"addAppsSecret","getAppsSecret":"getAppsSecret","editAppsSecret":"editAppsSecret","delAppsSecret":"delAppsSecret","checkAuth":"checkAuth","bindStoreList":"bindStoreList","refreshStore":"refreshStore","refreshAdminList":"refreshAdminList","addActCode":"addActCode","batchActCode":"batchActCode","batchGroup":"batchGroup","dataActCode":"dataActCode","infoActCode":"infoActCode","editActCode":"editActCode","downActCode":"downActCode","delActCode":"delActCode","recordCode":"recordCode","addLink":"addLink","dataLink":"dataLink","infoLink":"infoLink","editLink":"editLink","downLink":"downLink","recordLink":"recordLink"}
\ No newline at end of file
# 配置页面
# 配置页面
### 配置给后端的数据:<br />
根据本目录下的result.xlsx表头,填入对应内容,<br />
<font color="red">
注意:1.code是两位代表一个层级,新增01开始。
2.按钮和页面只能一对一。
</font>
#### 新增左侧菜单:<br />
示例:在设置下新增一级菜单操作日志,操作日志下新增二级菜单操作日志<br />
抓包接口get-haoban-menu,填入对应模板的第一级menuCode作为父菜单code,配置icon.
![avatar][1]
#### 新增页面不在菜单:
示例:在营销模块下的活码管理-员工活码下新增页面,页面通过按钮跳转访问。
1.在本目录下的button-code.js中新增按钮配置,运行 node 'menu-data\create-menu-json.js' 并在页面代码中埋点。
2.页面菜单填按钮code,有按钮权限则有页面权限,权限树上挂的是按钮。按钮填页面code,有页面权限则有按钮权限,权限树上挂的是页面。
![avatar][2]
![avatar][3]
[1]:data:image/png;base64,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
[2]:data:image/png;base64,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
[3]:data:image/png;base64,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
\ No newline at end of file
......@@ -97,7 +97,7 @@
"vue-axios": "^2.1.1",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.6.6",
"vue-template-compiler": "2.6.6",
"vuedraggable": "^2.23.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
......
......@@ -62,3 +62,15 @@ export const statisticsClerk = params => postJsonRequest('/haoban-manage3-web/hm
// 【活码链接】-- 门店列表
export const storeListApi = params => getRequest('/haoban-manage3-web/hm/store-list', params);
// 日志查询列表
export const logList = params => getRequest('/haoban-manage3-web/log-record/list', params);
// 获取 业务模块
export const businessType = params => getRequest('/haoban-manage3-web/log-record/business-types', params);
// 获取 操作类型
export const optTypes = params => getRequest('/haoban-manage3-web/log-record/opt-types', params);
// 获取 操作人姓名/手机号
export const listUserBySearchName = params => getRequest('/haoban-manage3-web/list-user-by-search-name', params);
......@@ -18,6 +18,7 @@ Vue.axios.defaults.withCredentials = true; // cookie访问
Vue.axios.defaults.headers.common['platform'] = 'haoban';
Vue.axios.defaults.timeout = 500000;
let local = window.location.origin;
const userInfos = JSON.parse(sessionStorage.getItem('userInfos') || '{}');
let gicHost = typeof userInfos.gicHost == 'string' ? userInfos.gicHost.replace(/\/$/, '') : '';
......@@ -75,29 +76,36 @@ Vue.axios.interceptors.request.use(
Vue.axios.interceptors.response.use(
data => {
removePending(data.config); //在一个ajax响应后再执行一下取消操作,把已经完成的请求从pending中移除
// if (data.status && data.status == 200 && (data.data.errorCode != 1||data.data.code!=1)) {
// if (data.data.errorCode == 4) {
// if (window.location.href.indexOf('gic-error') != -1) {
// return false;
// }
// window.location.href = gicHost + '/gic-web/#/login?ishb=1';
// }
// if (data.data.errorCode == 10 || data.data.errorCode == 7) {
// window.location.href = gicHost + '/haoban-3/#/index';
// }
// return data;
// if (data.data.hasOwnProperty('errorCode') && data.data.errorCode != 1 && data.data.errorCode != 0) {
// Message.error({ message: `${data.data.message}` });
// }
// if (data.data.hasOwnProperty('code') && data.data.code != 0) {
// Message.error({ message: `${data.data.message}` });
// }
if (data.status && data.status == 200 && data.data.errorCode != 1 && data.data.code != 0) {
if (data.data.errorCode == 4) {
if (window.location.href.indexOf('gic-error') != -1) {
return false;
}
window.location.href = gicHost + '/gic-web/#/login?ishb=1';
}
if (data.data.errorCode == 10 || data.data.errorCode == 7) {
window.location.href = gicHost + '/haoban-3/#/index';
}
return data;
}
return data;
},
err => {
// if (err.response.status == 502) {
// window.location.href = gicHost + '/gic-web/#/login?ishb=1';
// Message.error({ message: '服务异常⊙﹏⊙∥' });
// }
// if (err.response.status != 403) {
// window.location.href = gicHost + '/gic-web/#/login?ishb=1';
// Message.error({ message: '登录失效!' });
// }
if (err.response.status == 502) {
window.location.href = gicHost + '/gic-web/#/login?ishb=1';
Message.error({ message: '服务异常⊙﹏⊙∥' });
}
if (err.response.status != 403) {
window.location.href = gicHost + '/gic-web/#/login?ishb=1';
Message.error({ message: '登录失效!' });
}
return Promise.resolve(err);
}
);
......
src/assets/QRcode.png

15 KB | W: | H:

src/assets/QRcode.png

3.63 KB | W: | H:

src/assets/QRcode.png
src/assets/QRcode.png
src/assets/QRcode.png
src/assets/QRcode.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -55,6 +55,36 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont-hb3">&#xecaf;</span>
<div class="name">close-circle-fill</div>
<div class="code-name">&amp;#xecaf;</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3">&#xeb83;</span>
<div class="name">下载</div>
<div class="code-name">&amp;#xeb83;</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3">&#xee14;</span>
<div class="name">操作日志</div>
<div class="code-name">&amp;#xee14;</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3">&#xec64;</span>
<div class="name">no-data</div>
<div class="code-name">&amp;#xec64;</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3">&#xebcc;</span>
<div class="name">user-default</div>
<div class="code-name">&amp;#xebcc;</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3">&#xebeb;</span>
<div class="name">电话</div>
<div class="code-name">&amp;#xebeb;</div>
......@@ -73,6 +103,12 @@
</li>
<li class="dib">
<span class="icon iconfont-hb3">&#xec98;</span>
<div class="name">更多</div>
<div class="code-name">&amp;#xec98;</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3">&#xe62c;</span>
<div class="name">close</div>
<div class="code-name">&amp;#xe62c;</div>
......@@ -810,9 +846,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont-hb3';
src: url('iconfont.woff2?t=1657521279508') format('woff2'),
url('iconfont.woff?t=1657521279508') format('woff'),
url('iconfont.ttf?t=1657521279508') format('truetype');
src: url('iconfont.woff2?t=1659429607578') format('woff2'),
url('iconfont.woff?t=1659429607578') format('woff'),
url('iconfont.ttf?t=1659429607578') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
......@@ -839,6 +875,51 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont-hb3 iconclose-circle-fill"></span>
<div class="name">
close-circle-fill
</div>
<div class="code-name">.iconclose-circle-fill
</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3 iconxiazai"></span>
<div class="name">
下载
</div>
<div class="code-name">.iconxiazai
</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3 iconcaozuorizhi"></span>
<div class="name">
操作日志
</div>
<div class="code-name">.iconcaozuorizhi
</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3 iconno-data"></span>
<div class="name">
no-data
</div>
<div class="code-name">.iconno-data
</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3 iconuser-default"></span>
<div class="name">
user-default
</div>
<div class="code-name">.iconuser-default
</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3 icondianhua"></span>
<div class="name">
电话
......@@ -866,6 +947,15 @@
</li>
<li class="dib">
<span class="icon iconfont-hb3 icongengduo3"></span>
<div class="name">
更多
</div>
<div class="code-name">.icongengduo3
</div>
</li>
<li class="dib">
<span class="icon iconfont-hb3 iconclose1"></span>
<div class="name">
close
......@@ -1974,6 +2064,46 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconclose-circle-fill"></use>
</svg>
<div class="name">close-circle-fill</div>
<div class="code-name">#iconclose-circle-fill</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconxiazai"></use>
</svg>
<div class="name">下载</div>
<div class="code-name">#iconxiazai</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconcaozuorizhi"></use>
</svg>
<div class="name">操作日志</div>
<div class="code-name">#iconcaozuorizhi</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconno-data"></use>
</svg>
<div class="name">no-data</div>
<div class="code-name">#iconno-data</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconuser-default"></use>
</svg>
<div class="name">user-default</div>
<div class="code-name">#iconuser-default</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icondianhua"></use>
</svg>
<div class="name">电话</div>
......@@ -1998,6 +2128,14 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icongengduo3"></use>
</svg>
<div class="name">更多</div>
<div class="code-name">#icongengduo3</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconclose1"></use>
</svg>
<div class="name">close</div>
......
@font-face {
font-family: "iconfont-hb3"; /* Project id 1628375 */
src: url('iconfont.woff2?t=1657521279508') format('woff2'),
url('iconfont.woff?t=1657521279508') format('woff'),
url('iconfont.ttf?t=1657521279508') format('truetype');
src: url('iconfont.woff2?t=1659429607578') format('woff2'),
url('iconfont.woff?t=1659429607578') format('woff'),
url('iconfont.ttf?t=1659429607578') format('truetype');
}
.iconfont-hb3 {
......@@ -13,6 +13,26 @@
-moz-osx-font-smoothing: grayscale;
}
.iconclose-circle-fill:before {
content: "\ecaf";
}
.iconxiazai:before {
content: "\eb83";
}
.iconcaozuorizhi:before {
content: "\ee14";
}
.iconno-data:before {
content: "\ec64";
}
.iconuser-default:before {
content: "\ebcc";
}
.icondianhua:before {
content: "\ebeb";
}
......@@ -25,6 +45,10 @@
content: "\ec97";
}
.icongengduo3:before {
content: "\ec98";
}
.iconclose1:before {
content: "\e62c";
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -6,6 +6,41 @@
"description": "",
"glyphs": [
{
"icon_id": "30997616",
"name": "close-circle-fill",
"font_class": "close-circle-fill",
"unicode": "ecaf",
"unicode_decimal": 60591
},
{
"icon_id": "19954052",
"name": "下载",
"font_class": "xiazai",
"unicode": "eb83",
"unicode_decimal": 60291
},
{
"icon_id": "27402276",
"name": "操作日志",
"font_class": "caozuorizhi",
"unicode": "ee14",
"unicode_decimal": 60948
},
{
"icon_id": "27977097",
"name": "no-data",
"font_class": "no-data",
"unicode": "ec64",
"unicode_decimal": 60516
},
{
"icon_id": "24838426",
"name": "user-default",
"font_class": "user-default",
"unicode": "ebcc",
"unicode_decimal": 60364
},
{
"icon_id": "25538381",
"name": "电话",
"font_class": "dianhua",
......@@ -27,6 +62,13 @@
"unicode_decimal": 60567
},
{
"icon_id": "28687124",
"name": "更多",
"font_class": "gengduo3",
"unicode": "ec98",
"unicode_decimal": 60568
},
{
"icon_id": "1457645",
"name": "close",
"font_class": "close1",
......
src/assets/iphone-head.png

5.13 KB | W: | H:

src/assets/iphone-head.png

4.18 KB | W: | H:

src/assets/iphone-head.png
src/assets/iphone-head.png
src/assets/iphone-head.png
src/assets/iphone-head.png
  • 2-up
  • Swipe
  • Onion skin
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1658109499599" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4660" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path d="M882.688 680.448l-164.864-202.752c-7.68-9.728-19.456-15.36-31.744-15.36H332.288c-12.288 0-24.064 5.632-31.744 15.36l-164.864 202.752v105.984h746.496v-105.984h0.512z" fill="#2F54EB" p-id="4661"></path><path d="M332.288 459.264H686.08c13.312 0 25.6 6.144 34.304 16.384l165.376 203.776v110.08H132.608v-110.08L297.984 476.16l2.56 2.048m31.744-12.288c-11.264 0-22.016 5.12-29.184 14.336l-163.84 201.728V783.36h739.84v-101.376l-163.84-201.728c-7.168-8.704-17.92-13.824-29.184-14.336H332.288z" fill="#2B2E36" p-id="4662"></path><path d="M245.76 229.376c0-13.824 10.752-24.576 24.576-24.576h475.136c13.824 0 24.576 10.752 24.576 24.576v647.168c0 13.824-10.752 24.576-24.576 24.576H270.336c-13.824 0-24.576-10.752-24.576-24.576V229.376z" fill="#FFFFFF" p-id="4663"></path><path d="M242.688 229.376c0-15.36 12.288-27.648 27.648-27.648h475.136c15.36 0 27.648 12.288 27.648 27.648v647.168c0 15.36-12.288 27.648-27.648 27.648H270.336c-15.36 0-27.648-12.288-27.648-27.648V229.376z m27.648-21.504c-11.776 0-21.504 9.728-21.504 21.504v647.168c0 11.776 9.728 21.504 21.504 21.504h475.136c11.776 0 21.504-9.728 21.504-21.504V229.376c0-11.776-9.728-21.504-21.504-21.504H270.336z" fill="#2B2E36" p-id="4664"></path><path d="M681.984 269.824H336.384c-7.68 0-13.824 6.144-13.824 13.824v171.52c0 7.68 6.144 13.824 13.824 13.824h345.6c7.68 0 13.824-6.144 13.824-13.824V283.136c0-7.168-6.144-13.312-13.824-13.312z" fill="#E8ECFD" p-id="4665"></path><path d="M336.384 272.896c-5.632 0-10.24 4.608-10.24 10.24v171.52c0 5.632 4.608 10.24 10.24 10.24h345.6c5.632 0 10.24-4.608 10.24-10.24V283.136c0-5.632-4.608-10.24-10.24-10.24H336.384z m-12.288-1.536c3.072-3.072 7.68-5.12 12.288-5.12h345.6c9.216 0 16.896 7.68 16.896 16.896v172.032c0 9.216-7.68 16.896-16.896 16.896H336.384c-9.216 0-16.896-7.68-16.896-16.896V283.136c-0.512-4.096 1.536-8.704 4.608-11.776z" fill="#2B2E36" p-id="4666"></path><path d="M881.152 924.16c-5.12 21.504-24.064 36.864-46.592 36.864H183.808c-22.016 0-40.96-15.36-46.592-36.864-1.024-4.096-1.536-8.192-1.536-12.288V680.96h181.248c20.48 0.512 36.352 16.896 36.352 37.376v0.512c0 20.48 15.872 36.864 36.352 36.864h239.616c20.48 0 36.352-16.896 36.352-36.864-0.512-20.48 15.872-36.864 36.352-37.376h181.248v230.912c-0.512 3.584-1.024 7.68-2.048 11.776z" fill="#FFFFFF" p-id="4667"></path><path d="M132.608 677.376h184.32c22.016 0.512 39.424 18.432 39.424 40.448v0.512c0 18.432 14.848 33.28 33.28 33.792h239.616c18.432 0 33.28-15.36 33.28-33.792-0.512-22.016 17.408-40.448 39.424-40.448h184.32v234.496c0 4.608-0.512 8.704-1.536 13.312-5.632 23.04-26.112 38.912-49.664 39.424H183.808c-23.552-0.512-44.032-16.384-49.664-39.424-1.024-4.096-1.536-8.704-1.536-13.312v-235.008z m744.96 245.76c1.024-3.584 1.536-7.68 1.536-11.776v-227.84H701.44c-18.432 0.512-33.28 15.36-32.768 33.792 0 22.016-17.408 39.936-39.424 40.448H389.12c-22.016 0-39.936-18.432-39.424-40.448v-0.512c0.512-18.432-14.336-33.792-32.768-33.792H139.264v227.84c0 4.096 0.512 7.68 1.536 11.776 4.608 19.968 22.528 34.304 43.008 34.304H834.56c20.48 0.512 38.4-13.824 43.008-33.792z" fill="#2B2E36" p-id="4668"></path><path d="M680.448 543.744H337.92c-8.704 0-15.36 7.168-15.36 15.36 0 8.704 7.168 15.36 15.36 15.36h342.016c8.704 0 15.36-7.168 15.36-15.36 0.512-8.704-6.656-15.36-14.848-15.36z m0 80.896H337.92c-8.704 0-15.36 7.168-15.36 15.872 0 8.192 6.656 14.848 15.36 15.36h342.016c8.704 0 15.36-7.168 15.36-15.36s-6.656-15.872-14.848-15.872z" fill="#D1D9FC" p-id="4669"></path><path d="M860.672 107.52l18.944 18.944-67.072 67.072-18.944-18.944L860.672 107.52z m-162.816-52.224h26.624v95.232h-26.624V55.296z m133.12 202.24h95.232v26.624h-95.232v-26.624z" fill="#2F54EB" p-id="4670"></path></svg>
\ No newline at end of file
......@@ -387,6 +387,9 @@ export default {
};
</script>
<style lang="scss" scoped>
>>> .el-select .el-input .el-input__suffix i:nth-child(2){
display: none;
}
.select-search {
width: 100%;
// padding: 0 10px;
......
......@@ -486,9 +486,6 @@ export default {
height: 100%;
.daily-set-content {
padding: 20px;
.table-condition-left {
font-size: 0;
}
}
.depart-item-content {
width: 213px;
......
......@@ -4,15 +4,16 @@
<div class="links__body">
<div class="links__body--url">{{ src }}</div>
<div class="links__body--btn">
<el-button v-clipboard:text="src" v-show="src" type="text" icon="iconfont icon-lianjie fz14">复制链接</el-button>
<el-button v-clipboard:text="src" v-show="src" type="text" icon="iconfont icon-lianjie font-14">复制链接</el-button>
</div>
</div>
<div class="link__divider"></div>
<div class="links__qr">
<div style="text-align:center">
<vue-qr id="qrImg" :text="src" :size="102" :margin="5"></vue-qr>
<vue-qr v-if="sourceType" id="qrImg" :text="src" :size="102" :margin="5"></vue-qr>
<img v-else :src="src" class="imgs" />
</div>
<el-button class="links__qr--btn" v-show="src" type="text" icon="iconfont icon-icon_yunxiazai fz14 mr4" @click="downloadImg">二维码下载</el-button>
<el-button v-show="src" type="text" icon="iconfont-hb3 iconxiazai font-14 m-r-5" @click="download">二维码下载</el-button>
</div>
</div>
</el-dialog>
......@@ -37,6 +38,10 @@ export default {
imageName: {
type: String,
default: ''
},
sourceType: {
type: Boolean,
default: true
}
},
data() {
......@@ -60,16 +65,50 @@ export default {
close() {
this.$emit('update:show', false);
},
download() {
if (this.sourceType) {
this.downloadImg();
} else {
this.downloadCodeImg(this.src);
}
},
downloadImg() {
const qrcode = document.getElementById('qrImg');
console.log(qrcode);
let img = qrcode.getElementsByTagName('img')[0];
let link = document.createElement('a');
let url = img.getAttribute('src');
link.setAttribute('href', url);
link.setAttribute('download', `${this.imageName}.png`);
link.click();
},
downloadCodeImg(url) {
let image = new Image(); //创建图片对象
image.setAttribute('crossOrigin', 'anonymous'); //设置允许跨域
image.src = url; //赋值src
image.onload = () => {
//等待图片加载完成创建canvas
let canvas = document.createElement('canvas');
//将图片绘制到canvas画布上
canvas.width = image.width;
canvas.height = image.height;
let ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0, image.width, image.height);
//获取图片文件格式 jpg/jpeg/png
let ext = image.src.substring(image.src.lastIndexOf('.') + 1).toLowerCase();
//导出画布快照 此时已越过跨域限制成功取到图片数据
let dataURL = canvas.toDataURL('image/' + ext);
//创建a标签
const a = document.createElement('a');
// 赋值a标签download属性值,标明该a标签提供下载功能,同时该属性指定了下载时的文件名称
a.download = this.imageName;
//赋值a标签下载地址,即canvas导出的画布快照 base64格式的图片地址
a.href = dataURL;
//添加a标签到dom中
document.body.appendChild(a);
//触发a标签点击事件 触发下载
a.click();
//下载完成 删除多余的a标签 保持页面原有元素不动
};
}
}
};
......@@ -92,12 +131,15 @@ export default {
line-height: 1;
}
}
.links__body--btn {
margin-bottom: 10px;
}
.links__qr {
padding: 22px 30px 10px 24px;
text-align: center;
&--btn {
margin: 18px 0 0;
}
display: flex;
flex-direction: column;
justify-content: space-between;
}
.link__divider {
margin-top: 19px;
......@@ -122,4 +164,8 @@ export default {
margin-right: 8px;
}
}
.imgs {
width: 102px;
height: 105px;
}
</style>
<template>
<el-popover placement="bottom" style="min-width: 357px" v-model="departmentVisible">
<dm-simple-transfer v-model="selected" :props="props" :data="data" :item-size="66" :titles="['选择门店', '已选门店']" filterable filter-placeholder="请输入门店名称/code" @change="change">
<el-popover placement="bottom" v-model="departmentVisible">
<dm-simple-transfer :value="selected" v-loading="loading" :leftListTotal="leftListTotal" :canSelectAll="canSelectAll" :left-panel="leftPanel" @leftLoadMore="onLeftLoadMore" :props="props" :max="max" :data="data" :bodyH="62" :item-size="66" :titles="['选择门店', '已选门店']" filterable filter-placeholder="请输入门店名称/code" @change="change">
<div slot-scope="{ option }">
<p>{{ option.storeName }}</p>
<p style="font-size: 12px;line-height: 18px">{{ option.storeCode }}</p>
<p v-show="option.isOver == 1" class="isOver">所有导购今日添加已到上限</p>
<el-tooltip :content="option.storeName" :disabled="option.storeName.length < 10">
<p class="storeName">{{ option.storeName }}</p>
</el-tooltip>
<p style="font-size: 12px;line-height: 14px">{{ option.storeCode }}</p>
<p v-if="option.isOver == 1" class="isOver">所有导购今日添加已到上限</p>
</div>
</dm-simple-transfer>
<div class="show-select-num cursor-pointer w-250" slot="reference">
已经选择{{ selected.length }}家门店
<span v-if="selected && selected.length"> 已经选择{{ selected && selected.length }}家门店</span>
<span v-else style="color: #C4C6CF;">请选择门店</span>
<span class="el-input__suffix"
><span class="el-input__suffix-inner"><i :class="['el-select__caret el-input__icon el-icon-arrow-up', departmentVisible ? 'is-reverse' : '']"></i></span
></span>
......@@ -26,6 +29,26 @@ export default {
data: {
type: Array,
default: () => []
},
leftListTotal: {
type: Number,
default: 0
},
max: {
type: Number,
default: 999999
},
canSelectAll: {
type: Boolean,
default: false
},
leftPanel: {
type: Object,
default: () => {}
},
loading: {
type: Boolean,
default: false
}
},
data() {
......@@ -33,20 +56,26 @@ export default {
departmentVisible: false,
props: {
key: 'storeId',
label: 'storeName'
label: 'storeName',
disabledProp: 'disabled'
}
};
},
methods: {
change(val) {
console.log(val);
this.$emit('change', val);
},
onLeftLoadMore(query) {
this.$emit('leftLoadMore', query);
}
}
};
</script>
<style lang="scss" scoped>
<style lang="less" scoped>
/deep/.dm-transfer-panel .transfer-panel-body {
height: calc(100% - 58px);
}
.show-select-num {
position: relative;
display: inline-block;
......@@ -73,6 +102,12 @@ export default {
}
}
}
.storeName {
width: 208px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.isOver {
font-size: 12px;
color: #fa8c16;
......
......@@ -2,7 +2,7 @@
<div class="bread-menu">
<span class="bread-menu-item" v-for="(el, index) in menuList" :key="el.menuCode">
<i v-if="index > 0" class="bread-menu-icon iconfont-hb3 iconnavigate_next"></i>
<span :class="['bread-menu-text', index == menuList.length - 1 ? 'bread-menu-actived' : 'is-link']" @click="toPage">{{ el.menuName }}</span>
<span :class="['bread-menu-text', index == menuList.length - 1 ? 'bread-menu-actived' : 'is-link']" @click="toPage(index)">{{ el.menuName }}</span>
</span>
</div>
</template>
......@@ -17,7 +17,8 @@ export default {
}
},
methods: {
toPage() {
toPage(index) {
if (index == this.menuList.length - 1) return;
this.$router.go(-1);
}
}
......
......@@ -9,10 +9,9 @@
<div class="hb-layout-pager" id="hb-layout-pager-one" :style="{ height: activedMenu.length > 3 ? `calc(100% - 30px)` : '100%', 'padding-bottom': pagePaddingBottom }">
<!-- 页面内容 -->
<!-- <router-view v-if="activeBrand" :brandId="activeBrand" :activeGroupId="activeGroup" :tabType="activeTab" @showTab="showTab"></router-view> -->
<keep-alive>
<router-view :brand-id="enterpriseId" v-if="$route.meta.keepAlive"></router-view>
<keep-alive :include="keepAlive">
<router-view :key="$route.path" :brand-id="enterpriseId"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" :brand-id="enterpriseId"></router-view>
</div>
</div>
</div>
......@@ -44,6 +43,7 @@ export default {
},
data() {
return {
keepAlive: [],
showAside: true,
pagePaddingBottom: null,
enterpriseId: '',
......@@ -69,8 +69,10 @@ export default {
}
},
created() {
this.setKeepAlive(this.$route, {});
this.$router.beforeEach((to, from, next) => {
this.activedMenu = this.getActivedMenu(this.getMenuByPath(to.path.slice(1)));
this.setKeepAlive(to, from);
next();
});
provideData.layoutVm = this;
......@@ -119,6 +121,32 @@ export default {
getMenuByPath(path) {
return this.pageRight.find(el => el.regexp.test('/' + path)) || {};
},
setKeepAlive(to, from) {
if (Array.isArray(to.meta.fromPath)) {
const isKeepAlive = to.meta.fromPath.some(el => {
let menuUrlReg = el;
let pathConfigReg = /(:.*)(\/?)/;
const pathRegStr = '([\\d\\w]+[\\-]*[\\d\\w]*)';
while (pathConfigReg.test(menuUrlReg)) {
menuUrlReg = menuUrlReg.replace(pathConfigReg, `${pathRegStr}$2`);
}
pathConfigReg = /(\/\*)(\/?)/;
while (pathConfigReg.test(menuUrlReg)) {
menuUrlReg = menuUrlReg.replace(pathConfigReg, `${pathRegStr}$2`);
}
const reg = new RegExp(`^${menuUrlReg}$`);
return reg.test(from.path);
});
if (!isKeepAlive) {
this.keepAlive = this.keepAlive.filter(el => el != to.meta.componentName);
}
setTimeout(() => {
if (this.keepAlive.every(el => el != to.meta.componentName)) {
this.keepAlive.push(to.meta.componentName);
}
}, 100);
}
},
onShowLoading(loading) {
if (loading) {
this.fullLoading.visible = true;
......
......@@ -70,7 +70,7 @@
<div><img src="../../assets/data/people.png" class="m-w-46" alt="" /></div>
<div class="m-l-20">
<div class="cell-title">
<el-tooltip class="item" effect="dark" content="企业下的好办门店员工总人数,导购同时归属多家门店的记多人" placement="top-start">
<el-tooltip class="item" effect="dark" content="企业下所有门店的好办在职员工总人数,不区分门店状态" placement="top-start">
<span class="font-13 color-909399 cell-title-span" style="cursor: pointer;padding-bottom: 2px; ">员工总人数</span>
</el-tooltip>
</div>
......
......@@ -4,15 +4,15 @@
<div class="content">
<img :src="card.pageBackgroundImg" class="bgImg" v-if="card.pageBackgroundImg" />
<div class="enterpriseInfo">
<div class="logo">
<img :src="card.merchantLogo" v-if="card.merchantLogo" />
<div class="logo" v-if="card.merchantLogo">
<img :src="card.merchantLogo" />
</div>
<div class="name">{{ card.merchantName }}</div>
</div>
<div class="QRcode"></div>
<div class="leadingText">{{ card.guideComment }}</div>
<div class="enterpriseNum">
<i class="iconfont-hb3 iconhuawushuju"></i>
<div class="enterpriseNum" v-show="card.merchantPhoneNumber">
<i class="iconfont-hb3 icondianhua"></i>
<p>{{ card.merchantPhoneNumber }}</p>
</div>
</div>
......@@ -67,32 +67,32 @@ export default {
height: 543px;
.pageTitle {
font-size: 14px;
position: sticky;
color: #000000;
position: absolute;
color: #000;
font-weight: 500;
top: 105px;
width: 125px;
margin-left: 78px;
line-height: 20px;
display: inline-block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
white-space: nowrap;
text-align: center;
top: 44px;
}
.content {
width: 228px;
height: 410px;
height: 437px;
box-sizing: border-box;
padding: 20px 16px;
position: absolute;
top: 97px;
top: 70px;
left: 26px;
background: #ffffff;
display: flex;
align-items: center;
flex-direction: column;
border-radius: 10px 10px 24px 24px;
border-radius: 0 0 24px 24px;
.bgImg {
position: absolute;
width: 228px;
......@@ -106,11 +106,12 @@ export default {
justify-content: flex-start;
align-items: center;
width: 100%;
height: 36px;
z-index: 100;
.logo {
width: 36px;
height: 36px;
background: #f6f6f6;
border-radius: 60px;
img {
width: 36px;
......@@ -132,8 +133,7 @@ export default {
width: 176px;
height: 176px;
margin: 11px 0 16px 0;
background: #f6f6f6;
background-image: url('../assets/QRcode.png');
background-image: url('../assets/QRcode.jpg');
background-size: 176px auto;
}
.leadingText {
......@@ -155,7 +155,7 @@ export default {
display: flex;
align-items: center;
padding: 9px 12px;
justify-content: center;
line-height: 14px;
color: #63666b;
font-size: 12px;
......
......@@ -29,8 +29,8 @@
<el-form-item label="标题" prop="title">
<el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input>
</el-form-item>
<el-form-item label=" 封面" prop="pic">
<single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set" :uploadLimit="20"> </single-upload>
<el-form-item label="封面" prop="pic">
<single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set"> </single-upload>
<p style="margin-top: 9px;font-size: 12px;color: #909399;line-height: 17px;">建议尺寸520*416,支持png、jpg、jpeg格式</p>
</el-form-item>
</el-form>
......
......@@ -28,8 +28,8 @@
<el-form-item label="标题:" prop="title">
<el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input>
</el-form-item>
<el-form-item label=" 封面:" prop="pic">
<single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set" :uploadLimit="20"> </single-upload>
<el-form-item label="封面:" prop="pic">
<single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set"> </single-upload>
<p style="margin-top: 9px;font-size: 12px;color: #909399;line-height: 17px;">建议尺寸520*416,支持png、jpg、jpeg格式</p>
</el-form-item>
</el-form>
......
......@@ -29,7 +29,7 @@
<limitInput :inputWidth="440" :inputValue.sync="ruleForm.link" :holder="'请输入页面路径'" :getByType="'word'" :maxLength="100"> </limitInput>
</el-form-item>
<el-form-item label="封面" prop="imgUrl">
<single-upload uploadType="4" :uploadLimit="1" :imgSrc.sync="ruleForm.imgUrl"> </single-upload>
<single-upload uploadType="4" uploadLimit="1/MB" :imgSrc.sync="ruleForm.imgUrl"> </single-upload>
</el-form-item>
</el-form>
</div>
......
......@@ -18,10 +18,10 @@
<limitInput :inputWidth="440" :inputValue.sync="ruleForm.materialTitle" :holder="'请输入视频标题'" :getByType="'word'" :maxLength="20"> </limitInput>
</el-form-item>
<el-form-item label="封面" prop="imgUrl">
<single-upload uploadType="2" :uploadLimit="1" :imgSrc.sync="ruleForm.imgUrl"> </single-upload>
<single-upload uploadType="2" uploadLimit="1/MB" :imgSrc.sync="ruleForm.imgUrl"> </single-upload>
</el-form-item>
<el-form-item label="视频" prop="link">
<single-upload uploadType="3" :uploadLimit="10" :videoSrc.sync="ruleForm.link"> </single-upload>
<single-upload uploadType="3" uploadLimit="10/MB" :videoSrc.sync="ruleForm.link"> </single-upload>
</el-form-item>
</el-form>
</div>
......
......@@ -24,7 +24,7 @@
<limitInput :inputWidth="440" :inputValue.sync="ruleForm.materialDesc" :holder="'请输入网页摘要'" :getByType="'word'" :maxLength="100"> </limitInput>
</el-form-item>
<el-form-item label="封面" prop="imgUrl">
<single-upload uploadType="2" :uploadLimit="1" :imgSrc.sync="ruleForm.imgUrl"> </single-upload>
<single-upload uploadType="2" uploadLimit="1/MB" :imgSrc.sync="ruleForm.imgUrl"> </single-upload>
</el-form-item>
</el-form>
</div>
......
......@@ -14,31 +14,27 @@
</single-upload>
-->
<template>
<div class="single-upload-wrap">
<el-upload class="avatar-uploader" :action="uploadUrl()" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
<img v-if="imgSrc" :src="imgSrc" class="avatar" @mouseover="showImage(imgSrc)" />
<video v-if="videoSrc != '' && videoFlag == false" :src="videoSrc" class="avatar">您的浏览器不支持视频播放</video>
<div v-if="!imgSrc && !videoSrc">
<i class="iconfont-hb3 iconPlusOutlined avatar-uploader-icon"></i>
<p class="font-12 color-606266" style="line-height:6px;">{{ uploadType == 1 || uploadType == 2 || uploadType == 4 ? '上传图片' : '上传视频' }}</p>
</div>
<!-- <el-progress v-if="videoFlag == true" type="circle" :percentage="videoUploadPercent" style="margin-top:30px;"></el-progress> -->
</el-upload>
<div>
<i v-if="imgSrc && showDel" class="del-icon iconfont-hb3 iconclose-circle-fill" @click="handleRemove"></i>
<div class="single-upload-wrap">
<el-upload class="avatar-uploader" :action="uploadUrl()" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
<img v-if="imgSrc" :src="imgSrc" class="avatar" @mouseover="showImage(imgSrc)" />
<video v-if="videoSrc != '' && videoFlag == false" :src="videoSrc" class="avatar">您的浏览器不支持视频播放</video>
<div v-if="!imgSrc && !videoSrc">
<i class="iconfont-hb3 iconPlusOutlined avatar-uploader-icon"></i>
<p class="font-12 color-606266" style="line-height: 6px">{{ uploadType == 1 || uploadType == 2 || uploadType == 4 ? '上传图片' : '上传视频' }}</p>
</div>
<p v-if="uploadType == 1 && showTips" class="upload-tip color-909399 font-12">
图片支持png、jpg、jpeg格式,大小不超过2M,可上传1张
</p>
<p v-if="uploadType == 2 && showTips" class="upload-tip color-909399 font-12">
建议尺寸:160×160;支持jpg、jpeg、png格式,图片大小不超过1MB
</p>
<p v-if="uploadType == 3 && showTips" class="upload-tip color-909399 font-12">
视频支持MP4格式,大小不超过10M,上传企业微信后3天内有效
</p>
<p v-if="uploadType == 4 && showTips" class="upload-tip color-909399 font-12">
建议尺寸:520×416,支持png、jpg、jpeg格式,大小不超过1M
</p>
<!-- 图片预览 -->
<!-- <vue-gic-img-preview :imgUrl="imgUrl" :imgShowFlag="imgShowFlag" @hideImage="hideImage"></vue-gic-img-preview> -->
<!-- <el-progress v-if="videoFlag == true" type="circle" :percentage="videoUploadPercent" style="margin-top:30px;"></el-progress> -->
</el-upload>
<p v-if="uploadType == 1 && showTips" class="upload-tip color-909399 font-12">图片支持png、jpg、jpeg格式,大小不超过2M,可上传1张</p>
<p v-if="uploadType == 2 && showTips" class="upload-tip color-909399 font-12">建议尺寸:160×160;支持jpg、jpeg、png格式,图片大小不超过1MB</p>
<p v-if="uploadType == 3 && showTips" class="upload-tip color-909399 font-12">视频支持MP4格式,大小不超过10M,上传企业微信后3天内有效</p>
<p v-if="uploadType == 4 && showTips" class="upload-tip color-909399 font-12">建议尺寸:520×416,支持png、jpg、jpeg格式,大小不超过1M</p>
<!-- 图片预览 -->
<!-- <vue-gic-img-preview :imgUrl="imgUrl" :imgShowFlag="imgShowFlag" @hideImage="hideImage"></vue-gic-img-preview> -->
</div>
</div>
</template>
<script>
......@@ -74,11 +70,15 @@ export default {
},
uploadLimit: {
type: [Number, String],
default: 2
default: '2/MB'
},
uploadType: {
type: [Number, String],
default: 1 // 1.图片 2.网页 3.视频 4小程序
},
showDel: {
type: Boolean,
default: false
}
},
data() {
......@@ -101,6 +101,9 @@ export default {
// that.upUrl = that.baseUrl + '/api-plug/upload-img?wxFlag=1'
},
methods: {
handleRemove() {
this.$emit('update:imgSrc', '');
},
/**
* 上传图片/视频
*/
......@@ -130,23 +133,35 @@ export default {
/* eslint-disable */
beforeAvatarUpload(file) {
const that = this;
// console.log(file);
that.fileType = file.type === 'image/jpeg'|| file.type === 'image/gif' ? 'jpeg' : file.type === 'image/jpg' ? 'jpg' : file.type === 'image/png' ? 'png' : file.type == 'video/mp4' ? 'mp4' : '';
console.log(file);
that.fileType = file.type === 'image/jpeg' || file.type === 'image/gif' ? 'jpeg' : file.type === 'image/jpg' ? 'jpg' : file.type === 'image/png' ? 'png' : file.type == 'video/mp4' ? 'mp4' : '';
const isJPG = this.imgType.includes(file.type);
const isMP4 = file.type == 'video/mp4';
const isLt2M = file.size / 1024 / 1024 < that.uploadLimit;
if ((that.uploadType == 1 || that.uploadType == 2 || that.uploadType == 4) && !isJPG) {
that.$message.error(`上传图片支持${ this.imgType.map(item=>item.split('/')[1]).join('、')}格式!`);
const uploadLimit = that.uploadLimit.split('/')[0];
const unit = that.uploadLimit.split('/')[1];
let isLt2M = false;
if (unit == 'KB') {
isLt2M = file.size / 1024 < uploadLimit;
} else {
isLt2M = file.size / 1024 / 1024 < uploadLimit;
}
if ((that.uploadType == 1 || that.uploadType == 2 || that.uploadType == 4) && !isJPG) {
that.$message.error(`上传图片支持${this.imgType.map((item) => item.split('/')[1]).join('、')}格式!`);
return false;
}
if ((that.uploadType == 1 || that.uploadType == 2 || that.uploadType == 4) && !isLt2M) {
that.$message.error(`上传图片大小不能超过 ${that.uploadLimit}MB!`);
that.$message.error(`上传图片大小不能超过 ${uploadLimit}${unit}!`);
return false;
}
if (that.uploadType == 3 && !isMP4) {
that.$message.error('上传视频支持MP4格式!');
return false;
}
if (that.uploadType == 3 && !isLt2M) {
that.$message.error(`上传视频大小不能超过 ${that.uploadLimit}MB!`);
that.$message.error(`上传视频大小不能超过 ${uploadLimit}${unit}!`);
return false;
}
if (that.uploadType == 3) {
return isMP4 && isLt2M;
......@@ -196,6 +211,7 @@ export default {
};
</script>
<style lang="scss" scoped>
.w-500 {
width: 500px;
}
......@@ -267,14 +283,20 @@ export default {
.avatar-uploader-icon {
font-size: 24px;
color:#303133;
color: #303133;
}
.avatar {
max-width: 100px;
max-height: 100px;
display: block;
}
.del-icon{
position: absolute;
top: -13px;
left: 92px;
z-index: 2;
cursor: pointer;
}
.upload-tip {
margin-top: 8px;
font-size: 12px;
......
......@@ -24,4 +24,24 @@ const clipboard = {
el.removeEventListener('click', el.handler);
}
};
export default { clipboard };
const linkMap = {
codeList: 'https://www.yuque.com/exnmlu/oo64hg/thm172#WRdju',
codeGl: 'https://www.yuque.com/exnmlu/oo64hg/thm172#ADEzt',
codeCkmx: 'https://www.yuque.com/exnmlu/oo64hg/thm172#mDlza',
linkList: 'https://www.yuque.com/exnmlu/oo64hg/lggf7q#WRdju',
linkGl: 'https://www.yuque.com/exnmlu/oo64hg/lggf7q#ADEzt',
linkCkmx: 'https://www.yuque.com/exnmlu/oo64hg/lggf7q#mDlza'
};
const jumpLink = {
bind(el, binding) {
const { arg } = binding;
el.handler = function() {
window.open(linkMap[arg]);
};
el.addEventListener('click', el.handler);
},
unbind: function(el) {
el.removeEventListener('click', el.handler);
}
};
export default { clipboard, jumpLink };
......@@ -17,7 +17,7 @@ import directives from '@/components/utils/directives';
import './assets/font/iconfont.css'
import './assets/gic后台font/iconfont.css'
import '../static/css/index.less';
import '../theme/index.css';
// import '../theme/index.css';
import '../static/css/dialog.css';
import filters from './filters/index.js';
......@@ -79,24 +79,6 @@ router.beforeEach((to, from, next) => {
} else {
baseUrl = host;
}
const { fromPath = [] } = from.meta || {};
if (Array.isArray(fromPath)) {
from.meta.keepAlive = fromPath.some(el => {
let menuUrlReg = el;
let pathConfigReg = /(:.*)(\/?)/;
const pathRegStr = '([\\d\\w]+[\\-]*[\\d\\w]*)';
while (pathConfigReg.test(menuUrlReg)) {
menuUrlReg = menuUrlReg.replace(pathConfigReg, `${pathRegStr}$2`);
}
pathConfigReg = /(\/\*)(\/?)/;
while (pathConfigReg.test(menuUrlReg)) {
menuUrlReg = menuUrlReg.replace(pathConfigReg, `${pathRegStr}$2`);
}
const reg = new RegExp(menuUrlReg);
return reg.test(to.path);
});
}
next();
});
......
......@@ -4,7 +4,13 @@ const attractFlowLinkRouter = [
{
path: '/attractFlowLink',
name: '引流链接',
component: _import('salesleads/actCodeManage/attractFlowLink', 'index')
component: _import('salesleads/actCodeManage/attractFlowLink', 'index'),
meta: {
// 页面组件的name属性
componentName: 'attractFlowLink',
// 从fromPath回到当前页面时,需要使用keep-alive
fromPath: ['/attractFlowLinkEdit/:id', '/attractFlowLinkInfo/:id', '/attractFlowLinkInfos/:id']
}
},
{
path: '/attractFlowLinkAdd',
......@@ -31,9 +37,26 @@ const attractFlowLinkRouter = [
component: _import('salesleads/actCodeManage/attractFlowLink', 'info')
},
{
path: '/attractFlowLinkInfos/:id',
name: '详情引流链接',
meta: {
type: 'info'
},
component: _import('salesleads/actCodeManage/attractFlowLink', 'info')
},
{
path: '/attLinkRecord',
name: '查看记录',
component: _import('salesleads/actCodeManage/staffActCode', 'actCodeRecord')
},
{
path: '/ladingPageList',
name: '落地页列表',
component: _import('salesleads/actCodeManage/attractFlowLink/landingPage', 'list')
component: _import('salesleads/actCodeManage/attractFlowLink/landingPage', 'list'),
meta: {
componentName: 'ladingPageList',
fromPath: ['/ladingPageEdit/:id']
}
},
{
path: '/ladingPageAdd',
......@@ -50,6 +73,11 @@ const attractFlowLinkRouter = [
type: 'edit'
},
component: _import('salesleads/actCodeManage/attractFlowLink/landingPage', 'detail')
},
{
path: '/operationLog',
name: '操作日志',
component: _import('salesleads/actCodeManage', 'operateLog')
}
];
......
......@@ -4,7 +4,11 @@ const staffActCodeRouter = [
{
path: '/staffActCode',
name: '员工活码',
component: _import('salesleads/actCodeManage/staffActCode', 'index')
component: _import('salesleads/actCodeManage/staffActCode', 'index'),
meta: {
componentName: 'staffActCode',
fromPath: ['/actCodeEdit', '/actCodeBatch', '/actCodeDetail', '/actCodeDetails']
}
},
{
path: '/actCodeRecord',
......@@ -13,35 +17,32 @@ const staffActCodeRouter = [
},
{
path: '/actCodeDetail',
name: '活码详情',
name: '活码详情-数据',
component: _import('salesleads/actCodeManage/staffActCode', 'actCodeDetail')
},
{
path: '/actCodeAdd',
name: '新增活码',
component: _import('salesleads/actCodeManage/staffActCode/views', 'setActCode'),
path: '/actCodeDetails',
name: '活码详情-详情',
component: _import('salesleads/actCodeManage/staffActCode', 'actCodeDetail'),
meta: {
keepAlive: true,
fromPath: ['/salutatorySet']
componentName: 'actCodeDetail',
fromPath: ['/actCodeRecord']
}
},
{
path: '/actCodeAdd',
name: '新增活码',
component: _import('salesleads/actCodeManage/staffActCode/views', 'setActCode')
},
{
path: '/actCodeEdit',
name: '编辑活码',
component: _import('salesleads/actCodeManage/staffActCode/views', 'setActCode'),
meta: {
keepAlive: true,
fromPath: ['/salutatorySet']
}
component: _import('salesleads/actCodeManage/staffActCode/views', 'setActCode')
},
{
path: '/actCodeBatch',
name: '批量创建活码',
component: _import('salesleads/actCodeManage/staffActCode/views', 'batchAddCode'),
meta: {
keepAlive: true,
fromPath: ['/salutatorySet']
}
component: _import('salesleads/actCodeManage/staffActCode/views', 'batchAddCode')
}
];
export default staffActCodeRouter;
......@@ -100,7 +100,11 @@ export const constantRouterMap = [
{
path: '/salutatory',
name: '欢迎语',
component: _import('enterprise', 'salutatoryIndex')
component: _import('enterprise', 'salutatoryIndex'),
meta:{
componentName: 'salutatoryIndex',
fromPath: ['/editSalutatorySet']
}
},
{
path: '/salutatorySet',
......@@ -144,7 +148,7 @@ export const constantRouterMap = [
name: '话务任务记录',
component: _import('salesleads/trafficTask', 'taskRecord'),
meta: {
keepAlive: true,
componentName: 'TaskRecord',
fromPath: ['/taskDetail']
}
......@@ -174,7 +178,7 @@ export const constantRouterMap = [
name: '门店视图',
component: _import('salesleads/groupSend', 'grStoreList'),
meta: {
keepAlive: true,
componentName: 'grStoreList',
fromPath: ['/grStoreDetail/:id']
}
},
......@@ -242,7 +246,7 @@ export const constantRouterMap = [
name: '客户分组设置',
component: _import('apps/customerApp', 'memberGroupSet'),
meta: {
keepAlive: true,
componentName: 'memberGroupSet',
fromPath: ['/addGroupTemplate', '/editGroupTemplate', '/storeRangeSet']
}
},
......@@ -353,7 +357,7 @@ export const constantRouterMap = [
name: '月指标任务',
component: _import('apps/quota', 'monthTask'),
meta: {
keepAlive: true,
componentName: 'monthTask',
fromPath: ['/monthTaskDetail']
}
},
......
import Vue from 'vue'
import Clipboard from 'clipboard'
import Vue from 'vue';
import Clipboard from 'clipboard';
function clipboardSuccess() {
Vue.prototype.$message({
message: 'Copy successfully',
type: 'success',
duration: 1500
})
});
}
function clipboardError() {
Vue.prototype.$message({
message: 'Copy failed',
type: 'error'
})
});
}
export default function handleClipboard(text, event) {
const clipboard = new Clipboard(event.target, {
text: () => text
})
});
clipboard.on('success', () => {
clipboardSuccess()
clipboard.off('error')
clipboard.off('success')
clipboard.destroy()
})
clipboardSuccess();
clipboard.off('error');
clipboard.off('success');
clipboard.destroy();
});
clipboard.on('error', () => {
clipboardError()
clipboard.off('error')
clipboard.off('success')
clipboard.destroy()
})
clipboard.onClick(event)
clipboardError();
clipboard.off('error');
clipboard.off('success');
clipboard.destroy();
});
clipboard.onClick(event);
}
/*设置cookie*/
export function setCookie(c_name,value,expire) {
var date=new Date();
date.setSeconds(date.getSeconds()+expire);
document.cookie = c_name + "="+ encodeURI(value)+"; expires="+date.toGMTString();
export function setCookie(c_name, value, expire) {
var date = new Date();
date.setSeconds(date.getSeconds() + expire);
document.cookie = c_name + '=' + encodeURI(value) + '; expires=' + date.toGMTString();
}
/*获取cookie*/
export function getCookie(c_name){
if(document.cookie.length>0){
export function getCookie(c_name) {
if (document.cookie.length > 0) {
var name = encodeURI(c_name);
var allcookies = document.cookie;
name += "=";
name += '=';
var pos = allcookies.indexOf(name);
if(pos != -1){
if (pos != -1) {
var start = pos + name.length;
var end = allcookies.indexOf(";",start);
if(end == -1){
var end = allcookies.indexOf(';', start);
if (end == -1) {
end = allcookies.length;
}
var value = allcookies.substring(start,end);
var value = allcookies.substring(start, end);
return decodeURI(value);
} else{
return "";
} else {
return '';
}
}
}
/*删除cookie*/
export function delCookie(c_name){
setCookie(c_name, "", -1);
export function delCookie(c_name) {
setCookie(c_name, '', -1);
}
......@@ -45,9 +45,9 @@ export function validateEmail(email) {
* @param {Object} that vue实例
* this.scrollToError(this);
*/
export const scrollToError = that => {
export const scrollToError = (that, className = 'is-error') => {
that.$nextTick(_ => {
const isError = document.getElementsByClassName('is-error');
const isError = document.getElementsByClassName(className);
isError[0].scrollIntoView({
// 滚动到指定节点
// 值有start,center,end,nearest,当前显示在视图区域中间
......
......@@ -476,9 +476,6 @@ export default {
.daily-set-content {
padding: 20px;
box-sizing: border-box;
.table-condition-left {
font-size: 0;
}
}
.depart-item-content {
width: 213px;
......
......@@ -27,7 +27,7 @@
import MemberGroupList from './memberGroupList.vue';
import MemberGroupSetList from './memberGroupSetList.vue';
export default {
name: 'app-detail',
name: 'memberGroupSet',
components: { MemberGroupList, MemberGroupSetList },
props: {
brandId: {
......
......@@ -51,7 +51,7 @@ import { getRequest, postExcel } from '@/api/api';
import { _debounce } from '@/common/js/public';
import errMsg from '@/common/js/error';
export default {
name: 'reviewed',
name: 'monthTask',
props: {
brandId: {
type: String,
......
......@@ -477,9 +477,7 @@ export default {
.daily-set-content {
padding: 20px;
box-sizing: border-box;
.table-condition-left {
font-size: 0;
}
.image-wrap {
width: 40px;
height: 40px;
......
......@@ -117,6 +117,7 @@
<el-button v-if="scope.row.channelCode == 2005" class="cursor-unset" type="text">审核被解绑</el-button>
<el-button v-if="scope.row.channelCode == 2006" class="cursor-unset" type="text">权限变更解绑</el-button>
<el-button v-if="scope.row.channelCode == 2007" class="cursor-unset" type="text">门店变更解绑</el-button>
<el-button v-if="scope.row.channelCode == 2008" class="cursor-unset" type="text">GIC导购删除解绑</el-button>
</template>
</el-table-column>
</el-table>
......
......@@ -10,13 +10,13 @@
<el-table-column prop="referName" label="关联名称" show-overflow-tooltip></el-table-column>
<el-table-column prop="type" label="类型">
<template slot-scope="{ row }">
{{ row.type == 1 ? '员工活码' : '引流链接' }}
{{ row.type == 1 ? '引流链接' : '员工活码' }}
</template>
</el-table-column>
<el-table-column prop="status" label="状态">
<template slot-scope="{ row }">
<div class="status-class">
<span :class="['state-point', logStatusClass[row.status]]">{{ relationSatusMap[row.status] }}</span>
<span :class="['state-point', logStatusClass[row.status]]">{{ relationSatusMap[row.status] || '- -' }}</span>
</div>
</template>
</el-table-column>
......@@ -46,7 +46,7 @@ export default {
total: 0,
tableData: [],
relationSatusMap: {
1: '启用',
1: '正常',
0: '删除',
2: '废弃'
},
......
......@@ -124,9 +124,10 @@ export default {
};
},
mounted() {
const that = this;
that.getData();
// this.getSetting();
this.getData();
},
activated() {
this.getData();
},
props: {
type: {
......@@ -187,8 +188,9 @@ export default {
type: 'warning'
}).then(() => {
getRequest('/haoban-manage3-web/welcome/remove', { welcomeId: row.welcomeId }).then(res => {
console.log(res);
let resData = res.data;
if (resData.code == 0 && resData.result) {
if (resData.code == 0) {
this.$message.success('删除成功');
this.getData();
}
......@@ -197,16 +199,15 @@ export default {
},
delType2(row) {
getRequest('/haoban-manage3-web/welcome/statistics', { welcomeId: row.welcomeId }).then(res => {
console.log(res);
const { result } = res.data;
let str = '';
if (result) {
if (result.qrCodeReferNum && result.linkReferNum) {
str = `当前模板已关联状态为正常的活码(${result.qrCodeReferNum})、链接(${result.linkReferNum}),请确认相关活码是否不再使用该欢迎语以及链接已投放结束,取消关联后才可删除该模板`;
str = `当前欢迎语已关联状态为正常的活码(${result.qrCodeReferNum})、链接(${result.linkReferNum}),请确认相关活码是否不再使用该欢迎语以及链接已投放结束,解除关联后才可删除该模板`;
} else if (result.qrCodeReferNum) {
str = `当前模板已关联状态为正常的活码(${result.qrCodeReferNum}),请确认相关活码是否不再使用该欢迎语,取消关联后才可删除该模板`;
str = `当前欢迎语已关联状态为正常的活码(${result.qrCodeReferNum}),请确认相关活码是否不再使用该欢迎语,解除关联后才可删除该模板`;
} else if (result.linkReferNum) {
str = `当前模板已关联链接(${result.linkReferNum}),请确认相关链接已投放结束,取消关联后才可删除该模板`;
str = `当前欢迎语已关联链接(${result.linkReferNum}),请确认相关链接已投放结束,解除关联后才可删除该模板`;
}
this.$confirm(str, '无法删除该欢迎语', {
confirmButtonText: '关联详情',
......@@ -216,15 +217,16 @@ export default {
this.showRelateDetail(row);
});
} else {
str = '模板删除后将无法恢复';
str = '欢迎语删除后将无法恢复';
this.$confirm(str, '确认要删除该欢迎语吗?', {
confirmButtonText: '删除',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
getRequest('/haoban-manage3-web/welcome/remove', { welcomeId: row.welcomeId }).then(res => {
console.log(res);
let resData = res.data;
if (resData.code == 0 && resData.result) {
if (resData.code == 0) {
this.$message.success('删除成功');
this.getData();
}
......@@ -238,11 +240,10 @@ export default {
this.welcomeId = item.welcomeId;
},
goLinkDetail(row) {
console.log(row);
if (row.type == 1) {
this.$router.push('/actCodeDetail?hmId=' + row.referId);
if (row.type == 2) {
window.open(`/haoban-3/#/actCodeDetail?hmId=${row.referId}`);
} else {
this.$router.push(`/attractFlowLinkInfo/${row.referId}`);
window.open(`/haoban-3/#/attractFlowLinkInfo/${row.referId}`);
}
},
/**
......@@ -253,7 +254,7 @@ export default {
postJsonRequest('/haoban-manage3-web/welcome/list', { ...this.form, wxEnterpriseId: this.wxEnterpriseId, type: this.type })
.then(res => {
let resData = res.data;
console.log(resData);
if (resData.code == 0 && resData.result) {
this.tableData = resData.result.result;
this.tableData.forEach(item => {
......
......@@ -14,6 +14,7 @@
<script>
import salutatory from './salutatory.vue';
export default {
name: 'salutatoryIndex',
components: {
salutatory
},
......@@ -27,6 +28,14 @@ export default {
this.activeName = Number(sessionStorage.getItem('activeName'));
}
},
activated() {
if (sessionStorage.getItem('activeName')) {
this.activeName = Number(sessionStorage.getItem('activeName'));
}
},
destroyed() {
sessionStorage.setItem('activeName', 1);
},
watch: {
activeName(val) {
sessionStorage.setItem('activeName', val);
......
......@@ -75,12 +75,12 @@
</div>
</el-form-item>
<el-button type="primary" style="margin-left:117px;margin-bottom:20px" :loading="submitbtnLoading" @click="submit">保存</el-button>
<el-button style="margin-bottom:20px" @click="$router.go(-1)">返回</el-button>
<el-button style="margin-bottom:20px" @click="$router.push('salutatory')">返回</el-button>
</el-form>
<preview :welcomeContent="form.welcomeContent" :mediaList="form.welcomeMediaList" />
</div>
<el-dialog title="添加公众号" width="585px" class="replay-link-dialog" :visible.sync="addReplayDialog" @closed="onClosed">
<el-form label-position="right" ref="form" :model="{}" label-width="100px" @submit.native.prevent>
<el-form label-position="right" label-width="100px" @submit.native.prevent>
<el-form-item label="公众号名称">
<el-input v-model="accountName" @keyup.enter.native="addAcountName"></el-input>
</el-form-item>
......@@ -91,7 +91,7 @@
</div>
</el-dialog>
<el-dialog title="添加链接" width="585px" class="replay-link-dialog" :visible.sync="urlDialogVisible" @closed="onClosed">
<el-form label-position="right" ref="form" :model="{}" label-width="100px" @submit.native.prevent>
<el-form label-position="right" label-width="100px" @submit.native.prevent>
<el-form-item label="链接地址">
<el-input v-model="url" @keyup.enter.native="addUrl"></el-input>
<span style="font-size:12px;color:#909399;">以http或https开头</span>
......@@ -236,7 +236,7 @@ export default {
},
accountName: '',
rules: {
title: [{ required: true, message: '请输入欢迎语标题', trigger: 'blur' }],
title: [{ required: true, message: '请输入欢迎语标题' }],
welcomeContent: [{ required: true, message: '请输入欢迎语内容', trigger: 'blur' }]
},
wxEnterpriseId: '',
......@@ -288,6 +288,7 @@ export default {
this.isNew = false;
}
this.form.type = type;
sessionStorage.setItem('activeName', type);
this.getExistDefaultWelcome();
this.getAppleList();
},
......@@ -310,7 +311,6 @@ export default {
});
},
handleDiabled(val) {
console.log('handleDiabled');
if (this.form.welcomeMediaList.filter(item => item.miniprogramSettingId && item.miniprogramSettingId == val.miniprogramSettingId).length) {
return true;
} else {
......@@ -674,7 +674,7 @@ export default {
para.suitDepartmentDeleteList.forEach(item => {
item.selectType = 1;
});
console.log(para);
this.submitbtnLoading = true;
postJsonRequest('/haoban-manage3-web/welcome/save', para)
.then(res => {
......@@ -684,8 +684,10 @@ export default {
type: 'success',
message: '保存成功!'
});
// this.$router.push('/salutatory');
this.$router.go(-1);
sessionStorage.setItem('activeName', para.type);
this.$router.push('salutatory');
} else {
this.$message.error({ message: `${res.data.message}` });
}
})
.catch(function(error) {
......
......@@ -77,7 +77,11 @@ export default {
*/
toLogin() {
const that = this;
const href = `${window.location.origin}/haoban-manage3-web/gic-login?wxEnterpriseId=${that.enterpriseList[that.active].wxEnterpriseId}&random=${that.$route.query.random}`;
const { random, hbPage } = this.$route.query;
let href = `${window.location.origin}/haoban-manage3-web/gic-login?wxEnterpriseId=${that.enterpriseList[that.active].wxEnterpriseId}&random=${random}`;
if (hbPage) {
href = `${window.location.origin}/haoban-manage3-web/gic-login?wxEnterpriseId=${that.enterpriseList[that.active].wxEnterpriseId}&random=${random}&hbPage=${hbPage}`;
}
window.location.href = href;
},
changeEnterprise(val) {
......
<template>
<div class="p-20">
<el-form label-width="100px" :model="form" size="small" :rules="rules" ref="form">
<dm-sub-title type="line">基础信息</dm-sub-title>
<div class="section">
<el-form-item label="链接类型" required>
<el-radio-group v-model="form.linkType">
<el-radio :label="1">专用链接</el-radio>
<el-radio :label="2">通用链接</el-radio>
</el-radio-group>
<p class="tips" v-if="form.linkType == 1">仅用于在GIC系统中创建“短信模板”时直接添加引用,便于系统根据会员手机号为该引流链接带上特定会员参数,常用于通过短信的方式来促进存量会员的私域转化。</p>
<p class="tips" v-else>可复制此引流链接或下载链接二维码,通过不同营销活动、渠道等引导客户添加导购企微号,转化成私域流量。</p>
</el-form-item>
<el-form-item label="链接名称" required prop="name">
<el-input placeholder="请输入链接名称" class="w-340" :maxlength="30" show-word-limit v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="链接描述" prop="remark">
<el-input placeholder="请输入链接描述" type="textarea" class="w-340" :maxlength="100" :autosize="{ minRow: 3, maxRow: 5 }" show-word-limit v-model="form.remark"></el-input>
</el-form-item>
<el-form-item label="链接标签" required prop="memberLabelId">
<el-button plain v-if="!form.memberLabelId" @click="tagsDialogVisible = true"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加标签</el-button>
<el-tag v-else closable @close="handleTagCloseTag">{{ form.memberLabelName }}</el-tag>
<dm-memberTag-group :visiable.sync="tagsDialogVisible" projectName="haobao-3" @save="saveTagPop"></dm-memberTag-group>
</el-form-item>
</div>
<dm-sub-title type="line">分配规则</dm-sub-title>
<p class="tips-info">
客户点击此引流链接,系统所分配的企微员工活码将根据下方层级配置区分优先级进行展示:<br />
<span class="dot"></span> <span style="color:#FA8C16">优先级判断规则是“从上到下、从左到右”。</span>如:当上一层级匹配到结果后,则不会再执行下个层级的判断;同一层级内,当左边的勾选项匹配到结果,则不会再执行层级内右边的勾选项<br />
<span class="dot"></span>按照优先级匹配到的结果的大前提是该员工“可生成活码”且“并未达到当天添加好友上限”,否则则继续进行后续优先级的判断; <br />
<span class="dot"></span>若按照优先级所匹配到的结果已经与该客户是好友关系了,不会继续进行后续优先级的判断,直接展示该员工的活码。<br />
</p>
<div class="section">
<div class="level">
<div class="title m-b-20">
<span>层级一:服务门店</span>
<el-switch v-model="form.customRuleJson.fw_store.open" :active-value="1" :inactive-value="0" :disabled="true"></el-switch>
</div>
<div class="content">
<el-checkbox v-model="form.customRuleJson.fw_store.zs" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.fw_store.zs, form.customRuleJson.fw_store.dz, form.customRuleJson.fw_store.dy) && form.customRuleJson.fw_store.zs">专属导购</el-checkbox>
<el-checkbox v-model="form.customRuleJson.fw_store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.fw_store.zs, form.customRuleJson.fw_store.dz, form.customRuleJson.fw_store.dy) && form.customRuleJson.fw_store.dz">店长</el-checkbox>
<el-checkbox v-model="form.customRuleJson.fw_store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.fw_store.zs, form.customRuleJson.fw_store.dz, form.customRuleJson.fw_store.dy) && form.customRuleJson.fw_store.dy">其他导购</el-checkbox>
</div>
</div>
<div class="level">
<div class="title">
<span>层级二:协管门店</span>
<el-switch v-model="form.customRuleJson.xg_store.open" :active-value="1" :inactive-value="0"></el-switch>
</div>
<p class="tips margin-num">当客户在多个协管门店下都有协管导购时,随机取一个协管门店导购</p>
<div class="content" v-if="form.customRuleJson.xg_store.open">
<el-checkbox v-model="form.customRuleJson.xg_store.zs" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.xg_store.zs, form.customRuleJson.xg_store.dz, form.customRuleJson.xg_store.dy) && form.customRuleJson.xg_store.zs">协管门店导购</el-checkbox>
<el-checkbox v-model="form.customRuleJson.xg_store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.xg_store.zs, form.customRuleJson.xg_store.dz, form.customRuleJson.xg_store.dy) && form.customRuleJson.xg_store.dz">店长</el-checkbox>
<el-checkbox v-model="form.customRuleJson.xg_store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.xg_store.zs, form.customRuleJson.xg_store.dz, form.customRuleJson.xg_store.dy) && form.customRuleJson.xg_store.dy">其他导购</el-checkbox>
</div>
<div>
<div class="p-20" v-loading="loading">
<el-form label-width="100px" :model="form" size="small" :rules="rules" ref="form">
<dm-sub-title type="line">基础信息</dm-sub-title>
<div class="section">
<el-form-item label="链接类型" required>
<el-radio-group v-model="form.linkType" :disabled="isEdit">
<el-radio :label="1">专用链接</el-radio>
<el-radio :label="2">通用链接</el-radio>
</el-radio-group>
<p class="tips" v-if="form.linkType == 1">仅用于在GIC系统中创建“短信模板”时直接添加引用,便于系统根据会员手机号为该引流链接带上特定会员参数,常用于通过短信的方式来促进存量会员的私域转化。</p>
<p class="tips" v-else>可复制此引流链接或下载链接二维码,通过不同营销活动、渠道等引导客户添加导购企微号,转化成私域流量。</p>
</el-form-item>
<el-form-item label="链接名称" required prop="name">
<el-input placeholder="请输入链接名称" class="w-340" :maxlength="20" show-word-limit v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="链接描述" prop="remark">
<el-input placeholder="请输入链接描述" type="textarea" class="w-340" :maxlength="100" :autosize="{ minRows: 4, maxRows: 6 }" show-word-limit v-model="form.remark"></el-input>
</el-form-item>
<el-form-item label="链接标签" required prop="memberLabelId" class="memberTag-form-item">
<el-button plain v-if="!form.memberLabelId" @click="tagsDialogVisible = true" type="primary"><i class="iconfont-components3 icon-cp-PlusOutlined font-12 m-r-5"></i>添加标签</el-button>
<el-tooltip :disabled="!isEdit || form.memberLabelStatus != 0" content="已删除" placement="top" v-else>
<el-tag closable @close="handleTagCloseTag" :type="isEdit && form.memberLabelStatus == 0 ? 'warning' : ''">{{ form.memberLabelName }}</el-tag>
</el-tooltip>
</el-form-item>
<dm-memberTag-group isHb :visiable.sync="tagsDialogVisible" projectName="haobao-3" @save="saveTagPop"></dm-memberTag-group>
</div>
<div class="level">
<div class="title">
<span>层级三:其他门店</span>
<el-switch v-model="form.storeRuleJson.open" :active-value="1" :inactive-value="0"></el-switch>
<dm-sub-title type="line">分配规则</dm-sub-title>
<p class="tips-info">
客户点击此引流链接,系统所分配的企微员工活码将根据下方层级配置区分优先级进行展示:<br />
<span class="dot"></span> <span style="color:#FA8C16">优先级判断规则是“从上到下、从左到右”。</span>如:当上一层级匹配到结果后,则不会再执行下个层级的判断;同一层级内,当左边的勾选项匹配到结果,则不会再执行层级内右边的勾选项;<br />
<span class="dot"></span>按照优先级匹配到的结果的大前提是该员工在【活码管理-员工活码】中具备有效的“单人活码”且“并未达到当天添加好友上限”,否则则继续进行后续优先级的判断; <br />
<span class="dot"></span>若按照优先级所匹配到的结果已经与该客户是好友关系了,不会继续进行后续优先级的判断,直接展示该员工的活码。<br />
</p>
<div class="section">
<div class="level">
<div class="title">
<span>层级一:服务门店</span>
<el-switch v-model="form.storeRuleJson.fw_store.open" :active-value="1" :inactive-value="0"></el-switch>
</div>
<div class="content m-t-20" v-if="form.storeRuleJson.fw_store.open">
<el-checkbox v-model="form.storeRuleJson.fw_store.zs" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.fw_store.zs, form.storeRuleJson.fw_store.dz, form.storeRuleJson.fw_store.dy) && form.storeRuleJson.fw_store.zs">专属导购</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.fw_store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.fw_store.zs, form.storeRuleJson.fw_store.dz, form.storeRuleJson.fw_store.dy) && form.storeRuleJson.fw_store.dz">店长</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.fw_store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.fw_store.zs, form.storeRuleJson.fw_store.dz, form.storeRuleJson.fw_store.dy) && form.storeRuleJson.fw_store.dy">其他导购</el-checkbox>
</div>
</div>
<div class="level3-1" v-if="form.storeRuleJson.open">
<el-radio-group v-model="form.storeRuleJson.store_type">
<el-radio :label="1">推荐门店</el-radio>
<el-radio :label="2">附近门店</el-radio>
</el-radio-group>
<p class="tips m-t-6" v-if="form.storeRuleJson.store_type == 1">可配置最多20个门店作为推荐门店让客户自主选择要添加的门店好友</p>
<p class="tips m-t-6" v-else>需客户同意授权当前定位信息,才可展示客户附近最多20家门店供客户选择,否则只能在指定门店下选择</p>
<div class="level">
<div class="title">
<span>层级二:协管门店</span>
<el-switch v-model="form.storeRuleJson.xg_store.open" :active-value="1" :inactive-value="0"></el-switch>
</div>
<p class="tips margin-num" v-if="form.storeRuleJson.xg_store.open">当客户在多个协管门店下都有协管导购时,随机取一个协管门店导购</p>
<div class="content" v-if="form.storeRuleJson.xg_store.open">
<el-checkbox v-model="form.storeRuleJson.xg_store.zs" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.xg_store.zs, form.storeRuleJson.xg_store.dz, form.storeRuleJson.xg_store.dy) && form.storeRuleJson.xg_store.zs">协管门店导购</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.xg_store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.xg_store.zs, form.storeRuleJson.xg_store.dz, form.storeRuleJson.xg_store.dy) && form.storeRuleJson.xg_store.dz">店长</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.xg_store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.xg_store.zs, form.storeRuleJson.xg_store.dz, form.storeRuleJson.xg_store.dy) && form.storeRuleJson.xg_store.dy">其他导购</el-checkbox>
</div>
</div>
<div class="level3-2" v-if="form.storeRuleJson.open">
<div class="level3-2-content" v-if="form.storeRuleJson.store_type == 1">
<el-form-item label="选择门店" label-width="92px" prop="storeList">
<selectShop @change="handleTransferChange" :data="storeData" :selected="form.storeList" />
</el-form-item>
<el-checkbox v-model="form.storeRuleJson.store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dz">店长</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dy">导购</el-checkbox>
<div class="level storeRuleJson">
<div class="title">
<span>层级三:其他门店</span>
<el-switch v-model="form.customRuleJson.open" :active-value="1" :inactive-value="0"></el-switch>
</div>
<div class="level3-1" v-if="form.customRuleJson.open">
<el-radio-group v-model="form.customRuleJson.store_type">
<el-radio :label="1">推荐门店</el-radio>
<el-radio :label="2">附近门店</el-radio>
</el-radio-group>
<p class="tips m-t-6" v-if="form.customRuleJson.store_type == 1">可配置最多20个门店作为推荐门店让客户自主选择要添加的门店好友</p>
<p class="tips m-t-6" v-else>需客户同意授权当前定位信息,才可展示客户附近最多20家门店供客户选择,否则只能在指定门店下选择</p>
</div>
<div class="level3-2-content" v-else>
<p class="content-tips">客户同意授权当前定位信息,可在“附近门店”中自主选择要添加的门店好友</p>
<div class="level3-2-content-check">
<el-checkbox v-model="form.storeRuleJson.store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dz">店长</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.dz, form.storeRuleJson.store.dy) && form.storeRuleJson.store.dy">导购</el-checkbox>
<div class="level3-2" v-if="form.customRuleJson.open">
<div class="level3-2-content" v-if="form.customRuleJson.store_type == 1">
<el-form-item label="选择门店" label-width="92px" prop="storeList">
<selectShop @change="handleTransferChange" :left-panel="leftPanel" @leftLoadMore="onLeftLoadMore" :data="storeData" :leftListTotal="leftPanel.totalCount" :max="20" :selected="form.storeList" :canSelectAll="false" />
</el-form-item>
<el-checkbox v-model="form.customRuleJson.store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.store.dz, form.customRuleJson.store.dy) && form.customRuleJson.store.dz">店长</el-checkbox>
<el-checkbox v-model="form.customRuleJson.store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.store.dz, form.customRuleJson.store.dy) && form.customRuleJson.store.dy">导购</el-checkbox>
</div>
<div class="level3-2-content" v-else>
<p class="content-tips">客户同意授权当前定位信息,可在“附近门店”中自主选择要添加的门店好友</p>
<div class="level3-2-content-check">
<el-checkbox v-model="form.customRuleJson.store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.store.dz, form.customRuleJson.store.dy) && form.customRuleJson.store.dz">店长</el-checkbox>
<el-checkbox v-model="form.customRuleJson.store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.store.dz, form.customRuleJson.store.dy) && form.customRuleJson.store.dy">导购</el-checkbox>
</div>
<p class="content-tips m-b-10">客户拒绝授权当前定位信息,可在下方指定的门店范围中(最多20家)自主选择要添加的门店好友</p>
<el-form-item label="选择门店" label-width="92px" prop="storeList">
<selectShop @change="handleTransferChange" :left-panel="leftPanel" @leftLoadMore="onLeftLoadMore" :data="storeData" :leftListTotal="leftPanel.totalCount" :max="20" :selected="form.storeList" :canSelectAll="false" />
</el-form-item>
<el-checkbox v-model="form.customRuleJson.store.ndz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.store.ndz, form.customRuleJson.store.ndy) && form.customRuleJson.store.ndz">店长</el-checkbox>
<el-checkbox v-model="form.customRuleJson.store.ndy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.store.ndz, form.customRuleJson.store.ndy) && form.customRuleJson.store.ndy">导购</el-checkbox>
</div>
<p class="content-tips m-b-10">客户拒绝授权当前定位信息,可在下方指定的门店范围中(最多20家)自主选择要添加的门店好友</p>
<el-form-item label="选择门店" label-width="92px" prop="storeList">
<selectShop @change="handleTransferChange" :data="storeData" :selected="form.storeList" />
</el-form-item>
<el-checkbox v-model="form.storeRuleJson.store.ndz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.ndz, form.storeRuleJson.store.ndy) && form.storeRuleJson.store.ndz">店长</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.store.ndy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.store.ndz, form.storeRuleJson.store.ndy) && form.storeRuleJson.store.ndy">导购</el-checkbox>
</div>
</div>
<div class="level3-3" v-if="form.storeRuleJson.open">
<el-checkbox v-model="form.storeRuleJson.city_store.open" :true-label="1" :false-label="0">除附近门店/指定门店之外,允许客户按照省市区自由筛选商户所有门店进行添加</el-checkbox>
<div class="level3-3-content" v-if="form.storeRuleJson.city_store.open">
<el-checkbox v-model="form.storeRuleJson.city_store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.city_store.dz, form.storeRuleJson.city_store.dy) && form.storeRuleJson.city_store.dz">店长</el-checkbox>
<el-checkbox v-model="form.storeRuleJson.city_store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.storeRuleJson.city_store.dz, form.storeRuleJson.city_store.dy) && form.storeRuleJson.city_store.dy">导购</el-checkbox>
<div class="level3-3" v-if="form.customRuleJson.open">
<el-checkbox v-model="form.customRuleJson.city_store.open" :true-label="1" :false-label="0">除附近门店/指定门店之外,允许客户按照省市区自由筛选商户所有门店进行添加</el-checkbox>
<div class="level3-3-content" v-if="form.customRuleJson.city_store.open">
<el-checkbox v-model="form.customRuleJson.city_store.dz" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.city_store.dz, form.customRuleJson.city_store.dy) && form.customRuleJson.city_store.dz">店长</el-checkbox>
<el-checkbox v-model="form.customRuleJson.city_store.dy" :true-label="1" :false-label="0" :disabled="disabledProperty(form.customRuleJson.city_store.dz, form.customRuleJson.city_store.dy) && form.customRuleJson.city_store.dy">导购</el-checkbox>
</div>
</div>
</div>
</div>
</div>
<dm-sub-title type="line">欢迎语设置</dm-sub-title>
<div class="section">
<welcomeItem @getWelcomeId="getWelcomeId" :welcomeIdP="form.welcomeId" ref="welcomeItem"></welcomeItem>
</div>
<dm-sub-title type="line">落地页配置</dm-sub-title>
<div class="section flex" style="margin-bottom: 40px;">
<el-form-item label="选择模板">
<div class="table">
<div class="search">
<el-input class="w-260" placeholder="请输入标题" v-model="landingPage.pageSearchText" @keyup.native="toInput" clearable @clear="getList"></el-input>
<el-button plain class="ylbtn" @click="addTemp">新建模板</el-button>
<dm-sub-title type="line">欢迎语设置</dm-sub-title>
<div class="section">
<welcomeItem :welcomeId.sync="form.welcomeId" class="welcomeItem" :welcomeType.sync="welcomeType" ref="welcomeItem" welcomeName="link"></welcomeItem>
</div>
<dm-sub-title type="line">落地页配置</dm-sub-title>
<div class="section flex" style="margin-bottom: 40px;">
<el-form-item label="选择模板" class="pageId">
<div class="table">
<div class="search">
<el-input class="w-260" placeholder="请输入标题" v-model="landingPage.pageSearchText" @keyup.native="toInput" clearable @clear="getList"></el-input>
<el-button plain type="primary" @click="addTemp">新建模板</el-button>
</div>
<el-table :data="landingData" height="426" :loading="landingLoading" @row-click="row => getCurrentRow(row)">
<el-table-column width="55">
<template slot-scope="{ row }">
<el-radio :label="row.pageId" v-model="form.pageId" class="hideLable" @change.native="getCurrentRow(row)"><i></i></el-radio>
</template>
</el-table-column>
<el-table-column prop="pageCode" label="模板ID" minWidth="148"></el-table-column>
<el-table-column prop="pageName" label="模板名称" minWidth="172" show-overflow-tooltip></el-table-column>
<el-table-column prop="pageTitle" label="页面标题" minWidth="156" show-overflow-tooltip> </el-table-column>
<el-table-column prop="guideComment" label="引导语" minWidth="152" show-overflow-tooltip></el-table-column>
</el-table>
<el-pagination class="paginationBox" background @current-change="getList" :current-page.sync="landingPage.pageNum" :page-size.sync="landingPage.pageSize" layout="prev, pager,next " :total="total"></el-pagination>
</div>
<el-table :data="landingData" height="426" :loading="landingLoading">
<el-table-column width="55">
<template slot-scope="{ row }">
<el-radio :label="row.pageId" v-model="form.pageId" @change.native="getCurrentRow(row)"> &nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column prop="pageCode" label="模板ID" minWidth="148"></el-table-column>
<el-table-column prop="pageName" label="模板名称" minWidth="172" show-overflow-tooltip></el-table-column>
<el-table-column prop="pageTitle" label="页面标题" minWidth="156" show-overflow-tooltip> </el-table-column>
<el-table-column prop="guideComment" label="引导语" show-overflow-tooltip></el-table-column>
</el-table>
<el-pagination class="paginationBox" background @current-change="getList" :current-page="landingPage.pageNum" layout="prev, pager,next " :page-size="landingPage.pageSize" :total="total"></el-pagination>
</el-form-item>
<div class="preview" v-if="landingForm && Object.keys(landingForm).length">
<p class="previewTitle">落地页预览</p>
<previewPage :data="landingForm" />
<p class="previewBottom">此二维码只是样式预览效果,请勿直接使用</p>
</div>
</el-form-item>
<div class="preview" v-if="landingForm && Object.keys(landingForm).length">
<p class="previewTitle">落地页预览</p>
<previewPage :data="landingForm" />
<p class="previewBottom">此二维码只是样式预览效果,请勿直接使用</p>
</div>
</div>
<div class="footBtn">
<el-button type="primary" @click="save" :loading="btnLoading">保存</el-button>
</div>
</el-form>
</el-form>
</div>
<div class="footBtn">
<el-button type="primary" @click="save" :loading="btnLoading">保存</el-button>
</div>
</div>
</template>
......@@ -147,10 +151,7 @@ import { scrollToError } from '@/utils/validate';
export default {
data() {
const validateStoreList = (rule, value, cb) => {
if (this.form.storeRuleJson.open == 1 && !this.form.storeList.length) {
return cb(new Error('请选择门店'));
}
if (this.form.storeRuleJson.open == 1 && !this.form.storeList.length) {
if (this.form.customRuleJson.open == 1 && !this.form.storeList.length) {
return cb(new Error('请选择门店'));
}
cb();
......@@ -163,7 +164,19 @@ export default {
pageNum: 1,
pageSize: 20
},
leftPanel: {
pageNum: 1,
totalPage: 1,
totalCount: 0,
isMultiplePage: true,
loading: false,
remote: true,
filterMethod: this.filterMethod
},
search: '',
welcomeType: 1,
landingLoading: false,
loading: false,
landingData: [],
total: 0,
landingForm: {},
......@@ -172,19 +185,19 @@ export default {
rules: {
name: { required: true, message: '请输入链接名称' },
memberLabelId: { required: true, message: '请选择链接标签' },
storeList: { validator: validateStoreList }
storeList: { required: true, validator: validateStoreList }
},
storeData: [],
form: {
linkType: 1,
memberLabelName: '测试121212-木瑾0630测试标签值50',
memberLabelId: 'fd6b44967aa647bcadfad10706244c56',
memberLabelName: '',
memberLabelId: '',
storeList: [],
name: '',
pageId: '',
welcomeId: '',
remark: '',
customRuleJson: {
storeRuleJson: {
fw_store: {
open: 1, //是否开启 1是0否
zs: 1, //专属导购
......@@ -198,7 +211,7 @@ export default {
dy: 0
}
},
storeRuleJson: {
customRuleJson: {
//其他门店
open: 1, //是否开启1是0否
store_type: 1, // 1推荐门店 2附近门店,
......@@ -227,9 +240,13 @@ export default {
},
mounted() {
this.getList();
document.addEventListener('visibilitychange', () => {
if (document.visibilityState == 'visible') {
this.landingPage = {
pageSearchText: '',
pageNum: 1,
pageSize: 20
};
this.getList();
}
});
......@@ -243,38 +260,72 @@ export default {
toInput: _debounce(function(e, value) {
this.getList();
}, 500),
onLeftLoadMore() {
if (this.leftPanel.pageNum < this.leftPanel.totalPage) {
this.leftPanel.pageNum++;
this.leftPanel.loading = true;
this.getStoreList();
}
},
filterMethod(search) {
this.search = search;
this.leftPanel.pageNum = 1;
this.leftPanel.loading = true;
this.storeData = [];
return this.getStoreList();
},
getStoreList() {
console.log(storeListApi);
storeListApi({}).then(res => {
console.log(res);
const { result } = res.data.result;
this.storeData = result || [];
if (this.form.storeList && this.form.storeList.length) {
this.storeData.map(el => {
el.checked = this.form.storeList.some(item => item.storeId == el.storeId);
return el;
});
}
});
return storeListApi({ pageNum: this.leftPanel.pageNum, pageSize: 20, storeSearchParams: this.search })
.then(res => {
const { result, totalPage, totalCount } = res.data.result;
this.leftPanel.totalPage = totalPage;
if (Array.isArray(result) && Array.isArray(this.form.storeList)) {
this.storeData = this.storeData.concat(
result.map(el => {
el.checked = this.form.storeList.some(item => item.storeId == el.storeId);
return el;
})
);
}
if (this.search.length == 0) {
this.leftPanel.totalCount = totalCount;
}
})
.finally(_ => {
this.leftPanel.loading = false;
});
},
getDetail() {
linkDetail({ linkId: this.$route.params.id }).then(res => {
const { result } = res.data;
if (result) {
const { link, page } = result;
link.storeRuleJson = JSON.parse(link.storeRuleJson);
link.customRuleJson = JSON.parse(link.customRuleJson);
this.form = link;
this.landingForm = page;
this.getStoreList();
}
console.log(result);
});
this.loading = true;
linkDetail({ linkId: this.$route.params.id })
.then(res => {
const { result } = res.data;
if (result) {
const { link, page } = result;
link.customRuleJson = JSON.parse(link.customRuleJson);
link.storeRuleJson = JSON.parse(link.storeRuleJson);
link.storeList = link.storeList ? link.storeList : [];
this.form = link;
if (!this.form.welcomeId) {
this.welcomeType = 2;
}
this.landingForm = page;
this.getStoreList();
}
})
.finally(_ => {
this.loading = false;
});
},
saveTagPop(data) {
const { tagItemId, tagItemName } = data;
this.form.memberLabelName = tagItemName;
this.form.memberLabelId = tagItemId;
this.form.memberLabelStatus = 1;
this.$refs.form.validateField('memberLabelId');
},
handleTableRowClick(row) {
this.form.pageId = row.pageId;
},
handleTagCloseTag() {
this.form.memberLabelName = '';
......@@ -283,18 +334,15 @@ export default {
handleTransferChange(val) {
console.log(val);
this.form.storeList = val;
this.$refs.form.validateField('storeList');
},
getWelcomeId(e) {
this.form.welcomeId = e;
// this.$refs.form.validateField('storeList');
},
getList() {
this.landingLoading = true;
guidePageList(this.landingPage)
.then(res => {
const { result, totalCount } = res.data.result;
const { result, search } = res.data.result;
if (result) {
this.total = totalCount;
this.total = search;
this.landingData = result;
}
})
......@@ -305,50 +353,136 @@ export default {
getCurrentRow(row) {
console.log(row);
this.landingForm = row;
this.form.pageId = row.pageId;
},
addTemp() {
this.$router.push('/ladingPageAdd');
window.open('/haoban-3/#/ladingPageAdd');
},
disabledProperty(a, b, c, d) {
const args = [...arguments];
return args.filter(i => i == 1).length <= 1;
},
save() {
this.$refs.form.validate(val => {
console.log(val);
if (!val) {
this.scrollToError(this);
return;
}
this.validateForm();
});
},
validateForm() {
if (!this.form.storeRuleJson.fw_store.open && !this.form.storeRuleJson.xg_store.open && !this.form.customRuleJson.open) {
this.scrollToError(this, 'storeRuleJson');
this.$message.warning('请设置分配规则');
return;
}
if (!this.$refs.welcomeItem.submit()) {
this.scrollToError(this, 'welcomeItem');
return;
}
if (!this.form.pageId) {
this.$message.error('请选择落地页模板');
this.scrollToError(this, 'pageId');
this.$message.warning('请选择落地页模板');
return;
}
if (this.isEdit && this.form.memberLabelStatus == 0) {
this.$confirm('关联的标签在GIC中已被删除,无法统计和查看添加好友客户数据,为确保后续客户数据统计,请重新关联标签', '关联的标签已被删除,请重新关联标签', {
confirmButtonText: '选择标签',
cancelButtonText: '取消',
type: 'warning'
}).then(res => {
this.form.memberLabelId = '';
this.form.memberLabelName = '';
this.$refs.form.validateField('memberLabelId');
this.$nextTick(_ => {
const isError = document.getElementsByClassName('memberTag-form-item');
isError[0].scrollIntoView({
block: 'center',
behavior: 'smooth'
});
});
});
return;
}
const data = JSON.parse(JSON.stringify(this.form));
data.customRuleJson = JSON.stringify(data.customRuleJson);
if (data.storeRuleJson.fw_store.open == 0) {
data.storeRuleJson.fw_store = {
open: 0, //是否开启 1是0否
zs: 1, //专属导购
dz: 0, //店长
dy: 0 // 其他导购
};
}
if (data.storeRuleJson.xg_store.open == 0) {
data.storeRuleJson.xg_store = {
open: 0,
zs: 1,
dz: 0,
dy: 0
};
}
if (data.customRuleJson.open == 0) {
data.customRuleJson = {
open: 0, //是否开启1是0否
store_type: 1, // 1推荐门店 2附近门店,
store: {
dz: 1, //店长
dy: 0, // 导购
ndz: 1, // 拒绝后店长
ndy: 0 //拒绝后导购
},
//省市筛选
city_store: {
open: 1, //是否开启1是0否
dz: 1, //店长
dy: 0 //导购
}
};
data.storeList = [];
}
if (data.customRuleJson.city_store.open == 0) {
data.customRuleJson.city_store = {
open: 0, //是否开启1是0否
dz: 1, //店长
dy: 0 //导购
};
}
data.storeRuleJson = JSON.stringify(data.storeRuleJson);
data.customRuleJson = JSON.stringify(data.customRuleJson);
data.wxEnterpriseId = this.wxEnterpriseId;
this.$refs.form.validate(val => {
if (!val) {
this.scrollToError(this);
return;
}
this.btnLoading = true;
if (this.isAdd) {
linkAdd(data)
.then(res => {
this.$router.go(-1);
})
.finally(_ => {
if (this.welcomeType == 2) {
data.welcomeId = '';
}
delete data.memberLabelStatus;
this.btnLoading = true;
if (this.isAdd) {
linkAdd(data)
.then(res => {
setTimeout(() => {
this.btnLoading = false;
});
} else {
linkUpdate(data)
.then(res => {
this.$router.go(-1);
})
.finally(_ => {
}, 1000);
})
.catch(_ => {
this.btnLoading = false;
});
} else {
linkUpdate(data)
.then(res => {
setTimeout(() => {
this.btnLoading = false;
});
}
});
this.$router.go(-1);
}, 1000);
})
.catch(_ => {
this.btnLoading = false;
});
}
}
}
};
......@@ -359,7 +493,7 @@ export default {
padding: 20px 0 40px 0;
.level {
width: 100%;
min-height: 94px;
background: #f7f8fa;
border-radius: 2px;
padding: 16px 12px;
......@@ -474,7 +608,7 @@ export default {
}
}
.footBtn {
width: 100%;
width: calc(100vw - 190px);
height: 56px;
background: #ffffff;
box-shadow: 1px -2px 8px 0px rgba(220, 223, 230, 0.6);
......@@ -485,4 +619,7 @@ export default {
justify-content: center;
z-index: 100;
}
.el-pagination {
padding: 0 !important;
}
</style>
......@@ -3,7 +3,7 @@
<dm-sub-title class="m-b-10">
<div class="title">
<span>引流加入</span>
<el-button type="text"><i class="iconfont-hb3 iconzhibiaoshuoming info-icon"></i>指标说明</el-button>
<el-button type="text" v-jumpLink:linkList><i class="iconfont-hb3 iconzhibiaoshuoming m-r-6"></i>指标说明</el-button>
</div>
</dm-sub-title>
<!-- <el-tabs v-model="activeName" @tab-click="handleClick">
......@@ -11,29 +11,29 @@
<div class="flex flex-space-between m-b-16">
<div class="flex flex-align-center">
<el-input placeholder="请输入模板ID/名称、创建人" class="w-260" v-model="form.searchParams" @keyup.native="value => toInput(value, searchInput)" clearable @clear="getList"> <i slot="prefix" class="el-input__icon el-icon-search"></i> </el-input>
<el-input placeholder="请输入链接ID/名称、创建人" class="w-260" v-model="form.searchParams" @keyup.native="value => toInput(value, searchInput)" clearable @clear="getList"> <i slot="prefix" class="el-input__icon el-icon-search"></i> </el-input>
<el-select class="m-l-10 w-160" v-model="form.linkType" placeholder="全部类型" @change="getList" clearable @clear="clear">
<el-option v-for="item in options" :key="item.key" :label="item.label" :value="item.key"> </el-option>
</el-select>
<el-date-picker class="m-l-10 w-256" v-model="form.dateRange" @change="getList" type="daterange" :value-format="'yyyy-MM-dd'" clearable @clear="getList" range-separator="~" start-placeholder="创建开始日期" end-placeholder="创建结束日期"> </el-date-picker>
<el-date-picker class="m-l-10 w-256" v-model="form.dateRange" @change="getList" type="daterange" :picker-options="pickerOptions" :value-format="'yyyy-MM-dd'" clearable @clear="getList" range-separator="~" start-placeholder="创建开始日期" end-placeholder="创建结束日期"> </el-date-picker>
</div>
<div>
<el-button @click="goLanding">落地页模板</el-button>
<el-button type="primary" @click="$router.push('attractFlowLinkAdd')">新增链接</el-button>
<el-button type="primary" @click="$router.push('attractFlowLinkAdd')" v-if="$getButtonLimit($buttonCode.addLink)" :limit-code="$buttonCode.addLink">新增链接</el-button>
</div>
</div>
<el-table :data="tableData" style="width:100%" v-loading="loading" @sort-change="handleSortChange">
<el-table-column width="120" prop="linkId" label="链接ID" />
<el-table :data="tableData" style="width:100%" v-loading="loading" :max-height="tableMaxHeight" @sort-change="handleSortChange">
<el-table-column min-width="120" prop="linkCode" label="链接ID" />
<el-table-column minWidth="180" prop="memberId" label="链接信息">
<template slot-scope="{ row }">
<p class="overFlow">{{ row.name }}</p>
<p class="tips">{{ row.linkCode }}</p>
<p class="tips">code:{{ row.shortCode }}</p>
</template>
</el-table-column>
<el-table-column width="110" prop="linkType" label="链接类型">
<template slot-scope="{ row }">
<el-tag size="mini" v-if="row.linkType == 1"> 专用链接 </el-tag>
<el-tag v-else size="mini" class="el-tag--cyan">通用链接</el-tag>
<el-tag size="mini" class="el-tag--cyan" v-if="row.linkType == 1"> 专用链接 </el-tag>
<el-tag v-else size="mini">通用链接</el-tag>
</template>
</el-table-column>
<el-table-column v-for="v in tableHeader" :show-overflow-tooltip="v.tooltip" :width="v.width" :min-width="v.minWidth" :align="v.align" :key="v.prop" :prop="v.prop" :label="v.label" :formatter="v.formatter" :sortable="v.sortable" :fixed="v.fixed">
......@@ -42,7 +42,7 @@
<span v-else>{{ scope.row[v.prop] }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="160" fixed="right">
<el-table-column label="操作" min-width="160" fixed="right">
<template slot-scope="{ row }">
<dm-dropdown ref="drop" :scope-data="row" :configs="btnArr" />
</template>
......@@ -52,9 +52,6 @@
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-size.sync="form.pageSize" :current-page.sync="form.pageNum" layout="total, sizes, prev, pager, next, jumper" :page-sizes="[20, 40, 60, 80]" :total="total"> </el-pagination>
</div>
<links :src="linkUrl" :show.sync="show" :imageName="imageName" />
<!-- </el-tab-pane>
<el-tab-pane label="引流入群" name="second">引流入群</el-tab-pane>
</el-tabs> -->
</div>
</template>
<script>
......@@ -66,7 +63,7 @@ const tableHead = [
{
label: '添加好友人数',
prop: 'addNumT',
width: '130',
minWidth: '130',
sortable: 'custom',
formatter: function(row) {
return `<span>${row.addNumT ? row.addNumT : '- -'}</span>`;
......@@ -75,7 +72,7 @@ const tableHead = [
{
label: '今日新增人数',
prop: 'addNum',
width: '130',
minWidth: '130',
sortable: 'custom',
formatter: function(row) {
return `<span>${row.addNum ? row.addNum : '- -'}</span>`;
......@@ -84,7 +81,7 @@ const tableHead = [
{
label: '点击总人次',
prop: 'clickTimesT',
width: '120',
minWidth: '120',
sortable: 'custom',
formatter: function(row) {
return `<span>${row.clickTimesT ? row.clickTimesT : '- -'}</span>`;
......@@ -92,17 +89,17 @@ const tableHead = [
},
{
label: '今日点击人次',
prop: 'clickNum',
width: '130',
prop: 'clickTimes',
minWidth: '130',
sortable: 'custom',
formatter: function(row) {
return `<span>${row.clickNum ? row.clickNum : '- -'}</span>`;
return `<span>${row.clickTimes ? row.clickTimes : '- -'}</span>`;
}
},
{
label: '点击总人数',
prop: 'clickNumT',
width: '120',
minWidth: '120',
sortable: 'custom',
formatter: function(row) {
return `<span>${row.clickNumT ? row.clickNumT : '- -'}</span>`;
......@@ -111,7 +108,7 @@ const tableHead = [
{
label: '今日点击人数',
prop: 'clickNum',
width: '130',
minWidth: '130',
sortable: 'custom',
formatter: function(row) {
return `<span>${row.clickNum ? row.clickNum : '- -'}</span>`;
......@@ -139,8 +136,11 @@ const tableHead = [
}
];
export default {
name: 'attractFlowLink',
data() {
let tableMaxHeight = document.body.clientHeight - 285 + 'px';
return {
tableMaxHeight,
activeName: 'first',
loading: false,
form: {
......@@ -148,7 +148,8 @@ export default {
pageNum: 1,
linkType: '',
searchParams: '',
dateRange: []
dateRange: [],
sortColumn: ''
},
options: [
{
......@@ -160,24 +161,51 @@ export default {
key: 2
}
],
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() > end.getTime();
}
},
btnArr: [
{
text: '数据',
visible: row => {
return this.$getButtonLimit(this.$buttonCode.dataLink);
},
props: {
limitCode: this.$buttonCode.dataLink
},
handler: row => this.goDetail(row, 'second')
},
{
text: '详情',
visible: row => {
return this.$getButtonLimit(this.$buttonCode.infoLink);
},
props: {
limitCode: this.$buttonCode.infoLink
},
handler: row => this.goDetail(row, 'first')
},
{
text: '链接',
visible: row => {
return row.linkType == 2;
return this.$getButtonLimit(this.$buttonCode.downLink) && row.linkType == 2;
},
props: {
limitCode: this.$buttonCode.downLink
},
handler: row => this.goLink(row)
},
{
text: '编辑',
visible: row => {
return this.$getButtonLimit(this.$buttonCode.editLink);
},
props: {
limitCode: this.$buttonCode.editLink
},
handler: row => this.goEdit(row)
}
],
......@@ -191,6 +219,9 @@ export default {
mounted() {
this.getList();
},
activated() {
this.getList();
},
components: {
links
},
......@@ -252,16 +283,18 @@ export default {
this.$router.push('/ladingPageList');
},
goDetail(row, type) {
this.$router.push(`attractFlowLinkInfo/${row.linkId}?type=${type}`);
if (type == 'second') {
this.$router.push(`attractFlowLinkInfo/${row.linkId}?type=${type}`);
} else {
this.$router.push(`attractFlowLinkInfos/${row.linkId}?type=${type}`);
}
},
goLink(row) {
this.linkUrl = row.linkUrl;
this.imageName = `${row.linkId}_${row.name}`;
this.imageName = `${row.linkCode}_${row.name}`;
this.show = true;
console.log(row);
},
goEdit(row) {
console.log(row);
this.$router.push(`attractFlowLinkEdit/${row.linkId}`);
}
}
......@@ -272,9 +305,6 @@ export default {
width: 100%;
display: flex;
justify-content: space-between;
.info-icon {
margin-right: 8px;
}
}
.overFlow {
overflow: hidden;
......
<template>
<div class="info p-20" v-loading="loading">
<div class="flex p-b-40">
<vue-qr id="qrImg" :text="link.linkUrl" :size="200" :margin="5" v-if="link.linkType == 2"></vue-qr>
<vue-qr id="qrImg" class="m-r-30" :text="link.linkUrl" :size="200" :margin="5" v-if="link.linkType == 2"></vue-qr>
<div class="title-right">
<el-descriptions :title="link.name">
<el-descriptions-item label="ID">{{ link.linkId }}</el-descriptions-item>
<el-descriptions-item label="code">{{ link.linkCode }}</el-descriptions-item>
<el-descriptions-item label="ID">{{ link.linkCode }}</el-descriptions-item>
<el-descriptions-item label="code">{{ link.shortCode }}</el-descriptions-item>
<el-descriptions-item label="链接类型">
<el-tag size="mini" :class="link.linkType == 2 ? 'el-tag--cyan' : ''">{{ link.linkType == 1 ? '专用链接' : '通用链接' }}</el-tag></el-descriptions-item
<el-tag size="mini" :class="link.linkType == 2 ? '' : 'el-tag--cyan'">{{ link.linkType == 1 ? '专用链接' : '通用链接' }}</el-tag></el-descriptions-item
>
<el-descriptions-item label="创建人">{{ link.creatorName }}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ filters.formatTimeStamp(link.createTime) }}</el-descriptions-item>
<el-descriptions-item label="链接标签">
<el-tag size="mini">{{ link.memberLabelName }}</el-tag>
<el-tooltip :disabled="link.memberLabelStatus != 0" content="已删除" placement="top">
<el-tag size="mini" :type="link.memberLabelStatus == 0 ? 'warning' : 'info'">{{ link.memberLabelName }}</el-tag>
</el-tooltip>
</el-descriptions-item>
<el-descriptions-item label="链接描述">{{ link.remark }}</el-descriptions-item>
</el-descriptions>
<div class="m-t-10">
<el-button icon="el-icon-download" plain @click="downloadQR">下载二维码</el-button>
<el-button v-if="link.linkType == 2" v-clipboard:text="link.linkUrl" plain>复制链接</el-button>
<el-button v-if="link.linkType == 2" plain @click="goEdit">修改</el-button>
<el-button v-if="link.linkType == 2" icon="iconfont-hb3 iconxiazai" type="primary" @click="downloadQR" style="width: 120px;">下载二维码</el-button>
<el-button v-if="link.linkType == 2" v-clipboard:text="link.linkUrl" type="primary" plain style="width: 98px;">复制链接</el-button>
<el-button plain @click="goEdit" :type="link.linkType == 1 ? 'primary' : ''" style="width: 98px;">修改</el-button>
</div>
</div>
</div>
<div class="fixed-tab" v-if="scrollTop > 300">
<div class="fixed-tab" v-if="scrollTop >= fixedHeight">
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="详情信息" name="first"> <div></div> </el-tab-pane>
<el-tab-pane label="数据统计" name="second">
......@@ -32,10 +34,10 @@
</el-tabs>
</div>
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="详情信息" name="first">
<el-tab-pane label="详情信息" name="first" v-if="$getButtonLimit(this.$buttonCode.infoLink)" :limit-code="$buttonCode.infoLink">
<act-code-detail-info type="actLink" :enterprise-id="link.enterpriseId" :welcome-id="link.welcomeId"></act-code-detail-info>
<dm-sub-title>落地页配置</dm-sub-title>
<div class="m-t-15" v-show="page.pageTitle">
<div class="m-t-15">
<div class="flex">
<div class="welcome-left-view">
<el-descriptions :column="1">
......@@ -43,7 +45,7 @@
<el-descriptions-item label="商户名称">{{ page.merchantName }}</el-descriptions-item>
<el-descriptions-item label="商户电话">{{ page.merchantPhoneNumber }}</el-descriptions-item>
<el-descriptions-item label="商户LOGO">
<img :src="page.merchantLogo" class="merchantLogo" />
<img :src="page.merchantLogo" class="merchantLogo" v-if="page.merchantLogo" />
</el-descriptions-item>
<el-descriptions-item label="引导语">{{ page.guideComment }}</el-descriptions-item>
</el-descriptions>
......@@ -56,16 +58,16 @@
</div>
</div>
</el-tab-pane>
<el-tab-pane label="数据统计" name="second">
<el-tab-pane label="数据统计" name="second" v-if="$getButtonLimit(this.$buttonCode.dataLink)" :limit-code="$buttonCode.dataLink">
<div class="statistics">
<dm-sub-title>
<div class="title">
<span>概览</span>
<el-button type="text"><i class="iconfont-hb3 iconzhibiaoshuoming info-icon"></i>指标说明</el-button>
<el-button type="text" v-jumpLink:linkGl><i class="iconfont-hb3 iconzhibiaoshuoming m-r-6"></i>指标说明</el-button>
</div>
</dm-sub-title>
<el-row :gutter="20">
<el-col :span="6" v-for="(el, index) in targetList" :key="index">
<el-col :span="8" v-for="(el, index) in targetList" :key="index">
<target-group :data-list="el"></target-group>
</el-col>
</el-row>
......@@ -74,17 +76,17 @@
<ul class="datebox" v-for="(lis, index) in dateLis" :key="lis.key">
<li :class="dateKey == index ? 'activeClass' : 'noActive'" class="dateLisBox" @click="btnChange(index)">{{ lis.value }}</li>
</ul>
<el-date-picker class="w256" v-model="dateDefault" type="daterange" range-separator="~" start-placeholder="创建开始日期" end-placeholder="创建结束日期" :default-time="['00:00:00', '23:59:59']" :picker-options="pickerOptions()" @change="onDateChange" value-format="yyyy-MM-dd"> </el-date-picker>
<el-date-picker class="w256" v-model="dateDefault" type="daterange" range-separator="~" start-placeholder="创建开始日期" end-placeholder="创建结束日期" :default-time="['00:00:00', '23:59:59']" :picker-options="pickerOptions()" :format="[2, 3, 4].includes(dateKey) ? 'yyyy-MM' : 'yyyy-MM-dd'" @change="onDateChange" value-format="yyyy-MM-dd" :clearable="false"> </el-date-picker>
</div>
</div>
<new-add-chart :charData="charData" id="new-add-chart"></new-add-chart>
<new-add-chart :charData="charData" id="new-add-chart" style="margin-top:26px"></new-add-chart>
<dm-sub-title>
<div class="title">
<span>查看明细</span>
<el-button type="text"><i class="iconfont-hb3 iconzhibiaoshuoming info-icon"></i>指标说明</el-button>
<el-button type="text" v-jumpLink:linkCkmx><i class="iconfont-hb3 iconzhibiaoshuoming m-r-6"></i>指标说明</el-button>
</div>
</dm-sub-title>
<data-detail :id="linkId" :api="statisticsClerk" class="m-t-15"></data-detail>
<data-detail :id="linkId" typeT="link" :api="statisticsClerk" class="m-t-15"></data-detail>
</div>
</el-tab-pane>
</el-tabs>
......@@ -113,60 +115,13 @@ export default {
mixins: [mixin],
data() {
return {
fixedHeight: 280,
filters,
statisticsClerk,
loading: false,
activeName: this.$route.query.type,
link: {
// linkId: 419648718594129960,
// customRuleJson: '{"fw_store":{"open":1,"zs":1,"dz":1,"dy":1},"xg_store":{"open":1,"zs":1,"dz":1,"dy":0}}',
// linkType: 2,
// memberLabelId: 'fd6b44967aa647bcadfad10706244c56',
// memberLabelName: '测试121212-木瑾0630测试标签值50',
// name: '活码链接-711',
// pageId: 418460224953786370,
// remark: '说明',
// linkUrl: 'www.baidu.com',
// storeList: [
// {
// storeId: 'ff80808181e0effb0181e26a674c000e',
// storeName: '测试有赞商城',
// storeCode: '991001'
// },
// {
// storeId: 'ff80808181e0effb0181e128d0b70000',
// storeName: '达达店铺',
// storeCode: 'DADA'
// }
// ],
// storeRuleJson: '{"store_type":2,"open":0,"store":{"dz":0,"dy":1,"ndz":0,"ndy":1}, "city_store":{"open":1,"dz":1,"dy":1}}',
// welcomeId: '04af9e55515d4352be0b2a3119005ce9',
// enterpriseId: 'ff8080815dacd3a2015dacd3ef5c0000',
// wxEnterpriseId: 'ca66a01b79474c40b3e7c7f93daf1a3b',
// createTime: 1657594862000,
// createorId: 'fefd1c81641711e69d0818c58a146fd2',
// creatorName: '艾蜜雪管理员'
},
page: {
// createTime: 1657594862000,
// createorId: 'fefd1c81641711e69d0818c58a146fd2',
// createorName: '艾蜜雪管理员',
// enterpriseId: 'ff8080815dacd3a2015dacd3ef5c0000',
// guideComment: '长按保存图片并识别二维码添加您的专属导购',
// merchantLogo: 'https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464',
// merchantName: '金华达摩11',
// merchantPhoneNumber: '12-31322',
// modifierId: 'fefd1c81641711e69d0818c58a146fd2',
// modifierName: '艾蜜雪管理员',
// pageBackgroundImg: '',
// pageCode: 'MB01419872763172380673',
// pageId: '419872763172380673',
// pageName: 'test1',
// pageTitle: '嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡',
// status: 1,
// updateTime: 1657594862000,
// wxEnterpriseId: 'ca66a01b79474c40b3e7c7f93daf1a3b'
},
activeName: this.$route.query.type ? this.$route.query.type : 'first',
link: {},
page: {},
originTargetList: [
[
{
......@@ -235,12 +190,20 @@ export default {
getChartList() {
let para = {
linkId: this.linkId,
startTime: this.dateDefault[0],
endTime: this.dateDefault[1]
startTime: this.dateDefault[0] + ' 00:00:00',
endTime: this.dateDefault[1] + ' 23:59:59'
};
statisticsChart(para).then(res => {
const { result } = res.data;
this.charData = result;
this.charData = result || [];
// this.charData = [
// { addNum: 0, bizDate: '2022-07-22', clickNum: 0, clickTimes: 0 },
// { addNum: 0, bizDate: '2022-07-23', clickNum: 0, clickTimes: 0 },
// { addNum: 0, bizDate: '2022-07-24', clickNum: 0, clickTimes: 0 },
// { addNum: 0, bizDate: '2022-07-25', clickNum: 1, clickTimes: 2 },
// { addNum: 0, bizDate: '2022-07-26', clickNum: 3, clickTimes: 1 },
// { addNum: 0, bizDate: '2022-07-27', clickNum: 1, clickTimes: 2 }
// ];
});
},
statisticsTotal() {
......@@ -258,7 +221,7 @@ export default {
let link = document.createElement('a');
let url = img.getAttribute('src');
link.setAttribute('href', url);
link.setAttribute('download', `${this.link.linkId}_${this.link.name}.png`);
link.setAttribute('download', `${this.link.linkCode}_${this.link.name}.png`);
link.click();
},
goEdit() {
......@@ -305,7 +268,9 @@ export default {
},
mounted() {
this.getDetail();
this.getChartList();
this.statisticsTotal();
this.btnChange(0);
document.getElementById('hb-layout-pager-one').addEventListener('scroll', this.scrollMethod);
},
destroyed() {
......@@ -320,14 +285,6 @@ export default {
}
}
.fixed-tab {
position: absolute;
top: 80px;
z-index: 1;
padding-bottom: 0;
height: 40px;
background: white;
}
.welcome-left-view {
width: 639px;
}
......@@ -339,7 +296,6 @@ export default {
border: 1px solid #dcdfe6;
}
.title-right {
margin-left: 30px;
padding: 12px 0 12px 0;
}
.preview {
......@@ -372,9 +328,6 @@ export default {
width: 100%;
display: flex;
justify-content: space-between;
.info-icon {
margin-right: 8px;
}
}
.justify-end {
justify-content: flex-end;
......
......@@ -21,17 +21,17 @@
<span class="pageTitle">{{ card.pageTitle }}</span>
<img src="@/assets/iphone-head.png" />
<div class="content">
<img :src="card.pageBackgroudImg" v-show="card.pageBackgroudImg" class="bgImg" />
<img :src="card.pageBackgroundImg" v-show="card.pageBackgroundImg" class="bgImg" />
<div class="enterpriseInfo">
<div class="logo">
<div v-if="card.merchantLogo" class="logo">
<img :src="card.merchantLogo" />
</div>
<div class="name">{{ card.merchantName }}</div>
</div>
<div class="QRcode"></div>
<div class="leadingText">{{ card.guideComment }}</div>
<div class="enterpriseNum">
<i class="iconfont-hb3 iconhuawushuju"></i>
<div class="enterpriseNum" v-if="card.merchantPhoneNumber">
<i class="iconfont-hb3 icondianhua"></i>
<p>{{ card.merchantPhoneNumber }}</p>
</div>
</div>
......@@ -52,7 +52,7 @@ export default {
merchantName: '',
merchantPhoneNumber: '',
merchantLogo: '',
pageBackgroudImg: '',
pageBackgroundImg: '',
guideComment: ''
}
};
......@@ -68,8 +68,8 @@ export default {
content: {
handler(val) {
if (val) {
const { pageName, pageCode, pageId, pageTitle, merchantName, merchantPhoneNumber, merchantLogo, pageBackgroudImg, guideComment, createorName, createTime } = val;
this.card = { pageName, pageCode, pageId, pageTitle, merchantName, merchantPhoneNumber, merchantLogo, pageBackgroudImg, guideComment, createorName, createTime };
const { pageName, pageCode, pageId, pageTitle, merchantName, merchantPhoneNumber, merchantLogo, pageBackgroundImg, guideComment, createorName, createTime } = val;
this.card = { pageName, pageCode, pageId, pageTitle, merchantName, merchantPhoneNumber, merchantLogo, pageBackgroundImg, guideComment, createorName, createTime };
}
},
immediate: true
......@@ -80,13 +80,13 @@ export default {
<style type="text/scss" lang="scss" scoped>
.card {
width: 384px;
width: 380px;
height: 687px;
border-radius: 8px;
border: 1px solid #dcdfe6;
background: #e5e7ed;
background: RGBA(240, 243, 253, 1);
.head {
width: 384px;
width: 380px;
height: 87px;
border-radius: 8px 8px 0px 0px;
......@@ -121,7 +121,7 @@ export default {
}
}
.iphone-content {
width: 384px;
width: 380px;
height: 600px;
display: flex;
justify-content: center;
......@@ -132,7 +132,6 @@ export default {
.iphone {
width: 320px;
height: 570px;
background: #f7f8fa;
box-shadow: 0px 4px 8px 0px rgba(220, 223, 230, 0.6);
border-radius: 8px;
position: relative;
......@@ -151,10 +150,10 @@ export default {
}
.content {
width: 320px;
height: 475px;
height: 495px;
background: #ffffff;
border-radius: 8px;
top: 95px;
top: 75px;
left: 0;
box-sizing: border-box;
padding: 20px 16px;
......@@ -177,6 +176,7 @@ export default {
align-items: center;
width: 100%;
z-index: 100;
height: 36px;
margin-bottom: 19px;
.logo {
width: 48px;
......@@ -204,8 +204,7 @@ export default {
z-index: 100;
width: 236px;
height: 236px;
background: #f6f6f6;
background-image: url('../../../../../assets/QRcode.png');
background-image: url('../../../../../assets/QRcode.jpg');
background-size: 236px auto;
}
.leadingText {
......@@ -232,6 +231,7 @@ export default {
line-height: 14px;
color: #63666b;
font-size: 12px;
justify-content: center;
i {
font-size: 17px;
}
......
<template>
<div>
<div class="daily-set-content">
<div class="daily-set-content" v-loading="loading">
<el-form label-width="100px" ref="form" :model="form" :rules="rules" class="form">
<el-form-item label="模板名称" prop="pageName" required>
<el-form-item label="模板名称" prop="pageName">
<el-input show-word-limit placeholder="请输入模板名称" type="text" v-model="form.pageName" maxlength="20" class="w-340"></el-input>
</el-form-item>
<el-form-item label="页面标题" prop="pageTitle">
......@@ -15,12 +15,12 @@
<el-input show-word-limit placeholder="请输入商户电话" type="text" v-model="form.merchantPhoneNumber" maxlength="20" class="w-340"></el-input>
</el-form-item>
<el-form-item label="商户LOGO">
<single-upload uploadType="1" :showTips="false" :imgSrc.sync="form.merchantLogo" :field="''" class="app-set" :uploadLimit="2" :imgType="['image/jpeg', 'image/jpg', 'image/png', 'image/gif']"> </single-upload>
<single-upload uploadType="1" :showDel="true" :showTips="false" :imgSrc.sync="form.merchantLogo" :field="''" class="app-set" uploadLimit="200/KB" :imgType="['image/jpeg', 'image/jpg', 'image/png', 'image/gif']"> </single-upload>
<p style="margin-top: 6px;font-size: 12px;color: #909399;line-height: 17px;">图片建议尺寸 240*240px,格式 jpg/jpep/png/gif,大小 200KB 以内。</p>
</el-form-item>
<el-form-item label="页面背景">
<single-upload uploadType="1" :showTips="false" :imgSrc.sync="form.pageBackgroundImg" :field="''" class="app-set" :uploadLimit="2" :imgType="['image/jpeg', 'image/jpg', 'image/png', 'image/gif']"> </single-upload>
<p style="margin-top: 6px;font-size: 12px;color: #909399;line-height: 17px;">图片建议尺寸 750*1334px,格式 jpg/png/gif,大小 200KB 以内。</p>
<single-upload uploadType="1" :showDel="true" :showTips="false" :imgSrc.sync="form.pageBackgroundImg" :field="''" class="app-set" :imgType="['image/jpeg', 'image/jpg', 'image/png', 'image/gif']"> </single-upload>
<p style="margin-top: 6px;font-size: 12px;color: #909399;line-height: 17px;">图片建议尺寸 750*1334px,格式 jpg/png/gif,大小 2M 以内。</p>
</el-form-item>
<el-form-item label="引导语" prop="guideComment">
<el-input show-word-limit placeholder="请输入引导语" type="textarea" v-model="form.guideComment" maxlength="50" class="w-340" :autosize="{ minRows: 4, maxRows: 6 }"></el-input>
......@@ -33,7 +33,7 @@
</div>
</div>
<div class="footBtn">
<el-button type="primary" @click="save">保存</el-button>
<el-button type="primary" @click="save" :loading="btnLoading">保存</el-button>
</div>
</div>
</template>
......@@ -53,8 +53,12 @@ export default {
const reg1 = /^\s*$/;
const reg2 = /^\+*$/;
const reg3 = /^\-*$/;
if (!value) {
callback();
return;
}
if (reg1.test(value) || reg2.test(value) || reg3.test(value)) {
callback('请输入手机号');
callback('请输入正确的手机号');
}
if (!reg.test(value)) {
callback('仅支持输入数字,空格,-,+');
......@@ -77,8 +81,10 @@ export default {
isEdit: this.$route.meta.type == 'edit',
isAdd: this.$route.meta.type == 'add',
loading: false,
btnLoading: false,
rules: {
merchantPhoneNumber: [{ validator: merchantPhoneNumberVal }]
merchantPhoneNumber: [{ validator: merchantPhoneNumberVal }],
pageName: [{ required: true, message: '请输入模板名称' }]
}
};
},
......@@ -92,44 +98,49 @@ export default {
methods: {
getDetail() {
console.log(this.$route);
guidePageDetail({ pageId: this.$route.params.id }).then(res => {
if (res.data.result) {
const result = res.data.result;
this.form = result;
}
});
this.loading = true;
guidePageDetail({ pageId: this.$route.params.id })
.then(res => {
if (res.data.result) {
const result = res.data.result;
this.form = result;
}
})
.finally(_ => {
this.loading = false;
});
},
getEchoEnterpriseInfo() {
wxEnterpriseList({}).then(res => {
let resData = res.data;
if (!!resData.result && !!resData.result.length) {
const { conactsPhone, enterpriseLogo, enterpriseName } = resData.result.filter(item => item.wxEnterpriseId == this.wxEnterpriseId)[0];
const { customerPhone, enterpriseLogo, enterpriseName } = resData.result.filter(item => item.wxEnterpriseId == this.wxEnterpriseId)[0];
this.form.merchantLogo = enterpriseLogo;
this.form.merchantPhoneNumber = conactsPhone;
this.form.merchantPhoneNumber = customerPhone;
this.form.merchantName = enterpriseName;
}
});
},
guidePageEdit() {
this.loading = true;
this.btnLoading = true;
guidePageEdit(this.form)
.then(_ => {
this.$router.go(-1);
this.$router.push('/ladingPageList');
this.$message.success('保存成功');
})
.finally(_ => {
this.loading = false;
this.btnLoading = false;
});
},
guidePageSave() {
this.loading = true;
this.btnLoading = true;
guidePageSave(this.form)
.then(_ => {
this.$router.go(-1);
this.$router.push('/ladingPageList');
this.$message.success('保存成功');
})
.finally(_ => {
this.loading = false;
this.btnLoading = false;
});
},
save() {
......@@ -148,6 +159,7 @@ export default {
<style type="text/scss" lang="scss" scoped>
.daily-set-content {
padding: 20px;
margin-bottom: 56px;
}
.form {
float: left;
......@@ -170,7 +182,7 @@ export default {
margin-bottom: 20px;
}
.footBtn {
width: 100%;
width: calc(100vw - 190px);
height: 56px;
background: #ffffff;
box-shadow: 1px -2px 8px 0px rgba(220, 223, 230, 0.6);
......
......@@ -11,8 +11,16 @@
<div class="tips m-b-16">
二维码只是样式预览效果,请勿直接使用
</div>
<div class="card-content" v-loading="loading">
<card-view :content="item" v-for="item in list" :key="item.pageId" @relationDetail="relationDetail(item)" @deleteTemp="deleteTemp(item)" @editTemp="editTemp(item)" />
<div v-loading="loading">
<div class="card-content" v-if="list && list.length">
<card-view :content="item" v-for="item in list" :key="item.pageId" @relationDetail="relationDetail(item)" @deleteTemp="deleteTemp(item)" @editTemp="editTemp(item)" />
</div>
<div v-else class="chart--nodata">
<div>
<img class="image-120" src="@/assets/no-data.svg" />
<p class="font-14 color-606266 no-data-text">暂无数据</p>
</div>
</div>
</div>
<relation-dialog :dialogVisible.sync="dialogVisible" :pageId="pageId" @goLinkDetail="goLinkDetail" />
<div class="text-right" v-if="list.length != 0">
......@@ -26,6 +34,7 @@ import relationDialog from './relationDialog';
import { guidePageList, guidePageDel, guidePageRelation } from '@/api/actCode';
import { _debounce } from '@/common/js/public';
export default {
name: 'ladingPageList',
data() {
return {
form: {
......@@ -37,73 +46,8 @@ export default {
loading: false,
total: 0,
pageId: '',
list: [
{
pageName: '模板名称模板名称模板名称模板名称模板',
pageCode: 'MB01123456789012300001',
pageId: '1',
pageTitle: '页面页面页面页面标题',
merchantName: '商户名称商户名称商户名称商户名称商户名称',
merchantPhoneNumber: '0571-1234567',
merchantLogo: 'https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464',
pageBackgroudImg: 'https://pic01-10001430.image.myqcloud.com/b91f73af-43e4-4733-a4d3-0ab0bcb4ce7f',
guideComment: '长按保存图片并识别二长按保存图片并识别二长按保存图片并识别二长按保存图片并识别二长按保存图片并识别二',
createorName: '艾蜜雪管理员',
createTime: 1657257986000
},
{
pageName: '模板名称模板名称模板名称模板名称模板',
pageCode: 'MB01123456789012300001',
pageId: '2',
pageTitle: '页面标题2',
merchantName: '商户名称',
merchantPhoneNumber: '0571-1234567',
merchantLogo: 'https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464',
pageBackgroudImg: '',
guideComment: '长按识别二维码添加您的专属导购',
createorName: '艾蜜雪管理员',
createTime: 1657257986000
},
{
pageName: '模板名称模板名称模板名称模板名称模板',
pageCode: 'MB01123456789012300001',
pageId: '3',
pageTitle: '页面标题3',
merchantName: '商户名称',
merchantPhoneNumber: '0571-1234567',
merchantLogo: 'https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464',
pageBackgroudImg: 'https://pic01-10001430.image.myqcloud.com/b91f73af-43e4-4733-a4d3-0ab0bcb4ce7f',
guideComment: '长按识别二维码添加您的专属导购',
createorName: '艾蜜雪管理员',
createTime: 1657257986000
},
{
pageName: '模板名称模板名称模板名称模板名称模板',
pageCode: 'MB01123456789012300001',
pageId: '4',
pageTitle: '页面标题4',
merchantName: '商户名称',
merchantPhoneNumber: '0571-1234567',
merchantLogo: 'https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464',
pageBackgroudImg: 'https://pic01-10001430.image.myqcloud.com/b91f73af-43e4-4733-a4d3-0ab0bcb4ce7f',
guideComment: '长按识别二维码添加您的专属导购',
createorName: '艾蜜雪管理员',
createTime: 1657257986000
},
{
pageName: '模板名称模板名称模板名称模板名称模板',
pageCode: 'MB01123456789012300001',
pageId: '5',
pageTitle: '页面标题5',
merchantName: '商户名称',
merchantPhoneNumber: '0571-1234567',
merchantLogo: 'https://pic01-10001430.image.myqcloud.com/d4b383df-8eb1-49d6-9c84-8e3e36958464',
pageBackgroudImg: 'https://pic01-10001430.image.myqcloud.com/b91f73af-43e4-4733-a4d3-0ab0bcb4ce7f',
guideComment: '长按识别二维码添加您的专属导购',
createorName: '艾蜜雪管理员',
createTime: 1657257986000
}
]
dialogVisible: false,
list: []
};
},
components: {
......@@ -113,10 +57,14 @@ export default {
mounted() {
this.getList();
},
activated() {
this.getList();
},
methods: {
toInput: _debounce(function(e, value) {
this.getList();
}, 500),
getList() {
const param = { ...this.form };
if (this.form.dateRange && this.form.dateRange.length) {
......@@ -157,7 +105,7 @@ export default {
guidePageRelation({ pageId: item.pageId }).then(res => {
const { totalCount } = res.data.result;
if (totalCount) {
this.$confirm(`当前模板已关联链接(${totalCount}),请确认投放链接已投放结束,取消关联后才可删除该模板`, '无法删除该模板', {
this.$confirm(`当前模板已关联链接(${totalCount}),请确认投放链接已投放结束,解除关联后才可删除该模板`, '无法删除该模板', {
confirmButtonText: '关联详情',
cancelButtonText: '取消',
type: 'warning'
......@@ -185,8 +133,7 @@ export default {
this.$router.push(`/ladingPageEdit/${item.pageId}`);
},
goLinkDetail(referId) {
console.log(referId);
this.$router.push(`/ladingPageEdit/${referId}`);
window.open(`/haoban-3/#/attractFlowLinkInfo/${referId}`);
}
}
};
......@@ -202,4 +149,19 @@ export default {
flex-wrap: wrap;
gap: 20px;
}
.chart--nodata {
height: 359px;
width: 100%;
display: flex;
justify-content: center;
.image-120 {
width: 120px;
height: 120px;
padding-top: 60px;
}
.no-data-text {
text-align: center;
padding-top: 18px;
}
}
</style>
<template>
<div :id="id"></div>
<div>
<div :id="id" class="chart--nodata"></div>
<div v-if="!charData.length" class="chart--nodata">
<div>
<img class="image-120" src="@/assets/no-data.svg" />
<p class="font-14 color-606266 no-data-text">暂无数据</p>
</div>
</div>
</div>
<!-- <div v-if="charData.length" :id="id"></div> -->
<!-- <div v-else class="chart--nodata"></div> -->
</template>
<script>
// import G2 from '@antv/g2';
import * as G2 from '@antv/g2';
export default {
data() {
return {
chart: null
chart: null,
maxNum: 0,
maxTimes: 0
};
},
props: {
......@@ -20,11 +30,7 @@ export default {
return [];
}
},
id: String,
width: {
type: Number,
default: 1192
}
id: String
},
mounted() {
setTimeout(() => {
......@@ -42,96 +48,144 @@ export default {
methods: {
async drawChart() {
this.chart && this.chart.destroy();
if (!this.charData.length) return;
const data = this.handleData(this.charData);
this.chart = new G2.Chart({
container: this.id,
height: 359,
autoFit: true,
forceFit: true,
width: this.width,
padding: [20, 40, 80, 80]
height: 359,
width: 1400,
padding: [70, 60, 40, 70]
});
this.chart.data(this.charData, {
bizDate: {
// type: 'cat', //分类
alias: '日期' //别名
},
addNum: {
alias: '今日添加人数'
this.chart.source(data, {
value: {
type: 'linear',
tickInterval: 50
}
});
this.chart.tooltip({
showMarkers: false,
shared: true
});
this.chart.scale({
date: {
dataKey: 'date',
type: 'cat'
},
clickNum: {
alias: '今日点击人数'
num: {
min: 0,
tickCount: this.maxNum > 2 ? 5 : this.maxNum + 1,
tickMethod: 'wilkinson-extended',
nice: true
},
clickTimes: {
alias: '今日点击人次'
times: {
min: 0,
tickCount: this.maxTimes > 2 ? 5 : this.maxTimes + 1,
tickMethod: 'wilkinson-extended',
nice: true
}
});
//坐标轴配置(法一配置)
this.chart.axis('bizDate', {
line: {
style: {
stroke: '#606266',
lineDash: [3, 3]
this.chart.legend({
position: 'top-left'
});
this.chart.axis('times', {
grid: {
line: {
type: 'line',
style: {
stroke: '#E4E7ED',
lineDash: [3, 3]
}
}
},
tickLine: {
style: {
fill: '#E4E7ED',
lineDash: [3, 3]
label: {
formatter: text => {
let num = Math.floor(text);
return num + '人次';
}
}
});
this.chart.axis('num', {
grid: {
line: {
type: 'line',
style: {
stroke: '#E4E7ED',
lineDash: [3, 3]
}
}
},
label: {
style: {
fill: '#606266'
formatter: text => {
let num = Math.floor(text);
return num + '人';
}
}
});
// this.chart.axis('新增人数', {
// grid: {
// line: {
// type: 'line',
// style: {
// stroke: '#E4E7ED',
// lineDash: [3, 3]
// }
// }
// },
// label: {
// style: {
// fill: '#606266'
// },
// formatter: val => {
// // 格式化参数值
// return val;
// }
// }
// });
// 图例
this.chart.legend({
custom: true,
position: 'top-left',
items: [
{ name: '今日添加人数', value: 'addNum', marker: { symbol: 'line', style: { stroke: '#4B74E8', lineWidth: 12, lineHeight: 8 } } },
{ name: '今日点击人次', value: 'clickTimes', marker: { symbol: 'line', style: { stroke: '#D6B38C', lineWidth: 12, lineHeight: 8 } } },
{ name: '今日点击人数', value: 'clickNum', marker: { symbol: 'line', style: { stroke: '#14C9C9', lineWidth: 12, lineHeight: 8 } } }
]
this.chart.tooltip({
showMarkers: false,
shared: true,
showCrosshairs: true
});
this.chart
.line()
.position('bizDate*addNum')
.color('#4B74E8');
this.chart
.line()
.position('bizDate*clickTimes')
.color('#D6B38C');
.position('date*num')
.color('type', ['rgba(75,116,232,1)', 'rgba(20, 201, 201, 1)', 'rgba(214, 179, 140, 1)']);
this.chart
.line()
.position('bizDate*clickNum')
.color('#14C9C9');
this.chart.removeInteraction('legend-filter'); // 自定义图例,移除默认的分类图例筛选交互
.position('date*times')
.color('type', ['rgba(214, 179, 140, 1)']);
// this.chart.removeInteraction('legend-filter'); // 自定义图例,移除默认的分类图例筛选交互
//图表绘制的最后一步,用于将图表渲染至画布
this.chart.render();
},
handleData(data) {
let arr = [];
let maxNum = 0;
let maxTimes = 0;
data.forEach(item => {
item.clickNum > maxNum ? (maxNum = item.clickNum) : '';
item.clickTimes > maxTimes ? (maxTimes = item.clickTimes) : '';
arr.push({
date: item.bizDate,
type: '新增人数',
num: item.addNum
});
arr.push({
date: item.bizDate,
type: '点击人数',
num: item.clickNum
});
arr.push({
date: item.bizDate,
type: '点击人次',
times: item.clickTimes
});
});
this.maxNum = maxNum;
this.maxTimes = maxTimes;
console.log(maxNum, maxTimes);
return arr;
}
}
};
</script>
<style lang="scss" scoped>
.chart--nodata {
height: 359px;
width: 100%;
display: flex;
justify-content: center;
.image-120 {
width: 120px;
height: 120px;
padding-top: 60px;
}
.no-data-text {
text-align: center;
padding-top: 18px;
}
}
</style>
......@@ -25,9 +25,9 @@ export default {
let end2 = new Date(pickerMinDate);
if (pickerMinDate) {
start = start.setFullYear(start.getFullYear() - 2);
start2 = start2.setDate(start2.getDate() - 60);
start2 = start2.setDate(start2.getDate() - 59);
start = start > start2 ? start : start2;
end2 = end2.setDate(end2.getDate() + 60);
end2 = end2.setDate(end2.getDate() + 59) + 24 * 60 * 60 * 1000 - 1000; // end2算到晚上23:59:59
end = end.getTime() > end2 ? end2 : end.getTime();
} else {
start = start.setFullYear(start.getFullYear() - 2);
......@@ -79,22 +79,26 @@ export default {
} else if (index == 2) {
// 近三个月
setDate = endDate => {
endDate.setMonth(endDate.getMonth() - 3);
endDate.setDate(endDate.getDate() + 1);
endDate.setMonth(endDate.getMonth() - 2);
endDate.setDate(1);
return new Date(endDate);
};
} else if (index == 3) {
// 近半年
setDate = endDate => {
endDate.setMonth(endDate.getMonth() - 6);
endDate.setDate(endDate.getDate() + 1);
endDate.setMonth(endDate.getMonth() - 5);
endDate.setDate(1); // 以1号为开端
return new Date(endDate);
};
} else {
// 近一年
setDate = endDate => {
console.log(endDate);
endDate.setFullYear(endDate.getFullYear() - 1);
endDate.setDate(endDate.getDate() + 1);
endDate.setMonth(endDate.getMonth() + 1);
endDate.setDate(1);
return new Date(endDate);
};
}
......
<template>
<div>
<el-button class="select-clerk-trigger" v-if="!Array.isArray(data) || data.length == 0" @click="showSelectClerk = true">
<i class="iconfont-hb3 icontianjia trigger-icon"></i>
<el-button class="select-clerk-trigger" v-if="!Array.isArray(data) || data.length == 0" :disabled="disabled" @click="showSelectClerk = true">
<i class="iconfont-hb3 iconPlusOutlined trigger-icon"></i>
添加成员
</el-button>
<template v-if="Array.isArray(data) && data.length > 0">
<div v-if="multiple" class="multiple-preview">
<dm-sub-title style="margin-left: 4px; width: calc(100% - 4px)" title-align="space-between">
<div>{{ `已选成员(${data.length})` }}</div>
<div class="edit-btns">
<div v-if="!disabled" class="edit-btns">
<el-button class="del-btn" type="text" @click="onDelAll">清除</el-button>
<el-button class="update-clerk-trigger" type="text" @click="showSelectClerk = true">编辑</el-button>
</div>
</dm-sub-title>
<div class="clerk-list">
<selected-clerk-item v-for="el in data" :key="el.clerkId" :clerk-data="el" @del="onDel" class="clerk-item"></selected-clerk-item>
<selected-clerk-item v-for="el in data" :key="el.clerkId" :clerk-data="el" :show-del="!disabled" @del="onDel" class="clerk-item"></selected-clerk-item>
</div>
</div>
<div v-else class="single-preview">
<selected-clerk-item :clerk-data="data[0]" :show-del="false"></selected-clerk-item>
<el-button type="text" class="update-clerk-trigger" @click="showSelectClerk = true">修改成员</el-button>
<el-button v-if="!disabled" type="text" class="update-clerk-trigger" @click="showSelectClerk = true">修改成员</el-button>
</div>
</template>
<select-clerk :visible.sync="showSelectClerk" :multiple="multiple" :max="max" :data="data" @save="onChange"></select-clerk>
<select-clerk :visible.sync="showSelectClerk" :is-simple="isSimple" :multiple="multiple" :max="max" :data="data" @save="onChange"></select-clerk>
</div>
</template>
......@@ -33,6 +33,11 @@ export default {
name: 'Index',
components: { SelectClerk, SelectedClerkItem },
props: {
// 是否单人活码
isSimple: {
type: Boolean,
default: false
},
// 是否多选
multiple: {
type: Boolean,
......@@ -47,6 +52,10 @@ export default {
data: {
type: Array,
default: () => []
},
disabled: {
type: Boolean,
default: false
}
},
data() {
......
<template>
<el-dialog :visible.sync="show" title="选择成员" width="1000px" @close="onCancel">
<div class="select-clerk" v-loading="loading">
<!-- 选择导购 -->
<div class="clerk-list">
<!-- 筛选条件 -->
<div class="search-bar">
<!-- <el-select clearable style="width: 182px"></el-select> -->
<gic-select-group class="select-group" :brandId="enterpriseId" :selectData="params.storeGroup" @checkGroupIds="onCheckGroupIds"> </gic-select-group>
<el-input v-model="params.storeSearchParams" @change="onSearch" placeholder="请输入门店名称" prefix-icon="el-icon-search" clearable style="margin-left: 10px; width: 180px"></el-input>
<el-input v-model="params.clerkSearchParams" @change="onSearch" placeholder="请输入导购名称/手机号/code" prefix-icon="el-icon-search" clearable style="margin-left: 10px; width: 250px"></el-input>
</div>
<!-- 导购列表的表头 -->
<el-table :class="['clerk-list-header', { 'hide-empty': storeClerkList.length > 0 }]">
<el-table-column min-width="67px">
<template #header>
<el-checkbox v-if="multiple" v-model="selectAll.selected" @change="onSelectAll" :indeterminate="selectAll.indeterminate" :disabled="selectAll.disabled"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="导购" min-width="230px"></el-table-column>
<el-table-column label="手机号码" min-width="155px"></el-table-column>
<el-table-column label="备注" min-width="161px"></el-table-column>
</el-table>
<!-- 导购列表 -->
<div v-if="storeClerkList.length > 0" ref="clerkList" class="clerk-list-body">
<div v-for="(el, index) in storeClerkList" :key="el.storeId" class="clerk-list-cell">
<!-- 门店信息 -->
<el-table :data="[{}]" class="clerk-store-info" :show-header="false">
<el-table-column min-width="67px">
<el-checkbox v-if="multiple" v-model="el.selected" @change="onSelectStore(el)" :indeterminate="el.indeterminate" :disabled="el.disabled"></el-checkbox>
</el-table-column>
<el-table-column min-width="546px">
<div class="clerk-store-name">{{ el.storeName }}</div>
<div class="clerk-store-code">code:{{ el.storeCode }}</div>
</el-table-column>
</el-table>
<!-- 门店下的导购 -->
<el-table :data="el.clerkList" class="clerk-list-table" :show-header="false">
<el-table-column min-width="67px">
<template slot-scope="{ row }">
<el-checkbox v-if="multiple" v-model="row.selected" @change="onSelectClerk(row, index)" :disabled="row.disabled"></el-checkbox>
<el-radio v-else v-model="row.selected" @change="onSelectClerk(row, index)" :disabled="row.disabled"></el-radio>
</template>
</el-table-column>
<el-table-column label="导购" min-width="230px">
<template slot-scope="{ row }">
<div class="clerk-name">{{ row.clerkName }}</div>
<div class="clerk-code">{{ row.clerkCode }}</div>
</template>
</el-table-column>
<el-table-column label="手机号码" prop="phoneNumber" min-width="155px"></el-table-column>
<el-table-column label="备注" min-width="161px">
<div slot-scope="{ row }">{{ formatRemark(row.hmStatus) }}</div>
</el-table-column>
</el-table>
<div>
<el-dialog :visible="visible" v-if="visible" title="选择成员" width="1030px" append-to-body @close="onCancel">
<div class="select-clerk" v-loading="loading">
<!-- 选择导购 -->
<div class="clerk-list">
<!-- 筛选条件 -->
<div class="search-bar">
<!-- <el-select clearable style="width: 182px"></el-select> -->
<gic-select-group class="select-group" :brandId="enterpriseId" :selectData="params.storeGroup" @checkGroupIds="onCheckGroupIds"> </gic-select-group>
<el-input v-model="params.storeSearchParams" @change="onSearch" placeholder="请输入门店名称/code" prefix-icon="el-icon-search" clearable style="margin-left: 10px; width: 210px"></el-input>
<el-input v-model="params.clerkSearchParams" @change="onSearch" placeholder="请输入导购名称/手机号/code" prefix-icon="el-icon-search" clearable style="margin-left: 10px; width: 250px"></el-input>
</div>
</div>
<el-pagination @current-change="onCurrentChange" :total="params.total" :page-size="params.pageSize" :current-page="params.pageNum" layout="prev, pager, next" style="margin-bottom: 0;text-align: right"></el-pagination>
</div>
<!-- 选中的导购 -->
<div class="selected-clerk">
<div class="selected-clerk-title">
<span>{{ `已选导购(${selected.length})` }}</span>
<el-button v-if="multiple" type="text" @click="onDelAll">全部清除</el-button>
</div>
<!-- 选中的导购列表 -->
<div class="selected-clerk-list">
<div v-for="(el, index) in selected" :key="el.clerkId" class="clerk-item">
<div class="clerk-info">
<div class="clerk-name">{{ el.clerkName }}</div>
<div class="clerk-code">{{ el.clerkCode }}</div>
<!-- 导购列表的表头 -->
<el-table :class="['clerk-list-header', { 'hide-empty': storeClerkList.length > 0 }]">
<el-table-column min-width="67px">
<template #header>
<el-checkbox v-if="multiple" v-model="selectAll.selected" @change="onSelectAll" :indeterminate="selectAll.indeterminate" :disabled="selectAll.disabled"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="导购" min-width="230px"></el-table-column>
<el-table-column label="手机号码" min-width="155px"></el-table-column>
<el-table-column label="备注" min-width="161px"></el-table-column>
</el-table>
<!-- 导购列表 -->
<div v-if="storeClerkList.length > 0" ref="clerkList" class="clerk-list-body">
<div v-for="(el, index) in storeClerkList" :key="el.storeId" class="clerk-list-cell">
<!-- 门店信息 -->
<el-table :data="[{}]" class="clerk-store-info" :show-header="false">
<el-table-column min-width="67px">
<el-checkbox v-if="multiple" v-model="el.selected" @change="onSelectStore(el)" :indeterminate="el.indeterminate" :disabled="el.disabled"></el-checkbox>
</el-table-column>
<el-table-column min-width="546px">
<div class="clerk-store-name">{{ el.storeName }}</div>
<div class="clerk-store-code">code:{{ el.storeCode }}</div>
</el-table-column>
</el-table>
<!-- 门店下的导购 -->
<el-table :data="el.clerkList" class="clerk-list-table" :show-header="false">
<el-table-column min-width="67px">
<template slot-scope="{ row }">
<el-checkbox v-if="multiple" v-model="row.selected" @change="onSelectClerk(row, index)" :disabled="row.disabled"></el-checkbox>
<!-- 为了实现单选框选中状态时再次点击能切换到未选中状态,所以使用一个复选框盖在单选框上 -->
<div v-else class="radio-wrapper">
<el-checkbox class="radio-handler" v-if="!row.disabled" v-model="row.selected" @change="onSelectClerk(row, index)"></el-checkbox>
<el-radio class="radio-content" :value="row.selected" :label="true" :disabled="row.disabled"></el-radio>
</div>
</template>
</el-table-column>
<el-table-column label="导购" min-width="230px">
<template slot-scope="{ row }">
<div class="clerk-name">{{ row.clerkName }}</div>
<div class="clerk-code">code:{{ row.clerkCode }}</div>
</template>
</el-table-column>
<el-table-column label="手机号码" prop="phoneNumber" min-width="155px"></el-table-column>
<el-table-column label="备注" min-width="161px">
<div slot-scope="{ row }">{{ formatRemark(row.hmStatus) }}</div>
</el-table-column>
</el-table>
</div>
<div class="del-btn" @click="onDel(index)">
<i class="iconfont-hb3 iconclose1 del-btn-icon"></i>
</div>
<el-pagination v-if="params.total > 0" @current-change="onCurrentChange" :total="params.total" :page-size="params.pageSize" :current-page="params.pageNum" layout="prev, pager, next" style="margin-bottom: 0;text-align: right"></el-pagination>
</div>
<!-- 选中的导购 -->
<div class="selected-clerk">
<div class="selected-clerk-title">
<span>{{ `已选导购(${selected.length})` }}</span>
<el-button v-if="multiple" type="text" @click="onDelAll">全部清除</el-button>
</div>
<!-- 选中的导购列表 -->
<div class="selected-clerk-list">
<div v-for="(el, index) in selected" :key="el.clerkId" class="clerk-item">
<div class="clerk-info">
<div class="clerk-name">{{ el.clerkName }}</div>
<div class="clerk-code">code:{{ el.clerkCode }}</div>
</div>
<div class="del-btn" @click="onDel(index)">
<i class="iconfont-hb3 iconclose1 del-btn-icon"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<template slot="footer">
<el-button @click="show = false">取消</el-button>
<el-button type="primary" @click="onSave">确定</el-button>
</template>
</el-dialog>
<template slot="footer">
<el-button @click="onCancel">取消</el-button>
<el-button type="primary" @click="onSave">确定</el-button>
</template>
</el-dialog>
</div>
</template>
<script>
......@@ -91,15 +97,24 @@ export default {
name: 'SelectClerk',
components: { GicSelectGroup },
props: {
visible: Boolean,
visible: {
type: Boolean,
default: false
},
data: {
type: Array,
default: () => []
},
// 是否批量选择导购
multiple: {
type: Boolean,
default: false
},
// 是否单人活码
isSimple: {
type: Boolean,
default: false
},
max: {
type: Number,
default: 100
......@@ -108,7 +123,6 @@ export default {
watch: {
visible(flag) {
if (flag) {
this.show = true;
this.selected = JSON.parse(JSON.stringify(this.data));
this.getStoreClerkList();
}
......@@ -116,7 +130,6 @@ export default {
},
data() {
return {
show: false,
params: {
storeGroup: [],
storeGroupId: '', // 分组ID
......@@ -169,10 +182,14 @@ export default {
el.clerkList = Array.isArray(el.clerkList) ? el.clerkList : [];
// 设置导购的禁用状态和选中状态
el.clerkList = el.clerkList.map(item => {
item.disabled = this.multiple ? item.hmStatus == 1 || item.hmStatus == 2 : item.hmStatus == 1 || item.hmStatus == 2 || item.hmStatus == 3;
item.selected = this.data.some(clerk => clerk.clerkId == item.clerkId);
item.disabled = this.isSimple ? item.hmStatus == 1 || item.hmStatus == 2 || item.hmStatus == 3 : item.hmStatus == 1 || item.hmStatus == 2;
item.selected = this.selected.some(clerk => clerk.clerkId == item.clerkId);
return item;
});
this.selected = this.selected.map(item => {
const clerk = el.clerkList.find(cell => cell.clerkId == item.clerkId);
return clerk ? clerk : item;
});
// 设置门店禁用状态、选中状态和半选状态
el.disabled = el.clerkList.length == 0 || el.clerkList.every(el => el.disabled);
el.selected = el.clerkList.length > 0 && el.clerkList.every(el => !el.disabled && el.selected);
......@@ -282,9 +299,14 @@ export default {
if (!this.multiple) {
if (this.selected.length > 0) {
this.selected[0].selected = false;
this.selected = [];
if (clerk.clerkId == this.selected[0].clerkId) {
this.selected = [];
} else {
this.selected.splice(0, 1, clerk);
}
} else {
this.selected.push(clerk);
}
this.selected.push(clerk);
return;
}
......@@ -337,7 +359,7 @@ export default {
},
onSave() {
this.$emit('save', JSON.parse(JSON.stringify(this.selected)));
this.show = false;
this.$emit('update:visible', false);
}
}
};
......@@ -356,7 +378,7 @@ export default {
}
.clerk-list {
padding: 10px 16px;
width: 666px;
width: 694px;
box-sizing: border-box;
.hide-empty {
>>> .el-table__empty-block {
......@@ -435,6 +457,14 @@ export default {
border-bottom: none;
}
}
>>> .el-table__empty-block {
min-height: 120px !important;
height: 120px !important;
.el-table__empty-text::before {
width: 60px;
height: 60px;
}
}
.clerk-name {
font-size: 14px;
font-weight: 400;
......@@ -447,6 +477,21 @@ export default {
color: #606266;
line-height: 17px;
}
.radio-wrapper {
position: relative;
.radio-handler {
position: absolute;
top: 0;
left: 0;
z-index: 1;
opacity: 0;
}
.radio-content {
>>> .el-radio__label {
display: none;
}
}
}
}
}
}
......
......@@ -2,7 +2,7 @@
<div class="clerk-info-box">
<div class="clerk-info">
{{ clerkData.clerkName }}
<div class="clerk-code">{{ clerkData.clerkCode }}</div>
<div class="clerk-code">code:{{ clerkData.clerkCode }}</div>
</div>
<i v-if="showDel" @click="$emit('del', clerkData.clerkId)" class="iconfont-hb3 iconclose1 del-clerk"></i>
</div>
......
<template>
<div class="right-wrap">
<div class="right-box" v-loading="loading">
<div>
<el-select placeholder="选择业务模块" v-model="search.businessType" style="width: 160px" clearable @change="onSearch">
<el-option v-for="el in moduleList" :key="el.key" :label="el.value" :value="el.key"></el-option>
</el-select>
<el-select placeholder="选择操作事项" v-model="search.optType" style="width: 160px;margin-left: 10px" clearable @change="onSearch">
<el-option v-for="el in businessList" :key="el.key" :label="el.value" :value="el.key"></el-option>
</el-select>
<el-select placeholder="操作人姓名/手机号" v-model="search.optUser" @clear="userList = []" style="width: 170px;margin-left: 10px" popper-class="operate-clerk-list" clearable filterable :filter-method="searchClerk" v-select-loadmore="loadMoreClerk" @change="onSearch">
<el-option v-for="el in userList" :key="el.clerkId" :value="el.clerkId" :label="el.clerkName">
<p>{{ el.clerkName }}</p>
<p>{{ el.phoneNumber }}</p>
</el-option>
</el-select>
<el-input placeholder="操作内容" v-model="search.search" style="width: 260px;margin-left: 10px" clearable prefix-icon="el-icon-search" @change="onSearch"></el-input>
<el-date-picker v-model="search.dateRange" @change="onSearch" :picker-options="pickerOptions" clearable style="width: 256px;margin-left: 10px" type="daterange" value-format="yyyy-MM-dd" range-separator="~" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker>
</div>
<el-table :data="tableData" style="margin: 20px 0">
<el-table-column label="业务模块" prop="businessTypeName" :formatter="(row, col, val) => val || '--'"></el-table-column>
<el-table-column label="操作事项" prop="optTypeName" :formatter="(row, col, val) => val || '--'"></el-table-column>
<el-table-column label="操作页面" prop="optPage" :formatter="(row, col, val) => val || '--'"></el-table-column>
<el-table-column label="操作账号" show-overflow-tooltip>
<template slot-scope="{ row }">
<template v-if="row.userName || row.phoneNumber">
<p class="text-overflow">
{{ row.userName ? row.userName : '' }}
<span v-if="row.ywName" style="color: #909399">{{ row.ywName }}</span>
</p>
<p>{{ row.phoneNumber ? row.phoneNumber : '' }}</p>
</template>
<template v-else>--</template>
</template>
</el-table-column>
<el-table-column label="操作内容" prop="content" :formatter="(row, col, val) => val || '--'" show-overflow-tooltip></el-table-column>
<el-table-column label="操作时间" prop="createTime">
<template slot-scope="{ row }" v-if="row.createTime">
{{ filters.timeStampToYmd(Number(row.createTime)) }}<br />
{{ filters.timeStampToHms(Number(row.createTime)) }}
</template>
<template v-else>--</template>
</el-table-column>
</el-table>
<el-pagination v-if="pager.total > 0" background style="text-align: right" layout="total, sizes, prev, pager, next" @size-change="handleSizeChange" @current-change="handleCurrentChange" :total="pager.total" :current-page="pager.currentPage" :page-size="pager.pageSize" :page-sizes="[20, 40, 60, 80]"></el-pagination>
</div>
</div>
</template>
<script>
import { logList, businessType, optTypes, listUserBySearchName } from '@/api/actCode';
import filters from '@/filters/index';
export default {
name: 'operateLog',
data() {
return {
filters,
requestProject: 'gic-web',
loading: false,
search: {
businessType: '',
optType: '',
optUser: '',
search: '',
dateRange: []
},
clerkListPager: {
searchName: '',
pageNum: 1,
pageSize: 20,
totalPage: 1
},
moduleList: [],
businessList: [],
userList: [],
tableData: [],
pager: {
currentPage: 1,
pageSize: 20,
total: 0
},
enterpriseId: JSON.parse(sessionStorage.getItem('userInfos')).enterpriseId,
pickerOptions: {
disabledDate(date) {
const now = new Date();
let start = new Date();
start = new Date(start.setMonth(now.getMonth() - 3));
return date.getTime() < start.getTime() || date.getTime() > now.getTime();
}
}
};
},
mounted() {
this.initData();
this.getTableData();
},
methods: {
initData() {
const params = {};
params.requestProject = this.requestProject;
businessType(params).then(res => {
const { code, result } = res.data || {};
if (code == 0) {
this.moduleList = (result || []).filter(el => el.key != 1001);
}
});
optTypes({ params }).then(res => {
const { code, result } = res.data || {};
if (code == 0) {
this.businessList = (result || []).filter(el => el.key != 1001);
}
});
this.getClerkList();
},
loadMoreClerk() {
if (this.clerkListPager.pageNum >= this.clerkListPager.totalPage) return;
this.clerkListPager.pageNum += 1;
this.getClerkList();
},
searchClerk(searchName) {
this.clerkListPager.searchName = searchName;
this.clerkListPager.pageNum = 1;
this.clerkListPager.totalPage = 1;
document.querySelector('.operate-clerk-list .el-scrollbar__wrap').scrollTop = 0;
this.getClerkList();
},
getClerkList() {
const { pageNum, pageSize, searchName } = this.clerkListPager;
const params = { searchName, pageNum, pageSize };
params.requestProject = this.requestProject;
listUserBySearchName(params).then(res => {
const { code, result } = res.data || {};
if (pageNum == 1) {
this.userList = [];
}
if (code == 0) {
this.userList = this.userList.concat(result.result || []);
this.clerkListPager.totalPage = result.totalPage;
}
});
},
getTableData() {
this.loading = true;
const { pageSize, currentPage } = this.pager;
const { businessType, optType, optUser, search, dateRange } = this.search;
let para = {
businessType,
optType,
optUser,
search,
startDate: Array.isArray(dateRange) ? dateRange[0] : '',
endDate: Array.isArray(dateRange) ? dateRange[1] : '',
pageSize,
pageNum: currentPage,
enterpriseId: this.enterpriseId
};
para.requestProject = this.requestProject;
logList(para).then(res => {
let data = res.data;
if (data.code == 0) {
this.tableData = data.result.result;
this.pager.total = data.result.totalCount;
}
this.loading = false;
});
},
onSearch() {
this.handleCurrentChange(1);
},
handleCurrentChange(val) {
this.pager.currentPage = val;
this.getTableData();
},
handleSizeChange(val) {
this.pager.pageSize = val;
this.handleCurrentChange(1);
}
}
};
</script>
<style scoped lang="less">
.right-wrap {
padding: 20px;
}
.text-overflow {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/deep/ .el-table::before {
display: none;
}
.operate-clerk-list .el-select-dropdown__item {
padding: 8px 12px;
height: 52px;
line-height: normal;
p:first-child {
line-height: 20px;
}
p:last-child {
line-height: 17px;
}
&:hover p {
color: #2f54eb;
}
}
</style>
......@@ -8,7 +8,7 @@
<el-tag size="small" effect="dark" :type="codeStatusLis[statusIndex].style" style="margin-left: 8px;">{{ codeStatusLis[statusIndex].value }}</el-tag>
<!-- 正常success/正常到上限warning/待生效info/已作废danger -->
</div>
<p class="font-14 m-t-10 ">ID:{{ codeInfo.hmId }}</p>
<p class="font-14 m-t-10 ">ID:{{ codeInfo.hmCode }}</p>
<div class="flex font-14" style="padding-top:20px;">
<div class="flex flex-1">
<div class="font-14 line-22">
......@@ -27,17 +27,20 @@
</div>
<div class="flex flex-1">
<div class="font-14 line-22">活码标签:</div>
<el-tag size="small" type="info">{{ codeInfo.memberLabelName || '--' }}</el-tag>
<el-tooltip :disabled="codeInfo.memberLabelStatus != 0" content="已删除" placement="top">
<el-tag size="small" :type="codeInfo.memberLabelStatus == 0 ? 'warning' : 'info'">{{ codeInfo.memberLabelName || '--' }}</el-tag>
</el-tooltip>
<!-- <el-tag size="small" type="info">{{ codeInfo.memberLabelName || '--' }}</el-tag> -->
</div>
</div>
<div v-if="codeInfo.statusFlag != 2" class="flex" style="padding-top:20px;">
<el-button v-if="codeInfo.hmType == 2 && codeInfo.statusFlag == 1" icon="el-icon-download" type="primary" style="width:120px;margin-right: 12px;" @click="downloadQR">下载二维码</el-button>
<div v-if="codeInfo.statusFlag != 2 && codeInfo.statusFlag" class="flex" style="padding-top:20px;">
<el-button v-if="codeInfo.hmType == 2 && codeInfo.statusFlag == 1" type="primary" style="width:120px;margin-right: 12px;" @click="downloadQR"><i class="iconfont-hb3 iconxiazai m-r-6"></i>下载二维码</el-button>
<el-button type="primary" plain style="width:98px;" @click="modifyCode">编辑</el-button>
<el-button type="danger" plain style="width:98px;margin-left: 20px; border-color: #F5222D;" @click="discardCode">作废</el-button>
<el-button class="button-discard specter" type="danger" plain :style="codeInfo.hmType == 2 && useMemberList.length > 0 ? '' : 'border-color: #F5222D;'" @click="discardCode">作废</el-button>
</div>
</div>
</div>
<div class="fixed-tab" v-if="scrollTop > 300">
<div class="fixed-tab" v-if="scrollTop >= fixedHeight">
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="详情信息" name="first"> <div></div> </el-tab-pane>
<el-tab-pane label="数据统计" name="second">
......@@ -45,12 +48,12 @@
</el-tab-pane>
</el-tabs>
</div>
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="详情信息" name="first">
<act-code-detail-info :enterprise-id="codeInfo.enterpriseId" :welcome-id="codeInfo.welcomeId" :hm-id="$route.query.hmId"></act-code-detail-info>
<el-tabs v-model="activeName" type="card" ref="page">
<el-tab-pane label="详情信息" name="first" v-if="$getButtonLimit($buttonCode.infoActCode)" :limit-code="$buttonCode.infoActCode">
<act-code-detail-info :enterprise-id="codeInfo.enterpriseId" :welcome-id="codeInfo.welcomeId" :hm-id="$route.query.hmId" @useMemberList="useMemberData"></act-code-detail-info>
</el-tab-pane>
<el-tab-pane label="数据统计" name="second">
<act-code-detail-statistics :hm-id="$route.query.hmId"></act-code-detail-statistics>
<el-tab-pane label="数据统计" name="second" v-if="$getButtonLimit($buttonCode.dataActCode)" :limit-code="$buttonCode.dataActCode">
<act-code-detail-statistics :chart-width="chartWidth" :hm-id="$route.query.hmId"></act-code-detail-statistics>
</el-tab-pane>
</el-tabs>
</div>
......@@ -72,6 +75,8 @@ export default {
},
data() {
return {
chartWidth: 0,
fixedHeight: 217,
codeInfo: {},
loading: false,
activeName: 'first',
......@@ -84,20 +89,35 @@ export default {
],
statusIndex: 1,
scrollTop: 0,
scrollStyle: 'position:fixed;top:80px;z-index:1;padding-bottom:0;height:40px;background:yellow;'
useMemberList: []
};
},
methods: {
downloadQR() {
window.open(this.codeInfo.wxQrcode);
const downloadFile = (fileName, content) => {
const url = content;
const x = new XMLHttpRequest();
x.open('GET', url, true);
x.responseType = 'blob';
x.onload = function(e) {
const blob = new Blob([x.response]);
let url = window.URL.createObjectURL(blob);
let a = document.createElement('a');
a.href = url;
a.download = fileName + '.png';
a.click();
};
x.send();
};
downloadFile(this.codeInfo.hmCode + '_' + this.codeInfo.name, this.codeInfo.wxQrcode);
},
modifyCode() {
this.$router.push(`/actCodeEdit?hmId=${this.$route.query.hmId}`);
},
discardCode() {
const that = this;
this.$confirm('确认要作废该活码?此操作将永久废弃该活码,请确保不影响其他投放使用!', '作废提示', {
confirmButtonText: '删除',
this.$confirm('此操作将永久废弃该活码,请确保不影响其他投放使用!', '确认要作废该活码?', {
confirmButtonText: '作废',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
......@@ -118,31 +138,12 @@ export default {
that.loading = true;
getRequest('/haoban-manage3-web/hm/qrcode/detail', { hmId: that.$route.query.hmId })
.then(res => {
// let res = {
// data: {
// errorCode: 1,
// result: {
// name: '测试活码好的可以',
// hmId: '727363646474849483332',
// statusFlag: 1,
// overFlag: 1,
// hmType: 2,
// creatorName: '少见多怪',
// createTime: 182736347383,
// passFlag: 0,
// welcomeId: 'b680a2cf18b742cc9f4560f6195c9ec6',
// enterpriseId: '5bd929fd3b2c49deaa1184bcb0d669b3',
// wxQrcode: '',
// memberLabelName: '稍加稳得',
// hmGroupName: '测试分组'
// }
// }
// };
let resData = res.data;
that.loading = false;
if (resData.code == 0) {
that.statusIndex = resData.result.statusFlag == 1 && resData.result.overFlag == 1 ? 4 : resData.result.statusFlag;
that.codeInfo = resData.result;
that.fixedHeight = that.codeInfo.statusFlag != 2 ? 260 : 217;
return;
}
errMsg.errorMsg(resData);
......@@ -157,11 +158,15 @@ export default {
scrollMethod: _throttle(function() {
// 节流会不自然 左右不滑动
this.scrollTop = document.getElementById('hb-layout-pager-one').scrollTop;
}, 100)
}, 100),
useMemberData(data) {
this.useMemberList = data;
}
},
mounted() {
let that = this;
this.activeName = this.$route.query.activeName || 'first';
this.chartWidth = this.$refs.page.$el.clientWidth;
that.getActCodeInfo();
document.getElementById('hb-layout-pager-one').addEventListener('scroll', that.scrollMethod);
},
......@@ -192,14 +197,9 @@ export default {
text-overflow: ellipsis;
white-space: nowrap;
}
.fixed-tab {
position: absolute;
top: 80px;
z-index: 1;
padding-bottom: 0;
height: 40px;
background: white;
width: 100%;
// left: 50px;
.button-discard {
width: 98px;
margin-left: 20px;
}
</style>
......@@ -7,8 +7,7 @@
<span class="font-w-500 color-303133">概览</span>
</div>
<div class="flex">
<i class="iconfont-hb3 iconzhibiaoshuoming color-1890ff"></i>
<div class="color-1890ff font-14 p-l-6" @click="explain('http://baidu.com')">指标说明</div>
<el-button type="text" v-jumpLink:codeGl><i class="iconfont-hb3 iconzhibiaoshuoming m-r-6"></i>指标说明</el-button>
</div>
</div>
<ul class="flex">
......@@ -18,12 +17,12 @@
<i class="iconfont-hb3 iconxinzengyonghu color-1890ff font-28"></i>
</div>
<div class="m-l-16">
<div class="font-14 color-606266 line-20">新增总人数</div>
<div class="font-14 color-606266 line-20">添加好友人数</div>
<span class="font-30 font-din" style="margin-top:1;">{{ overViewData.addNumT || 0 }}</span>
</div>
</div>
</li>
<li class="data-total-cell ">
<li class="data-total-cell">
<div class="flex p-20">
<div class="icon-background" style="background: #d9f3fd;">
<i class="iconfont-hb3 iconxinzengyonghu color-35C4FC font-28"></i>
......@@ -40,10 +39,10 @@
<ul class="datebox" v-for="(lis, index) in dateLis" :key="lis.key">
<li :class="dateKey == index ? 'activeClass' : 'noActive'" class="dateLisBox" @click="btnChange(index)">{{ lis.value }}</li>
</ul>
<el-date-picker class="w256" v-model="dateDefault" type="daterange" range-separator="~" start-placeholder="创建开始日期" end-placeholder="创建结束日期" :default-time="['00:00:00', '23:59:59']" :picker-options="pickerOptions()" @change="onDateChange" value-format="yyyy-MM-dd"> </el-date-picker>
<el-date-picker class="w256" v-model="dateDefault" type="daterange" range-separator="~" start-placeholder="创建开始日期" end-placeholder="创建结束日期" :default-time="['00:00:00', '23:59:59']" :picker-options="pickerOptions()" @change="onDateChange" value-format="yyyy-MM-dd" :format="[2, 3, 4].includes(dateKey) ? 'yyyy-MM' : 'yyyy-MM-dd'" :clearable="false"> </el-date-picker>
</div>
</div>
<new-add-chart :charData="overViewData.dateList" id="new-add-chart"></new-add-chart>
<new-add-chart :chart-width="chartWidth" :charData="overViewData.dateList" id="new-add-chart"></new-add-chart>
</div>
<div>
<div class="flex justify-between title">
......@@ -52,8 +51,7 @@
<span class="font-w-500 color-303133">查看明细</span>
</div>
<div class="flex">
<i class="iconfont-hb3 iconzhibiaoshuoming color-1890ff"></i>
<div class="color-1890ff font-14 p-l-6" @click="explain('http://baidu.com')">指标说明</div>
<el-button type="text" v-jumpLink:codeCkmx><i class="iconfont-hb3 iconzhibiaoshuoming m-r-6"></i>指标说明</el-button>
</div>
</div>
<data-detail :id="hmId"></data-detail>
......@@ -75,13 +73,38 @@ export default {
default() {
return '';
}
}
},
chartWidth: Number
},
mixins: [mixin],
data() {
return {
loading: false,
dateList: [
// { bizDate: '2018/8/1', addNum: 4623 },
// { bizDate: '2018/8/2', addNum: 6145 },
// { bizDate: '2018/8/3', addNum: 508 },
// { bizDate: '2018/8/4', addNum: 289 },
// { bizDate: '2018/8/5', addNum: 289 },
// { bizDate: '2018/8/6', addNum: 289 },
// { bizDate: '2018/8/7', addNum: 289 },
// { bizDate: '2018/8/8', addNum: 289 },
// { bizDate: '2018/8/9', addNum: 289 },
// { bizDate: '2018/8/10', addNum: 289 },
// { bizDate: '2018/8/11', addNum: 289 },
// { bizDate: '2018/8/12', addNum: 289 },
// { bizDate: '2018/8/13', addNum: 2589 },
// { bizDate: '2018/8/14', addNum: 289 },
// { bizDate: '2018/8/15', addNum: 289 },
// { bizDate: '2018/8/16', addNum: 29 },
// { bizDate: '2018/8/17', addNum: 289 },
// { bizDate: '2018/8/18', addNum: 9 },
// { bizDate: '2018/8/19', addNum: 2189 },
// { bizDate: '2018/8/20', addNum: 289 },
// { bizDate: '2018/8/21', addNum: 2869 },
// { bizDate: '2018/8/22', addNum: 289 },
// { bizDate: '2018/8/23', addNum: 2809 }
],
overViewData: { addNumT: 0, addNum: 0, dateList: [] }
};
},
......@@ -94,8 +117,8 @@ export default {
let para = {
inFields: {
hmId: that.hmId,
startTime: that.dateDefault[0],
endTime: that.dateDefault[1],
startTime: that.dateDefault[0] + ' 00:00:00',
endTime: that.dateDefault[1] + ' 23:59:59',
type: that.dateKey >= 2 ? 2 : 1
}
};
......@@ -105,43 +128,17 @@ export default {
let resData = res.data;
that.loading = false;
if (resData.code == 0) {
// let resData = {
// result: {
// addNumT: 20,
// addNum: 10,
// dateList: [
// { bizDate: '2018/8/1', addNum: 4623 },
// { bizDate: '2018/8/2', addNum: 6145 },
// { bizDate: '2018/8/3', addNum: 508 },
// { bizDate: '2018/8/4', addNum: 289 },
// { bizDate: '2018/8/5', addNum: 289 },
// { bizDate: '2018/8/6', addNum: 289 },
// { bizDate: '2018/8/7', addNum: 289 },
// { bizDate: '2018/8/8', addNum: 289 },
// { bizDate: '2018/8/9', addNum: 289 },
// { bizDate: '2018/8/10', addNum: 289 },
// { bizDate: '2018/8/11', addNum: 289 },
// { bizDate: '2018/8/12', addNum: 289 },
// { bizDate: '2018/8/13', addNum: 2589 },
// { bizDate: '2018/8/14', addNum: 289 },
// { bizDate: '2018/8/15', addNum: 289 },
// { bizDate: '2018/8/16', addNum: 29 },
// { bizDate: '2018/8/17', addNum: 289 },
// { bizDate: '2018/8/18', addNum: 9 },
// { bizDate: '2018/8/19', addNum: 2189 },
// { bizDate: '2018/8/20', addNum: 289 },
// { bizDate: '2018/8/21', addNum: 2869 },
// { bizDate: '2018/8/22', addNum: 289 },
// { bizDate: '2018/8/23', addNum: 2809 }
// ]
// }
// };
((resData.result || {}).dateList || []).map(function(date) {
let result = resData.result || { addNumT: 0, addNum: 0, dateList: [] };
// result.dateList = [
// { bizDate: '2018/8/1', 新增人数: 0 },
// { bizDate: '2018/8/2', 新增人数: 1 },
// { bizDate: '2018/8/3', 新增人数: 1 },
// { bizDate: '2018/8/4', 新增人数: 1 }
// ];
result.dateList.map(function(date, index) {
date['新增人数'] = date.addNum;
});
that.overViewData = resData.result || {};
that.overViewData = result;
return;
}
errMsg.errorMsg(resData);
......
......@@ -11,12 +11,23 @@
<div class="flex">
<img v-if="scope.row.memberImage" class="image-40" :src="scope.row.memberImage" />
<img v-if="!scope.row.memberImage" class="image-40" src="@/assets/user-default.svg" />
<div class="p-l-10 line-20" style="width: calc(100% - 50px);">
<div v-if="!scope.row.memberName && !scope.row.memberNick && !scope.row.memberPhone" class="p-l-10" style="width: calc(100% - 50px);line-height: 40px;">--</div>
<div v-if="(scope.row.memberName || scope.row.memberNick) && scope.row.memberPhone" class="p-l-10 line-20" style="width: calc(100% - 50px);">
<div class="flex text-ellipsis">
<span class="text-ellipsis">{{ scope.row.memberName || '--' }}</span>
<span class="color-909399 text-ellipsis">{{ scope.row.memberNick || '--' }}</span>
<span class="text-ellipsis">{{ scope.row.memberName }}</span>
<span :class="scope.row.memberName ? 'color-909399 text-ellipsis' : 'text-ellipsis'" v-if="scope.row.memberNick"> {{ !scope.row.memberName ? scope.row.memberNick : '(' + scope.row.memberNick + ')' }}</span>
</div>
<p class="font-12">{{ scope.row.memberPhone }}</p>
</div>
<div v-else>
<div v-if="scope.row.memberName && scope.row.memberNick && !scope.row.memberPhone" class="p-l-10" style="line-height: 40px;">
<div class="flex text-ellipsis">
<span class="text-ellipsis">{{ scope.row.memberName }}</span>
<span class="color-909399 text-ellipsis">{{ scope.row.memberNick }})</span>
</div>
</div>
<p class="font-12">{{ scope.row.memberPhone || '--' }}</p>
<div v-else class="p-l-10" style="width: calc(100% - 50px);line-height: 40px;">{{ scope.row.memberName || scope.row.memberNick || scope.row.memberPhone }}</div>
</div>
</div>
</template>
......@@ -34,13 +45,13 @@
<el-table-column prop="" label="导购信息" show-overflow-tooltip min-width="128px">
<template slot-scope="scope">
<p class="line-20 text-ellipsis">{{ scope.row.clerkName || '--' }}</p>
<p class="color-606266 line-18 text-ellipsis font-12">{{ scope.row.clerkCode || '--' }}</p>
<p class="color-606266 line-18 text-ellipsis font-12">code:{{ scope.row.clerkCode || '--' }}</p>
</template>
</el-table-column>
<el-table-column prop="" label="导购所属门店" show-overflow-tooltip min-width="185px">
<template slot-scope="scope">
<p class="line-20 text-ellipsis">{{ scope.row.storeName || '--' }}</p>
<p class="color-606266 line-18 text-ellipsis font-12">{{ scope.row.storeCode || '--' }}</p>
<p class="color-606266 line-18 text-ellipsis font-12">code:{{ scope.row.storeCode || '--' }}</p>
</template>
</el-table-column>
<el-table-column prop="" label="企微号" show-overflow-tooltip min-width="107px">
......@@ -83,18 +94,12 @@ import { postJsonRequest } from '@/api/api';
export default {
name: 'actCodeRecord',
components: {},
props: {
hmId: {
type: String,
default: ''
}
},
data() {
return {
loading: false,
tableData: [],
// searchInputStore: '',
// searchInputGuide: '',
tableData: [{ addChannel: 2, hmName: '好多好多活码呢', linkName: '没什么的链接', storeName: '实话实说mendian', storeCode: '0928338', staffName: '是共商国是', memberLabelName: '和大哥大哥大哥的话打电话', clerkCode: '99000', clerkName: '常常常常', createTime: 1891282736363, memberImage: '@/assets/user-default.svg', memberName: '溜溜里', memberNick: 'kiu今生', memberPhone: '15757906438', memberCardNo: '92838383838', memberGradeName: '高级卡' }],
// 分页参数
currentPage: 1,
pageSize: 20,
......@@ -121,7 +126,6 @@ export default {
*/
sortChange(column, prop, order) {
const that = this;
console.log(column.order);
that.currentPage = 1;
that.sortType = column.order == 'ascending' ? 'asc' : 'desc'; // 默认倒序
that.getTableList();
......@@ -152,36 +156,28 @@ export default {
async getTableList() {
const that = this;
that.loading = true;
let para = {};
let api = '';
if (this.$route.query.hmId) {
api = '/haoban-manage3-web/hm/qrcode/wxUserAddLog/list';
para = {
pageNum: that.currentPage, // 当前页
pageSize: that.pageSize, // 一页显示个数
hmId: that.$route.query.hmId,
createTimeOrder: that.sortType || ''
};
} else if (this.$route.query.linkId) {
const { startTime, endTime, clerkId, linkId } = this.$route.query;
api = '/haoban-manage3-web/hm/link/statistics/log';
para = {
pageNum: that.currentPage, // 当前页
pageSize: that.pageSize, // 一页显示个数
linkId,
clerkId,
startTime,
endTime
// createTimeOrder: that.sortType || ''
};
}
// console.log(para);
postJsonRequest(api, para)
const { startTime, endTime, clerkId, linkId, hmId } = this.$route.query;
let para = {
pageNum: that.currentPage, // 当前页
pageSize: that.pageSize, // 一页显示个数
linkId,
hmId,
clerkId,
startTime,
endTime,
// addChannel: 1,
addChannel: linkId ? 1 : hmId ? this.$route.query.addChannel : 0, // 不具备传0
createTimeOrder: that.sortType || ''
};
postJsonRequest('/haoban-manage3-web/hm/qrcode/wxUserAddLog/list', para)
.then(res => {
let resData = res.data;
that.loading = false;
if (resData.code == 0) {
that.tableData = resData.result.result || [];
// that.tableData[0].memberPhone = '';
// that.tableData[0].memberNick = '';
// that.tableData[0].memberName = '';
that.total = resData.result.totalCount || 0;
return;
}
......@@ -199,6 +195,7 @@ export default {
mounted() {
let that = this;
that.getTableList();
console.log(this.$route.query);
}
};
</script>
......
......@@ -9,7 +9,7 @@
<dm-sub-title text="配置标签" class="m-b-10">
<div class="title">
<span>员工活码</span>
<span class="info-content cur-po"><i class="iconfont-hb3 iconzhibiaoshuoming info-icon"></i>指标说明</span>
<el-button type="text" v-jumpLink:codeList><i class="iconfont-hb3 iconzhibiaoshuoming m-r-6"></i>指标说明</el-button>
</div>
</dm-sub-title>
<act-code-table :currentGroupId="currentGroupId"></act-code-table>
......@@ -40,10 +40,9 @@ export default {
watch: {
currentGroupId: {
handler: function(val) {
console.log(val, 111);
if (val != null) {
this.currentGroupId = val;
}
// if (val != null) {
this.currentGroupId = val;
// }
},
immediate: true
}
......@@ -73,6 +72,7 @@ export default {
.list-right {
position: relative;
height: 500px;
width: 100%;
min-width: calc(100% - 300px);
min-height: calc(100vh - 94px);
border-left: 1px solid #e4e7ed;
......@@ -83,13 +83,6 @@ export default {
width: 100%;
display: flex;
justify-content: space-between;
.info-content {
color: #2f54eb;
font-size: 14px;
}
.info-icon {
margin-right: 8px;
}
}
.cur-po {
cursor: pointer;
......
<template>
<div :id="id"></div>
<!-- <div v-if="charData.length" :id="id"></div> -->
<!-- <div v-else class="chart--nodata"></div> -->
<div>
<div :id="id" class="chart--box" v-show="charData.length > 0"></div>
<div v-if="charData.length == 0" class="chart--nodata">
<div>
<img class="image-120" src="@/assets/no-data.svg" />
<p class="font-14 color-606266 no-data-text">暂无数据</p>
</div>
</div>
</div>
</template>
<script>
// import G2 from '@antv/g2';
import * as G2 from '@antv/g2';
import filters from '@/filters/index';
export default {
components: {},
data() {
return {
chart: null
......@@ -21,67 +28,46 @@ export default {
}
},
id: String,
width: {
type: Number,
default: 1192
}
},
mounted() {
setTimeout(() => {
this.drawChart(); // 第一步是创建的时候更新图表,但是这个不适用于异步请求接口获取相关数据,采用下面的监听的方式
}, 30);
chartWidth: Number
},
beforeUpdate() {
this.drawChart();
},
watch: {
charData() {
this.drawChart();
}
},
methods: {
async drawChart() {
drawChart() {
this.chart && this.chart.destroy();
if (!this.charData.length) return;
this.chart = new G2.Chart({
container: this.id,
height: 359,
autoFit: true,
forceFit: true,
width: this.width,
padding: [20, 40, 80, 80]
height: 359,
width: this.chartWidth,
padding: [70, 60, 40, 70]
});
//装载数据
// { date: '2018/8/1', 新增人数: 4623 },
// { date: '2018/8/2', 新增人数: 6145 },
// { date: '2018/8/3', 新增人数: 508 },
// { date: '2018/8/4', 新增人数: 289 }
// this.chart.data(this.charData); // 载入数据源
this.chart.data(this.charData, {
bizDate: {
// type: 'cat', //分类
alias: '日期' //别名
},
新增人数: {
alias: '新增人数'
}
let list = JSON.parse(JSON.stringify(this.charData));
list.sort((a, b) => {
return b.新增人数 - a.新增人数;
});
//坐标轴配置(法一配置)
this.chart.axis('bizDate', {
line: {
style: {
stroke: '#606266',
lineDash: [3, 3]
}
},
tickLine: {
style: {
fill: '#E4E7ED',
lineDash: [3, 3]
}
let maxNum = list[0]['新增人数'];
this.chart.data(this.charData); // 载入数据源
this.chart.tooltip({
showMarkers: false,
shared: true,
showCrosshairs: true
});
this.chart.scale({
新增人数: {
// tickInterval: 1,
tickCount: maxNum > 2 ? 5 : maxNum + 1,
minTickInterval: 1,
nice: true,
min: 0
// type: 'linear'
},
label: {
style: {
fill: '#606266'
}
bizDate: {
type: 'cat'
}
});
this.chart.axis('新增人数', {
......@@ -98,23 +84,54 @@ export default {
style: {
fill: '#606266'
},
formatter: val => {
// 格式化参数值
return val;
formatter: text => {
let num = Number(text);
return num + '人';
}
}
});
// this.chart.tooltip({
// showCrosshairs: true,
// shared: true,
// itemTpl: `<div style="margin-bottom: 10px;list-style:none;">
// <span style="background-color:{color};" class="g2-tooltip-marker"></span>
// {name}: {value}
// </div>`
// });
// 图例
this.chart.legend({
custom: true,
position: 'top-left',
items: [{ name: '新增人数', value: '新增人数', marker: { symbol: 'line', style: { stroke: '#4B74E8', lineWidth: 12, lineHeight: 8 } } }]
});
this.chart
.line()
.position('bizDate*新增人数')
.color('#4B74E8');
if (this.charData.length > 1) {
this.chart
.line()
.position('bizDate*新增人数')
.color('#4B74E8');
// .tooltip('addNum', addNum => {
// return {
// name: '新增人数',
// value: addNum
// };
// });
} else if (this.charData.length == 1) {
let time = new Date(this.charData[0].bizDate).getTime();
let start = { 新增人数: null, bizDate: filters.timeStampToYmd(time - 86400000) };
let end = { 新增人数: null, bizDate: filters.timeStampToYmd(time + 86400000) };
let list = [start, this.charData[0], end];
this.chart.data(list);
this.chart
.point()
.position('bizDate*新增人数')
.color('#4B74E8');
// .tooltip('addNum', addNum => {
// return {
// name: '新增人数',
// value: addNum
// };
// });
}
this.chart.removeInteraction('legend-filter'); // 自定义图例,移除默认的分类图例筛选交互
//图表绘制的最后一步,用于将图表渲染至画布
......@@ -123,3 +140,24 @@ export default {
}
};
</script>
<style lang="scss" scoped>
.chart--box {
height: 359px;
width: calc(100% - 20px);
}
.chart--nodata {
height: 359px;
width: 100%;
display: flex;
justify-content: center;
.image-120 {
width: 120px;
height: 120px;
padding-top: 60px;
}
.no-data-text {
text-align: center;
padding-top: 18px;
}
}
</style>
<template>
<section>
<div style="width:100%;">
<el-form inline>
<el-form-item>
<el-input placeholder="请输入活码ID/名称、创建人" style="width: 300px" @change="searchList" v-model="inFields.hmSelect" clearable>
<el-input placeholder="请输入活码ID/名称、创建人" style="width: 260px" @change="searchList" v-model="inFields.hmSelect" clearable>
<i slot="prefix" class="el-input__icon el-icon-search"></i>
</el-input>
</el-form-item>
<el-form-item>
<el-select v-model="storeSelect" placeholder="请选择" style="width: 128px" @change="storeMemberSe">
<el-option label="成员所属门店" :value="1"></el-option>
<el-option label="使用成员" :value="2"></el-option>
<el-option label="关联导购" :value="2"></el-option>
</el-select>
<el-select v-model="inFields.storeSelect" v-if="storeSelect == 1" filterable remote placeholder="请输入门店名称/code" :remote-method="remoteMethods" :loading="selectLoading" v-loadmore="onLoadmoreStore" @change="searchList" style="margin-left: -4px; width:196px;">
<el-option v-for="item in shopList" :key="item.storeId" :label="item.storeName" :value="item.storeCode"> </el-option>
<el-select v-model="inFields.storeSelect" v-if="storeSelect == 1" filterable remote placeholder="请输入门店名称/code" :remote-method="remoteMethods" :loading="selectLoading" @change="searchList" style="margin-left: -4px; width:196px;" clearable v-loadmore="onLoadmoreStore" popper-class="s-select" @clear="searchListShop">
<el-option v-for="item in shopList" :key="item.storeId" :label="item.storeName" :value="item.storeId">
<p class="sname">{{ item.storeName }}</p>
<p class="scode">code:{{ item.storeCode }}</p>
</el-option>
</el-select>
<el-select v-model="inFields.clerkSelect" v-if="storeSelect == 2" filterable remote placeholder="请输入成员名称/code" :loading="selectLoading" @change="searchList" style="margin-left: -4px; width:196px;">
<el-option v-for="item in memberList" :key="item.clerkId" :label="item.clerkName" :value="item.clerkCode"> </el-option>
<el-select v-model="inFields.clerkSelect" v-if="storeSelect == 2" filterable remote placeholder="请输入成员名称/code" :remote-method="remoteMethodShop" :loading="selectLoading" @change="searchList" style="margin-left: -4px; width:196px;" clearable popper-class="s-select">
<el-option v-for="item in memberList" :key="item.clerkId" :label="item.clerkName" :value="item.clerkId">
<p class="sname">{{ item.clerkName }}</p>
<p class="scode">code:{{ item.clerkCode }}</p>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
......@@ -28,64 +34,67 @@
</el-form-item>
<el-form-item>
<el-select v-model="inFields.hmTypeInt" placeholder="全部类型" clearable class="w160" @change="searchList">
<el-option :key="0" label="单人活码" :value="0"> </el-option>
<el-option :key="1" label="多人活码" :value="1"> </el-option>
<el-option :key="1" label="单人活码" :value="1"> </el-option>
<el-option :key="2" label="多人活码" :value="2"> </el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker v-model="dateTime" @change="searchList" :picker-options="pickerOptions" :editable="false" :value-format="'yyyy-MM-dd HH:mm:ss'" type="datetimerange" align="right" unlink-panels range-separator="至" start-placeholder="创建开始日期" end-placeholder="创建结束日期"> </el-date-picker>
<el-date-picker v-model="dateTime" @change="searchList" :editable="false" :value-format="'yyyy-MM-dd'" type="daterange" align="right" :picker-options="pickerOptions" range-separator="至" start-placeholder="创建开始日期" end-placeholder="创建结束日期"> </el-date-picker>
</el-form-item>
<el-form-item class="frmbt20">
<el-button @click="batchGoupEvent">批量分组</el-button>
<el-button @click="batchGoupEvent" v-if="$getButtonLimit($buttonCode.batchGroup)" :limit-code="$buttonCode.batchGroup">批量分组</el-button>
<el-button type="primary" class="ghost-btn " @click="$router.push('/actCodeBatch')" v-if="$getButtonLimit($buttonCode.batchActCode)" :limit-code="$buttonCode.batchActCode">批量创建活码</el-button>
<el-button type="primary" @click="$router.push('/actCodeAdd')" v-if="$getButtonLimit($buttonCode.addActCode)" :limit-code="$buttonCode.addActCode">新增活码</el-button>
<!-- <el-button @click="batchGoupEvent">批量分组</el-button>
<el-button class="ghost-btn " @click="$router.push('/actCodeBatch')">批量创建活码</el-button>
<el-button type="primary" @click="$router.push('/actCodeAdd')">新增活码</el-button>
<el-button type="primary" @click="$router.push('/actCodeAdd')">新增活码</el-button> -->
</el-form-item>
</el-form>
<el-table ref="actCodeTableRef" v-loading="loadingStatus" :data="tableData" class="act-code-table" @sort-change="sortChange" :max-height="tableMaxHeight">
<el-table ref="actCodeTableRef" v-loading="loadingStatus" :data="tableData" class="act-code-table" @sort-change="sortChange" :max-height="tableMaxHeight" @selection-change="handleSelectionChange">
<!-- @select="selectTable" tooltip-effect="dark"-->
<el-table-column type="selection" width="60" fixed> </el-table-column>
<el-table-column width="60" class-name="table-select-cell" fixed>
<el-table-column type="selection" min-width="60" fixed> </el-table-column>
<!-- <el-table-column width="60" class-name="table-select-cell" fixed>
<template #header>
<dm-table-select-page class="table-select" :type="selectPage.type" :data-ready="selectPage.dataReady" :table-vm="$refs.actCodeTableRef" :table-data="actCodeList" :total="totalCount" @change="t => (selectPage.type = t)" @selection-change="handleSelectionChange"></dm-table-select-page>
<dm-table-select-page class="table-select" :type="selectPage.type" :data-ready="selectPage.dataReady" :table-vm="$refs.actCodeTableRef" :table-data="tableData" :total="totalCount" @change="t => (selectPage.type = t)" @selection-change="handleSelectionChange"></dm-table-select-page>
</template>
</el-table-column>
<el-table-column label="活码ID" fixed width="110">
</el-table-column> -->
<el-table-column label="活码ID" fixed min-width="110">
<template slot-scope="{ row }">
<p>{{ row.hmId }}</p>
<p>{{ row.hmCode }}</p>
</template>
</el-table-column>
<el-table-column label="活码信息" width="100">
<el-table-column label="活码信息" min-width="120">
<template slot-scope="{ row }">
<p class="overflow-ellipsis" :title="row.hmName">{{ row.hmName ? row.hmName : '--' }}</p>
<p><span class="oneActCode" v-if="row.hmType == 1">单人活码</span><span class="moreActCOde" v-else>多人活码</span></p>
</template>
</el-table-column>
<el-table-column label="活码状态" width="130">
<el-table-column label="活码状态" min-width="110">
<template slot-scope="{ row }">
<p><span class="dot normal" v-if="row.statusFlag == 1">正常</span><span class="dot voided" v-if="row.statusFlag == 2">作废</span><span class="dot needSure" v-if="row.statusFlag == 3">待生效</span></p>
<p class="toTopTip" v-if="row.statusFlag == 1">(今日已达上限)</p>
<p class="toTopTip" v-if="row.overFlag == 1">(今日已达上限)</p>
</template>
</el-table-column>
<el-table-column label="添加好友人数" prop="addNum" sortable="custom" width="150">
<el-table-column label="添加好友人数" prop="addNumT" sortable="custom" min-width="120">
<template slot-scope="{ row }">
<p>{{ row.addNum == null ? row.addNum : '--' }}</p>
<p>{{ row.addNumT ? row.addNumT : '--' }}</p>
</template>
</el-table-column>
<el-table-column label="今日新增人数" prop="addNumT" sortable="custom" width="150">
<el-table-column label="今日新增人数" prop="addNum" sortable="custom" min-width="120">
<template slot-scope="{ row }">
<p>{{ row.addNumT == null ? row.addNumT : '--' }}</p>
<p>{{ row.addNum ? row.addNum : '--' }}</p>
</template>
</el-table-column>
<el-table-column label="使用成员" width="120" show-overflow-tooltip>
<el-table-column label="关联导购" min-width="130" show-overflow-tooltip>
<template slot-scope="{ row }">
<p>{{ row.clerkName ? row.clerkName : '--' }}</p>
<p class="ft-12 phone">{{ row.clerkCode ? row.clerkCode : '--' }}</p>
<p v-if="row.clerkList && row.clerkList.length > 0">
<p class="overflow-ellipsis">{{ row.clerkList[0] ? row.clerkList[0].clerkName : '--' }}</p>
<p class="ft-12 phone overflow-ellipsis">{{ row.clerkList[0] ? `code:${row.clerkList[0].clerkCode}` : '--' }}</p>
<p v-if="row.clerkList && row.clerkList.length > 1">
<el-popover width="200" trigger="click">
<ul class="userMember-ul">
<li v-for="item in row.clerkList" :key="item.clerkId" class="userMemberLi">
<p class="ulName">{{ item.clerkName }}</p>
<p class="ft-12 phone">{{ item.clerkCode }}</p>
<p class="ft-12 phone">code{{ item.clerkCode }}</p>
</li>
</ul>
<el-button class="ft-12" type="text" slot="reference">查看更多</el-button>
......@@ -93,16 +102,16 @@
</p>
</template>
</el-table-column>
<el-table-column label="成员所属门店" width="120" show-overflow-tooltip>
<el-table-column label="成员所属门店" min-width="150" show-overflow-tooltip>
<template slot-scope="{ row }">
<p>{{ row.storeName ? row.storeName : '--' }}</p>
<p class="ft-12 phone">{{ row.storeCode ? row.storeCode : '--' }}</p>
<p v-if="row.storeList && row.storeList.length > 0">
<p class="overflow-ellipsis">{{ row.storeList[0] ? row.storeList[0].storeName : '--' }}</p>
<p class="ft-12 phone overflow-ellipsis">{{ row.storeList[0] ? `code:${row.storeList[0].storeCode}` : '--' }}</p>
<p v-if="row.storeList && row.storeList.length > 1">
<el-popover width="200" trigger="click">
<ul class="userMember-ul">
<li v-for="item in row.storeList" :key="item.storeId" class="userMemberLi">
<p class="ulName">{{ item.storeName }}</p>
<p class="ft-12 phone">{{ item.storeCode }}</p>
<p class="ft-12 phone">code{{ item.storeCode }}</p>
</li>
</ul>
<el-button class="ft-12" type="text" slot="reference">查看更多</el-button>
......@@ -110,20 +119,22 @@
</p>
</template>
</el-table-column>
<el-table-column label="所属分组" width="100" show-overflow-tooltip>
<el-table-column label="所属分组" min-width="120" show-overflow-tooltip>
<template slot-scope="{ row }">
<p>{{ row.hmGroupId == null ? row.hmGroupId : '--' }}</p>
<p class="overflow-ellipsis">{{ row.hmGroupName ? row.hmGroupName : '--' }}</p>
</template>
</el-table-column>
<el-table-column label="创建人" width="100">
<el-table-column label="创建人" min-width="100" show-overflow-tooltip>
<template slot-scope="{ row }">
<p>{{ row.creatorName ? row.creatorName : '--' }}</p>
<p class="overflow-ellipsis">{{ row.creatorName ? row.creatorName : '--' }}</p>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" sortable="custom" width="110">
<template slot-scope="{ row }">
<p>{{ row.createTime ? row.createTime : '--' }}</p>
<el-table-column label="创建时间" prop="createTime" sortable="custom" min-width="110">
<template slot-scope="{ row }" v-if="row.createTime">
<div>{{ row.createTime | timeStampToYmd }}</div>
<div>{{ row.createTime | timeStampToHms }}</div>
</template>
<template v-else>--</template>
</el-table-column>
<el-table-column label="操作" width="160" fixed="right">
<template slot-scope="{ row }">
......@@ -132,12 +143,12 @@
</el-table-column>
</el-table>
<div class="block common-wrap__page text-right m-t-24" v-if="tableData.length">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-size.sync="pageParam.pageSize" :current-page.sync="pageParam.pageNum" layout="total, sizes, prev, pager, next, jumper" :page-sizes="[20, 40, 60, 80]" :total="totalCount"> </el-pagination>
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-size.sync="pageParam.pageSize" :current-page.sync="pageParam.pageNo" layout="total, sizes, prev, pager, next, jumper" :page-sizes="[20, 40, 60, 80]" :total="totalCount"> </el-pagination>
</div>
<el-dialog title="选择分组" :visible.sync="dialogGroupFormVisible" width="25%">
<el-dialog title="选择分组" :visible.sync="dialogGroupFormVisible" width="500px">
<el-form :model="formGroup">
<el-form-item label="活动区域" :rules="[{ required: true, message: '请选择分组', trigger: 'blur' }]">
<el-select v-model="formGroup.groupId" placeholder="选择分组" v-loadmore="onLoadmore" remote filterable :remote-method="remoteMethod" @visible-change="visibleChange" clearable>
<el-form-item label="活码分组" :rules="[{ required: true, message: '请选择分组', trigger: 'blur' }]">
<el-select class="chooseGroup" v-model="formGroup.groupId" placeholder="选择分组" v-loadmore="onLoadmore" filterable :filter-method="remoteMethod" @visible-change="visibleChange" clearable>
<el-option v-for="item in groupList" :key="item.groupId" :label="item.groupName" :value="item.groupId"></el-option>
</el-select>
</el-form-item>
......@@ -147,13 +158,14 @@
<el-button type="primary" @click="batchOK"> </el-button>
</div>
</el-dialog>
<links :src="wxQrcode" :show.sync="show" :imageName="imageName" />
</section>
<links :src="wxQrcode" :show.sync="show" :imageName="imageName" :sourceType="false" />
</div>
</template>
<script>
import { actCodeListApi } from '@/api/actCode.js';
import links from '@/components/common/links';
// import { _debounce } from '@/common/js/public';
import { deleteRequest, getRequest, postRequest, postJsonRequest } from '@/api/api';
export default {
name: 'actCodeTable',
......@@ -165,7 +177,7 @@ export default {
inserted(el, binding) {
const SELECTDOWN_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap');
SELECTDOWN_DOM.addEventListener('scroll', function() {
const CONDITION = this.scrollHeight + this.scrollTop >= this.clientHeight;
const CONDITION = this.clientHeight + this.scrollTop + 20 >= this.scrollHeight;
if (CONDITION) {
binding.value();
}
......@@ -176,7 +188,7 @@ export default {
props: {
currentGroupId: {
type: [Number, String],
default: null
default: -1
}
},
data() {
......@@ -193,7 +205,7 @@ export default {
startTime: '',
endTime: '',
orderByField: 'createTime desc',
hmGroupId: 0
hmGroupId: '-1'
},
storeSelect: 1,
dateTime: [],
......@@ -209,33 +221,50 @@ export default {
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() < end.getTime() - 3600 * 1000 * 24 * 365 || time.getTime() > end.getTime() - 3600 * 1000 * 24;
return time.getTime() > end.getTime();
}
},
operateBtnArr: [
{
text: '数据',
visible: true,
visible: row => {
if (this.$getButtonLimit(this.$buttonCode.dataActCode)) {
return true;
}
},
props: {
limitCode: this.$buttonCode.dataActCode
},
handler: row => {
this.$router.push(`/actCodeDetail?id=${row.hmId}&activeName=second`);
this.$router.push(`/actCodeDetail?hmId=${row.hmId}&activeName=second`);
}
},
{
text: '详情',
visible: true,
visible: row => {
if (this.$getButtonLimit(this.$buttonCode.infoActCode)) {
return true;
}
},
props: {
limitCode: this.$buttonCode.infoActCode
},
handler: row => {
this.$router.push('/actCodeDetail?hmId=' + row.hmId);
this.$router.push('/actCodeDetails?hmId=' + row.hmId);
}
},
{
text: '编辑',
visible: row => {
if (row.hmType == 1 && row.statusFlag != 2) {
return true;
} else {
if (!this.$getButtonLimit(this.$buttonCode.editActCode) || row.statusFlag == 2) {
return false;
} else {
return true;
}
},
props: {
limitCode: this.$buttonCode.editActCode
},
handler: row => {
this.$router.push('/actCodeEdit?hmId=' + row.hmId);
}
......@@ -243,35 +272,63 @@ export default {
{
text: '下载活码',
visible: row => {
if (row.hmType == 1 || row.statusFlag != 1) {
if (!this.$getButtonLimit(this.$buttonCode.downActCode) || row.hmType == 1 || row.statusFlag != 1) {
return false;
} else {
return true;
}
},
props: {
limitCode: this.$buttonCode.downActCode
},
handler: row => {
this.wxQrcode = row.wxQrcode;
this.imageName = `${row.hmId}_${row.name}`;
this.show = true;
// this.wxQrcode = row.wxQrcode;
// this.imageName = `${row.hmId}_${row.hmName}`;
// this.show = true;
const downloadFile = (fileName, content) => {
const url = content;
const x = new XMLHttpRequest();
x.open('GET', url, true);
x.responseType = 'blob';
x.onload = function(e) {
const blob = new Blob([x.response]);
let url = window.URL.createObjectURL(blob);
let a = document.createElement('a');
a.href = url;
a.download = fileName + '.png';
a.click();
};
x.send();
};
downloadFile(row.hmCode + '_' + row.hmName, row.wxQrcode);
}
},
{
text: '作废',
visible: row => {
if (row.statusFlag != 2) {
// if (this.$getButtonLimit(this.$buttonCode.delActCode) && row.statusFlag != 2 && row.hmType == 2 && row.clerkCode == '') {
// return true;
// }
if (this.$getButtonLimit(this.$buttonCode.delActCode) && row.statusFlag != 2) {
return true;
}
},
props: {
limitCode: this.$buttonCode.delActCode
},
handler: row => {
this.$confirm('确认要作废该活码?此操作将永久废弃该活码,请确保不影响其他投放使用!', '作废提示', {
confirmButtonText: '删除',
this.$confirm('此操作将永久废弃该活码,请确保不影响其他投放使用!', '确认要作废该活码?', {
confirmButtonText: '作废',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.loadingStatus = true;
deleteRequest('/haoban-manage3-web/hm/qrcode/del', { hmId: row.hmId }).then(res => {
if (res.data.code == 0) {
// this.getTableList();
this.$router.go(0);
setTimeout(() => {
this.getTableList();
this.loadingStatus = false;
}, 1000);
}
});
});
......@@ -284,7 +341,7 @@ export default {
// 分页参数
pageParam: {
pageSize: 20,
pageNum: 1
pageNo: 1
},
sortColumn: '',
sortType: '',
......@@ -296,12 +353,13 @@ export default {
},
groupList: [],
pageParamGroup: {
search: '',
groupName: '',
pageNum: 1,
pageSize: 20,
total: 1
},
name: '1',
name: '',
// 门店
storeParam: {
searchParam: '',
pageSize: 20,
......@@ -315,17 +373,27 @@ export default {
};
},
created() {
this.searchGroup();
this.getTableList();
},
activated() {
this.searchGroup();
this.getStraff();
this.getStore();
this.getTableList();
},
methods: {
// toInput: _debounce(function(e, value) {
// this.getStore();
// }, 500),
// toInputs: _debounce(function(e, value) {
// this.getStraff();
// }, 500),
storeMemberSe(e) {
if (e == 1) {
this.inFields.clerkSelect = '';
this.memberList = [];
} else if (e == 2) {
this.inFields.storeSelect = '';
this.shopList = [];
}
},
onLoadmoreStore() {
......@@ -354,6 +422,16 @@ export default {
this.shopList = [];
}
},
// 导购
remoteMethodShop(query) {
if (query !== '') {
this.name = query;
this.memberList = [];
this.getStraff();
} else {
this.memberList = [];
}
},
// 获取导购列表数据
async getStraff() {
await postRequest(`/api-plug/search-clerk?type=2`, { name: this.name }).then(res => {
......@@ -385,14 +463,10 @@ export default {
},
// 远程搜索
remoteMethod(query) {
if (query !== '') {
this.pageParamGroup.search = query;
this.pageParamGroup.pageNum = 1;
this.groupList = [];
this.searchGroup();
} else {
this.groupList = [];
}
this.pageParamGroup.groupName = query;
this.pageParamGroup.pageNum = 1;
this.groupList = [];
this.searchGroup();
},
visibleChange(e) {
if (!e) {
......@@ -409,9 +483,10 @@ export default {
// 批量分组
batchGoupEvent() {
if (this.selectHmIds.length == 0) {
return this.$message({ message: '请先选择活码', type: 'warning' });
return this.$message({ message: '请先选择活码', type: 'warning' });
} else {
this.dialogGroupFormVisible = true;
this.searchGroup();
}
},
async batchOK() {
......@@ -428,12 +503,12 @@ export default {
},
// 当前页变化
handleCurrentChange(val) {
this.pageParam.pageNum = val;
this.pageParam.pageNo = val;
this.getTableList();
},
// 页码
handleSizeChange(val) {
this.pageParam.pageNum = 1;
this.pageParam.pageNo = 1;
this.pageParam.pageSize = val;
this.getTableList();
},
......@@ -444,18 +519,26 @@ export default {
this.inFields.orderByField = `${this.sortColumn} ${this.sortType}`;
this.getTableList();
},
searchList() {
this.pageNum = 1;
searchListShop() {
this.shopList = [];
},
searchList(e) {
this.pageParam.pageNo = 1;
this.getTableList();
},
getTableList() {
this.loadingStatus = true;
if (this.dateTime && this.dateTime.length) {
this.inFields.startTime = this.dateTime ? Date.parse(new Date(this.dateTime[0]).toString()) : '';
this.inFields.endTime = this.dateTime ? Date.parse(new Date(this.dateTime[1]).toString()) : '';
this.inFields.startTime = this.dateTime ? this.dateTime[0] + ' 00:00:00' : '';
this.inFields.endTime = this.dateTime ? this.dateTime[1] + ' 23:59:59' : '';
this.inFields.startTime = Date.parse(new Date(this.inFields.startTime).toString());
this.inFields.endTime = Date.parse(new Date(this.inFields.endTime).toString());
} else {
this.inFields.startTime = '';
this.inFields.endTime = '';
}
if (this.currentGroupId != null) {
this.inFields.hmGroupId = Number(this.currentGroupId);
if (this.currentGroupId) {
this.inFields.hmGroupId = this.currentGroupId;
}
if (this.inFields.hmSelect == '') {
delete this.inFields.hmSelect;
......@@ -483,19 +566,19 @@ export default {
this.tableData = res.data.result.data || [];
this.totalCount = res.data.result.page.totalCount;
}
this.selectPage.dataReady = true;
})
.finally(_ => {
this.loadingStatus = false;
this.selectPage.dataReady = true;
});
}
},
watch: {
currentGroupId: {
handler: function(val) {
if (val != null) {
if (val) {
this.currentGroupId = val;
this.pageParam.pageNum = 1;
this.pageParam.pageNo = 1;
this.getTableList();
}
},
......@@ -505,16 +588,33 @@ export default {
};
</script>
<style>
.el-button--text + .el-dropdown {
margin-left: 15px !important;
}
</style>
<style lang="less" scoped>
.chooseGroup {
width: 452px;
}
.el-form--inline .el-form-item {
margin-right: 5px !important;
}
.damolish .el-form-item {
margin-bottom: 16px !important;
.frmbt20 {
margin-bottom: 20px !important;
margin-right: 0 !important;
float: right;
padding-right: 0 !important;
}
}
.frmbt20 {
margin-bottom: 20px !important;
margin-right: 0 !important;
float: right;
padding-right: 0 !important;
}
.ml10 {
margin-left: 10px;
}
.w160 {
width: 160px;
}
......@@ -536,12 +636,16 @@ export default {
content: '' !important;
}
.oneActCode {
height: 18px;
padding: 2px 4px;
background: #cff2f5;
border-radius: 2px;
color: #0faab6;
font-size: 12px;
}
.moreActCOde {
height: 18px;
padding: 2px 4px;
background: #dee3fc;
border-radius: 2px;
color: #2f54eb;
......@@ -598,4 +702,20 @@ export default {
// }
}
}
.s-select {
width: 196px;
.el-select-dropdown__item {
height: 57px;
padding-top: 9px;
.sname {
margin-bottom: 3px;
line-height: 20px;
font-size: 14px;
}
.scode {
line-height: 17px;
font-size: 12px;
}
}
}
</style>
<template>
<div>
<setActCode @sumbit="onSubmit">
<setActCode :actCodeData="form" @sumbit="onSubmit" ref="setActCodePage">
<template #typeCode>
<el-form-item label="活码类型" :rules="[{ required: true, message: '请选择活码类型', trigger: 'blur' }]">
<el-radio-group v-model="form.hmType">
......@@ -9,14 +9,14 @@
</el-form-item>
</template>
<template #member>
<el-form-item label="使用成员" :rules="[{ required: true, message: '请选择使用成员', trigger: 'blur' }]">
<el-form-item label="关联导购" :rules="[{ required: true, message: '请选择使用成员', trigger: 'blur' }]">
<el-radio-group v-model="memberType" @change="radioChange">
<el-radio :label="1">全部成员</el-radio>
<el-radio :label="2">部分成员</el-radio>
</el-radio-group>
<br />
<p v-if="memberType == 1" class="tips">当前已选择 {{ hmMemberNum }} 个成员 <span>(活码名称默认为使用成员名称)</span></p>
<select-clerk v-if="memberType == 2" :multiple="true" :data="data" @change="onChange"></select-clerk>
<select-clerk style="margin-top: 12px;" v-if="memberType == 2" :is-simple="true" :multiple="true" :data="form.clerkList" @change="onChange"></select-clerk>
</el-form-item>
</template>
</setActCode>
......@@ -31,17 +31,23 @@ export default {
components: { setActCode, SelectClerk },
data() {
return {
hmMemberNum: 1,
hmMemberNum: 0,
form: {
hmId: '',
hmGroupId: '',
passFlag: 1,
welcomeId: '',
hmType: 1,
// name: '',
clerkIdList: [],
hmUserNum: null
name: '',
memberLabelId: '',
memberLabelName: '',
memberLabelStatus: -1,
clerkList: [],
welcomeType: 1,
hmUserNum: null //多人活码人数
},
memberType: 1,
data: [],
storeClerkList: []
memberType: 1
};
},
created() {
......@@ -50,41 +56,40 @@ export default {
methods: {
radioChange(e) {
if (e == 1) {
this.form.clerkIdList = ['-1'];
this.data = [];
this.form.hmUserNum = this.hmMemberNum;
this.form.clerkList = [];
this.form.hmUserNum = 0;
}
},
getClerkNum() {
getRequest('/haoban-manage3-web/hm/qrcode/getAddCount', {}).then(res => {
if (res.data.code == 0) {
this.hmMemberNum = res.data.result || 1;
this.hmMemberNum = res.data.result || 0;
}
});
},
onChange(data) {
this.data = data;
this.form.clerkIdList = data;
this.form.clerkList = data;
this.form.hmUserNum = data.length;
},
async onSubmit(event) {
onSubmit(event) {
if (this.memberType == 1) {
this.form.clerkIdList = ['-1'];
this.form.hmUserNum = this.hmMemberNum;
} else {
this.form.clerkIdList = this.form.clerkList.map(el => el.clerkId);
}
let obj = {
...event,
...this.form
};
await postJsonRequest('/haoban-manage3-web/hm/qrcode/addList', obj).then(res => {
postJsonRequest('/haoban-manage3-web/hm/qrcode/addList', obj).then(res => {
if (res.data.code == 0) {
this.form = {
hmType: 1,
clerkIdList: [],
hmUserNum: null //多人活码人数
};
this.$router.go(-1);
setTimeout(() => {
this.$refs.setActCodePage.saveLoading = false;
this.$router.go(-1);
}, 1000);
} else {
this.$refs.setActCodePage.saveLoading = false;
return this.$message.error(res.data.message);
}
});
......@@ -103,6 +108,8 @@ export default {
}
.tips {
color: #303133;
margin-top: 12px;
font-size: 14px;
span {
color: #909399;
}
......
......@@ -12,10 +12,10 @@
<span :title="listItem.groupName" class="listItemName overflow-ellipsis">{{ listItem.groupName }}</span>
<span>{{ `(${listItem.referNum})` }}</span>
</div>
<el-popover placement="bottom" trigger="click" v-if="isShowGroupListItemMore(listItem)">
<el-popover placement="bottom" trigger="hover" v-if="isShowGroupListItemMore(listItem)">
<p class="more" @click="editGroupListItem(listItem)">编辑</p>
<p class="more" @click="delGroupListItem(listItem)" v-if="!listItem.referNum">删除</p>
<i slot="reference" class="iconfont-hb3 icongengduo icon iconhover" v-if="listItem.groupName != '全部分组' && listItem.groupName != '默认分组'"></i>
<i slot="reference" class="iconfont-hb3 icongengduo3 icon iconhover" v-if="listItem.groupName != '全部分组' && listItem.groupName != '默认分组'"></i>
</el-popover>
</li>
<li>
......@@ -34,8 +34,9 @@
<el-form :model="groupListForm" :rules="groupListFormRules" ref="groupListForm">
<el-form-item label="分组名称" prop="groupName">
<el-input placeholder="请输入分组名称" v-model="groupListForm.groupName" :maxlength="10" show-word-limit clearable></el-input>
<p class="addGroupTip" v-show="!isEditGroup">分组名称不可重复,建议"创建人姓名-分组名称"</p>
</el-form-item>
<p class="addGroupTip" v-show="!isEditGroup">分组名称不可重复,建议"创建人姓名-分组名称"</p>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addOrEditGroupDialog = false"> </el-button>
......@@ -71,7 +72,7 @@ export default {
return {
searchTip: false,
groupLoading: false,
currentListItemUuid: 1,
currentListItemUuid: -1,
groupList: [],
scrollLoad: false,
title: '新增分组',
......@@ -92,7 +93,7 @@ export default {
pageP: {
groupName: '',
pageNum: 1,
pageSize: 20
pageSize: 40
},
checkNameLength: -1,
editNamePre: ''
......@@ -101,6 +102,9 @@ export default {
created() {
this.searchGroup();
},
activated() {
this.searchGroup();
},
methods: {
onSearch() {
this.pageP.pageNum = 1;
......@@ -151,8 +155,8 @@ export default {
})
.then(() => {
// 删除操作
// const listItemIndex = this.groupList.findIndex(item => item.groupId === listItem.groupId);
// if (listItemIndex < 0) return;
const listItemIndex = this.groupList.findIndex(item => item.groupId === listItem.groupId);
if (listItemIndex < 0) return;
let params = {
groupId: listItem.groupId
};
......@@ -163,6 +167,11 @@ export default {
message: '删除成功!'
});
// this.groupList.splice(listItemIndex, 1);
if (this.currentListItemUuid == listItem.groupId) {
this.pageP.pageNum = 1;
this.currentListItemUuid = -1;
this.$emit('updateList', this.currentListItemUuid);
}
this.pageP.pageNum = 1;
this.searchGroup();
}
......@@ -176,7 +185,7 @@ export default {
// 用来接收编辑或者新增后的返回结果
let res = {};
let resSucTip = `${this.isEditGroup ? '修改' : '新增'}成功`;
let resErTip = `${this.isEditGroup ? '修改' : '新增'}失败`;
// let resErTip = `${this.isEditGroup ? '修改' : '新增'}失败`;
if (this.isEditGroup) {
let obj = {
groupId: this.groupListForm.groupId,
......@@ -198,17 +207,14 @@ export default {
if (this.isEditGroup) {
const groupListItem = this.groupList.find(({ groupId }) => groupId == this.groupListForm.groupId);
groupListItem.groupName = this.groupListForm.groupName;
} else {
// this.pageP.pageNum = 1;
// this.searchGroup();
}
this.pageP.pageNum = 1;
this.searchGroup();
this.addOrEditGroupDialog = false;
} else {
this.$message({
type: 'error',
message: resErTip
type: 'warning',
message: res.data.message
});
}
}
......@@ -222,7 +228,7 @@ export default {
{
groupName: '全部分组',
referNum: '',
groupId: null
groupId: '-1'
}
];
this.groupList[0].referNum = countNum.data.result;
......@@ -239,7 +245,6 @@ export default {
if (this.pageP.groupName == '') {
this.searchTip = false;
} else if (this.pageP.groupName != '') {
// this.groupList.splice(0, 1);
if (this.groupList.length <= 0) {
this.searchTip = true;
}
......@@ -279,6 +284,14 @@ export default {
justify-content: space-between;
align-items: center;
padding: 0 5px 0 10px;
.iconhover,
.el-popover__reference {
display: inline-block;
width: 20px;
height: 20px;
line-height: 20px;
text-align: center;
}
&:hover {
color: #303133;
background: #f2f3f5;
......@@ -286,11 +299,15 @@ export default {
&.active-li {
color: #2f54eb;
background: #ebeffe;
.iconhover:hover,
.iconhover:active {
.iconhover:hover {
background: #d8defc;
border-radius: 2px;
}
}
.iconhover:hover {
background: #e5e6eb;
border-radius: 2px;
}
}
.more {
line-height: 26px;
......
<template>
<div>
<setActCode @sumbit="onSubmit" :actCodeData="detailCode">
<setActCode ref="setActCodePage" :actCodeData="form" @sumbit="onSubmit">
<template #typeCode>
<el-form-item label="活码类型" :rules="[{ required: true, message: '请选择活码类型', trigger: 'blur' }]">
<el-radio-group v-model="form.hmType" @change="changeEvent">
<el-radio-group v-model="form.hmType" @change="onTypeChange" :disabled="!!form.hmId">
<el-radio :label="1">单人活码</el-radio>
<el-radio :label="2">多人活码</el-radio>
</el-radio-group>
</el-form-item>
</template>
<template #codeName>
<el-form-item label="活码名称" :rules="[{ required: true, message: '请输入活码名称', trigger: 'blur' }]">
<el-form-item label="活码名称" prop="name" :rules="[{ required: true, message: '请输入活码名称', trigger: 'blur' }]">
<el-input class="w340" v-model="form.name" placeholder="请输入活码名称,默认使用成员名称" maxlength="20" show-word-limit></el-input>
</el-form-item>
</template>
<template #member>
<el-form-item label="使用成员" :rules="[{ required: true, message: '请选择使用成员', trigger: 'blur' }]">
<el-form-item label="关联导购" prop="clerkList" :rules="[{ required: true, message: '请选择使用成员', trigger: 'blur' }]">
<p class="tabs" v-if="form.hmType == 1">单人活码仅可选择一名成员</p>
<p class="tabs" v-if="form.hmType == 2">若选择多名成员,则随机分配企微员工</p>
<select-clerk :multiple="multiple" :data="data" @change="onChange"></select-clerk>
<select-clerk :is-simple="form.hmType == 1" :multiple="form.hmType == 2" :data="form.clerkList" @change="onChange" :disabled="form.hmType == 1 && !!form.hmId"></select-clerk>
</el-form-item>
</template>
</setActCode>
......@@ -34,96 +34,93 @@ export default {
return {
loading: false,
form: {
hmId: '',
hmGroupId: '',
passFlag: 1,
welcomeId: '',
hmType: 1,
name: '',
clerkIdList: [],
memberLabelId: '',
memberLabelName: '',
memberLabelStatus: -1,
clerkList: [],
welcomeType: 1,
hmUserNum: null //多人活码人数
},
multiple: false,
data: [],
dataArr: [],
detailCode: []
}
};
},
created() {
if (this.$route.query.hmId) {
this.form.hmId = this.$route.query.hmId;
this.getActCodeInfo();
}
},
methods: {
changeEvent(e) {
this.data = [];
this.dataArr = [];
if (e == 2) {
this.multiple = true;
} else if (e == 1) {
this.multiple = false;
}
onTypeChange() {
this.form.name = '';
this.form.clerkList = [];
this.form.hmUserNum = 0;
},
onChange(data) {
this.data = data;
this.form.hmUserNum = data.length;
this.form.clerkIdList = data.map(item => {
return item.clerkId;
});
this.dataArr = data.map(item => {
return item.clerkName;
});
this.form.clerkList = data;
if (this.form.name == '') {
this.form.name = this.dataArr.toString();
this.form.name = data
.map(el => el.clerkName)
.toString()
.slice(0, 20);
}
this.$nextTick(() => {
this.$refs.setActCodePage.getForm().validateField(['name', 'clerkList']);
});
},
async getActCodeInfo() {
const that = this;
that.loading = true;
if (this.$route.query.hmId) {
await getRequest('/haoban-manage3-web/hm/qrcode/detail', { hmId: this.$route.query.hmId }).then(res => {
this.detailCode = res.data.result;
this.form.hmType = this.detailCode.hmType;
this.form.name = this.detailCode.name;
this.form.clerkIdList = this.detailCode.clerkList.map(i => i.clerkId);
this.form.hmUserNum = this.form.clerkIdList.length;
this.data = this.detailCode.clerkList;
that.loading = false;
});
}
getActCodeInfo() {
this.loading = true;
getRequest('/haoban-manage3-web/hm/qrcode/detail', { hmId: this.form.hmId })
.then(res => {
this.form = res.data.result;
if (this.form.welcomeId) {
this.form.welcomeType = 1;
} else {
this.form.welcomeType = 2;
}
this.form.hmUserNum = this.form.clerkList.length;
})
.finally(() => (this.loading = false));
},
async onSubmit(event) {
onSubmit(event) {
let obj = {
...event,
...this.form
};
if (this.$route.query.hmId) {
obj = {
...obj,
hmId: this.$route.query.hmId
};
obj.clerkIdList = obj.clerkList.map(el => el.clerkId);
if (this.form.hmId) {
// 编辑
await postJsonRequest('/haoban-manage3-web/hm/qrcode/update', obj).then(res => {
postJsonRequest('/haoban-manage3-web/hm/qrcode/update', obj).then(res => {
if (res.data.code == 0) {
this.form = {
hmType: 1,
name: '',
clerkIdList: [],
hmUserNum: null //多人活码人数
};
this.$router.go(-1);
setTimeout(() => {
this.$router.go(-1);
this.$refs.setActCodePage.btnLoading = false;
this.$refs.setActCodePage.saveLoading = false;
}, 1000);
} else {
this.$refs.setActCodePage.btnLoading = false;
this.$refs.setActCodePage.saveLoading = false;
return this.$message.error(res.data.message);
}
});
} else {
// 新增
await postJsonRequest('/haoban-manage3-web/hm/qrcode/add', obj).then(res => {
postJsonRequest('/haoban-manage3-web/hm/qrcode/add', obj).then(res => {
if (res.data.code == 0) {
this.form = {
hmType: 1,
name: '',
clerkIdList: [],
hmUserNum: null //多人活码人数
};
this.$router.go(-1);
setTimeout(() => {
this.$refs.setActCodePage.btnLoading = false;
this.$refs.setActCodePage.saveLoading = false;
this.$router.go(-1);
}, 1000);
} else {
this.$refs.setActCodePage.btnLoading = false;
this.$refs.setActCodePage.saveLoading = false;
return this.$message.error(res.data.message);
}
});
......@@ -140,4 +137,8 @@ export default {
.w340 {
width: 340px;
}
.tabs {
font-size: 12px;
color: #909399;
}
</style>
<template>
<div>
<div class="m20 formBox">
<div class="m20 formBox" v-loading="saveLoading">
<dm-sub-title text="基础信息" type="line" />
<el-form class="mt20" ref="form" :model="form" :rules="rules" label-width="110px">
<slot name="typeCode"></slot>
<slot name="codeName"></slot>
<el-form-item label="活码分组" prop="hmGroupId">
<el-select class="w340" v-model="form.hmGroupId" v-loadmore="onLoadmore" clearable remote filterable :remote-method="remoteMethod">
<el-form-item label="活码分组" prop="hmGroupId" class="code-group">
<el-select class="w340" v-model="form.hmGroupId" v-loadmore="onLoadmore" clearable filterable :filter-method="remoteMethod" @visible-change="visibleChange" @change="$refs.form.validateField('hmGroupId')">
<el-option v-for="item in groupList" :key="item.groupId" :label="item.groupName" :value="item.groupId"></el-option>
</el-select>
</el-form-item>
<slot name="member"></slot>
<el-form-item label="自动通过好友">
<el-switch v-model="form.passFlag" class="mr15"></el-switch>
<el-switch v-model="form.passFlag" :active-value="1" :inactive-value="0" class="mr15"></el-switch>
<span class="tabs">开启后,客户添加该企业微信时,无需好友验证,将会自动添加成功</span>
</el-form-item>
<el-form-item label="活码标签">
<el-button plain class="ylbtn" @click="tagsDialogVisible = true"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加标签</el-button>
<dm-memberTag-group :visiable.sync="tagsDialogVisible" projectName="haobao-3" @save="saveTagPop"></dm-memberTag-group>
<el-form-item label="活码标签" prop="memberLabelId" class="memberTag-form-item">
<el-button v-if="!form.memberLabelId" plain class="ylbtn" @click="tagsDialogVisible = true">
<i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>
添加标签
</el-button>
<el-tooltip :disabled="form.hmId && form.memberLabelStatus != 0" content="已删除" placement="top" v-else>
<el-tag closable @close="handleTagCloseTag" :type="form.hmId && form.memberLabelStatus == 0 ? 'warning' : ''">{{ form.memberLabelName }}</el-tag>
</el-tooltip>
<dm-memberTag-group isHb :visiable.sync="tagsDialogVisible" projectName="haobao-3" @save="saveTagPop"></dm-memberTag-group>
</el-form-item>
<dm-sub-title text="欢迎语设置" type="line" class="mt40b20" />
<welcomeItem @getWelcomeId="getWelcomeId" :welcomeIdP="form.welcomeId" ref="welcomeItem"></welcomeItem>
<welcomeItem @getWelcomeId="getWelcomeId" :welcomeId.sync="form.welcomeId" ref="welcomeItem" :welcomeType.sync="form.welcomeType" welcomeName="code"></welcomeItem>
</el-form>
</div>
<div class="saveBtn">
<el-button type="primary" @click="save">保存</el-button>
<el-button type="primary" @click="save" :loading="saveLoading">保存</el-button>
</div>
</div>
</template>
......@@ -56,16 +62,20 @@ export default {
},
data() {
return {
saveLoading: false,
form: {
// hmType: 1, //1单人 2多人
// name: '', // 名称
hmGroupId: '', //活码分组id
passFlag: true, // 1自动通过 0否
memberLabelId: 'fd6b44967aa647bcadfad10706244c56', //会员活动标签id
welcomeId: '' // 欢迎语id
// hmGroupId: '', //活码分组id
// passFlag: true, // 1自动通过 0否
// memberLabelId: '', //会员活动标签id
// memberLabelName: '',
// welcomeId: '', // 欢迎语id
// clerkIdList: '', // 选择导购id
// storeId: '' //门店id
// hmUserNum: null //多人活码人数
// memberLabelStatus: -1,
// welcomeType: 1
},
rules: {
hmGroupId: [{ required: true, message: '请选择活码分组', trigger: 'blur' }]
......@@ -79,33 +89,40 @@ export default {
},
total: 1,
groupList: [],
data: ''
groupList: []
};
},
created() {
this.searchGroup();
},
methods: {
getForm() {
return this.$refs.form;
},
handleTagCloseTag() {
this.form.memberLabelName = '';
this.form.memberLabelId = '';
},
saveTagPop(data) {
this.data = data;
const { tagItemId, tagItemName } = data;
this.form.memberLabelId = tagItemId;
this.form.memberLabelName = tagItemName;
this.form.memberLabelStatus = 1;
},
onLoadmore() {
if (this.pageParam.pageNum >= this.total) return;
this.pageParam.pageNum++;
this.searchGroup();
},
async searchGroup() {
searchGroup() {
if (this.pageParam.pageNum == 1) {
this.groupList = [];
}
await getRequest('/haoban-manage3-web/hm/group/list', this.pageParam).then(res => {
getRequest('/haoban-manage3-web/hm/group/list', this.pageParam).then(res => {
if (res.data.code == 0) {
const { result, pages } = res.data.result || {};
this.total = pages || 1;
if (this.pageParam.groupName != '') {
this.groupList = result;
} else if (Array.isArray(result)) {
if (Array.isArray(result)) {
this.groupList = this.groupList.concat(result);
}
}
......@@ -113,14 +130,10 @@ export default {
},
// 远程搜索
remoteMethod(query) {
if (query !== '') {
this.pageParam.groupName = query;
this.pageParam.pageNum = 1;
this.groupList = [];
this.searchGroup();
} else {
this.groupList = [];
}
this.pageParam.groupName = query;
this.pageParam.pageNum = 1;
this.groupList = [];
this.searchGroup();
},
visibleChange(e) {
if (!e) {
......@@ -132,12 +145,35 @@ export default {
},
// 保存按钮
save() {
if (!this.$refs.welcomeItem.submit()) {
if (this.form.memberLabelId && this.form.memberLabelStatus == 0) {
this.$confirm('关联的标签在GIC中已被删除,无法统计和查看添加好友客户数据,为确保后续客户数据统计,请重新关联标签', '关联的标签已被删除,请重新关联标签', {
confirmButtonText: '选择标签',
cancelButtonText: '取消',
type: 'warning'
}).then(res => {
this.form.memberLabelId = '';
this.form.memberLabelName = '';
this.$nextTick(_ => {
const isError = document.getElementsByClassName('memberTag-form-item');
isError[0].scrollIntoView({
block: 'center',
behavior: 'smooth'
});
});
});
return;
}
if (this.form.welcomeType == 2) {
this.form.welcomeId = '';
}
this.$refs.form.validate(async valid => {
if (!this.$refs.welcomeItem.submit()) {
return;
}
if (valid) {
this.form.passFlag = this.form.passFlag ? 1 : 0;
// this.form.passFlag = this.form.passFlag ? 1 : 0;
this.saveLoading = true;
// delete this.form.welcomeType;
this.$emit('sumbit', this.form);
}
});
......@@ -145,24 +181,42 @@ export default {
},
watch: {
actCodeData: {
deep: true,
immediate: true,
handler: function(val) {
this.form = val;
if (val) {
this.form.hmGroupId = val.hmGroupId;
this.form.passFlag = val.passFlag == 1 ? true : false;
this.form.memberLabelId = val.memberLabelId ? val.memberLabelId : '';
this.form.welcomeId = val.welcomeId;
// this.form.hmGroupId = val.hmGroupId;
// this.form.passFlag = val.passFlag == 1 ? true : false;
// this.form.memberLabelId = val.memberLabelId ? val.memberLabelId : '';
// this.form.memberLabelName = val.memberLabelName ? val.memberLabelName : '';
// this.welcomeType = this.form.welcomeType;
// this.form.welcomeId = val.welcomeId;
// if (this.form.welcomeId) {
// this.welcomeType = 1;
// } else {
// this.welcomeType = 2;
// }
}
},
immediate: true,
deep: true
}
}
}
};
</script>
<style lang="less" scoped>
/deep/ .is-error.code-group {
.el-icon-circle-close {
display: none !important;
}
}
/deep/ .is-success.code-group {
.el-icon-circle-check {
display: none !important;
}
}
/deep/ .el-table__body-wrapper .el-table__row .cell {
padding-left: 10px !important;
line-height: 14px;
// line-height: 16px;
}
.m20 {
margin: 20px;
......
......@@ -34,19 +34,19 @@
<div v-if="type == 'actCode'">
<div class="title flex">
<div class="blue-block"></div>
<span class="font-w-500 color-303133">使用成员</span>
<span class="font-w-500 color-303133">关联导购</span>
</div>
<el-table ref="useMemberTableRef" v-loading="loading" :data="useMemberData" tooltip-effect="dark">
<el-table-column prop="" label="导购信息" show-overflow-tooltip min-width="185px">
<template slot-scope="scope">
<p class="line-20 text-ellipsis">{{ scope.row.clerkName }}</p>
<p class="color-606266 line-18 text-ellipsis font-12">{{ scope.row.clerkCode }}</p>
<p class="line-20 text-ellipsis">{{ scope.row.clerkName || '--' }}</p>
<p class="color-606266 line-18 text-ellipsis font-12">code:{{ scope.row.clerkCode || '--' }}</p>
</template>
</el-table-column>
<el-table-column prop="" label="导购所属门店" show-overflow-tooltip min-width="185px">
<template slot-scope="scope">
<p class="line-20 text-ellipsis">{{ scope.row.storeName }}</p>
<p class="color-606266 line-18 text-ellipsis font-12">{{ scope.row.storeCode }}</p>
<p class="line-20 text-ellipsis">{{ scope.row.storeName || '--' }}</p>
<p class="color-606266 line-18 text-ellipsis font-12">code:{{ scope.row.storeCode || '--' }}</p>
</template>
</el-table-column>
<el-table-column prop="" label="企微号" show-overflow-tooltip min-width="185px">
......@@ -173,7 +173,6 @@ export default {
if (resData.code == 0) {
that.total = resData.result.totalCount || 0;
that.useMemberData = resData.result.result || [];
// that.total = resData.result.pageInfo ? resData.result.pageInfo.total : 0;
return;
}
errMsg.errorMsg(resData);
......@@ -196,9 +195,15 @@ export default {
watch: {
welcomeId: function(newData, oldData) {
const that = this;
if (!newData || newData.length <= 0) return;
if (!newData || newData.length <= 0) {
this.welcomeData = null;
return;
}
that.welcomeId = newData || '';
that.getwelcomeInfo();
},
useMemberData: function(newData, oldData) {
this.$emit('useMemberList', newData);
}
}
};
......
......@@ -2,38 +2,38 @@
<div>
<el-row>
<div class="leftBox">
<el-input class="w260 mr10" placeholder="请输入门店名称/code" v-model="pageParam.storeSelect" prefix-icon="el-icon-search"></el-input>
<el-input class="w260 mr10" placeholder="请输入导购名称/code" v-model="pageParam.clerkSelect" prefix-icon="el-icon-search"></el-input>
<el-input class="w260 mr10" placeholder="请输入门店名称/code" v-model="pageParam.inFields.storeSelect" @keyup.native="value => toInput(value, searchInput)" prefix-icon="el-icon-search" clearable @clear="getChartList"></el-input>
<el-input class="w260 mr10" placeholder="请输入导购名称/code" v-model="pageParam.inFields.clerkSelect" @keyup.native="value => toInput(value, searchInput)" prefix-icon="el-icon-search" clearable @clear="getChartList"></el-input>
</div>
<div class="rightBox">
<ul class="datebox" v-for="(lis, index) in dateLis" :key="lis.key">
<li :class="active == index ? 'activeClass' : 'noActive'" class="dateLisBox" @click="btnChange(index)">{{ lis.value }}</li>
<li :class="dateKey == index ? 'activeClass' : 'noActive'" class="dateLisBox" @click="btnChange(index)">{{ lis.value }}</li>
</ul>
<el-date-picker class="w256" v-model="dateDefault" type="daterange" range-separator="~" start-placeholder="创建开始日期" end-placeholder="创建结束日期" :default-time="['00:00:00', '23:59:59']" value-format="yyyy-MM-dd" :picker-options="pickerOptions()" @change="onDateChange"> </el-date-picker>
<el-date-picker class="w256" v-model="dateDefault" type="daterange" range-separator="~" start-placeholder="创建开始日期" end-placeholder="创建结束日期" :default-time="['00:00:00', '23:59:59']" value-format="yyyy-MM-dd" :format="[2, 3, 4].includes(dateKey) ? 'yyyy-MM' : 'yyyy-MM-dd'" :picker-options="pickerOptions()" @change="onDateChange" :clearable="false"> </el-date-picker>
</div>
</el-row>
<el-table class="mt18" :data="tableData" @sort-change="sortChange">
<el-table-column label="导购信息">
<el-table-column label="导购信息" show-overflow-tooltip>
<template slot-scope="{ row }">
<p class="overflow-ellipsis" :title="row.clerkName">{{ row.clerkName }}</p>
<p>{{ row.clerkCode }}</p>
<p class="textCode overflow-ellipsis">code:{{ row.clerkCode }}</p>
</template>
</el-table-column>
<el-table-column label="导购所属门店">
<el-table-column label="导购所属门店" show-overflow-tooltip>
<template slot-scope="{ row }">
<p class="overflow-ellipsis" :title="row.storeName">{{ row.storeName ? row.storeName : '--' }}</p>
<p>{{ row.storeCode ? row.storeCode : '--' }}</p>
<p class="textCode overflow-ellipsis">code:{{ row.storeCode ? row.storeCode : '--' }}</p>
</template>
</el-table-column>
<el-table-column label="企微号">
<template slot-scope="{ row }">
<p class="overflow-ellipsis" :title="row.staffName">{{ row.staffName }}</p>
<!-- <p>{{ row.staffCode }}</p> -->
<!-- <p class="textCode overflow-ellipsis">code:{{ row.staffCode }}</p> -->
</template>
</el-table-column>
<el-table-column label="新增总人数" prop="addNumT" sortable></el-table-column>
<el-table-column label="今日新增人数" prop="addNum" sortable></el-table-column>
<el-table-column label="今日新增人数" prop="addNum" sortable></el-table-column>
<!-- <el-table-column label="今日流失人数" prop="toadyLess" sortable></el-table-column>
<el-table-column label="流失总人数" prop="lessTotal" sortable></el-table-column> -->
<el-table-column label="今日已达上限" prop="overFlag">
......@@ -48,12 +48,17 @@
</template>
</el-table-column>
</el-table>
<dm-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageParam.pageNo" :page-sizes="[20, 40, 60, 80]" :page-size="pageParam.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalCount"> </dm-pagination>
<div class="block common-wrap__page text-right m-t-24" v-if="totalCount > 0">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="pageParam.pageNo" :page-sizes="[20, 40, 60, 80]" :page-size.sync="pageParam.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalCount"> </el-pagination>
</div>
</div>
</template>
<script>
import { detailClerkList } from '@/api/actCode.js';
import { _debounce } from '@/common/js/public';
import mixin from '../actCodeManage/components/mixin';
import { getRequest } from '@/api/api';
export default {
name: 'DateDetail',
props: {
......@@ -70,9 +75,10 @@ export default {
default: 'code'
}
},
mixins: [mixin],
data() {
return {
active: 0,
dateKey: 0,
dateLis: [
{ key: 1, value: '近7天' },
{ key: 2, value: '近30天' },
......@@ -82,13 +88,11 @@ export default {
tableData: [],
pageParam: {
inFields: {
hmId: '',
linkId: '',
startTime: '',
endTime: '',
storeSelect: '',
clerkSelect: '',
orderByField: 'addNumT desc'
orderByField: 'addNum desc'
},
pageNo: 1,
pageSize: 20
......@@ -108,7 +112,7 @@ export default {
start = new Date(`${start.getFullYear()}-${start.getMonth() + 1}-${start.getDate()}`);
let start2 = new Date(pickerMinDate);
let end = new Date();
end = new Date(`${end.getFullYear()}-${end.getMonth() + 1}-${end.getDate()} 23:59:59`);
end = new Date(`${end.getFullYear()}-${end.getMonth() + 1}-${end.getDate() + 1}`);
let end2 = new Date(pickerMinDate);
if (pickerMinDate) {
start = start.setFullYear(start.getFullYear() - 2);
......@@ -120,10 +124,11 @@ export default {
start = start.setFullYear(start.getFullYear() - 2);
end = end.getTime();
}
return time.getTime() < start || time.getTime() > end;
return time.getTime() <= start || time.getTime() >= end;
}
};
}
},
hmTypeLook: null
};
},
created() {
......@@ -131,65 +136,68 @@ export default {
this.btnChange(0);
},
methods: {
getDateRange(setEndDate) {
const start = new Date();
let end = new Date();
end = setEndDate(end);
function getDate(date) {
const result = [];
result.push(date.getFullYear());
result.push((date.getMonth() + 1).toString().padStart(2, '0'));
result.push(
date
.getDate()
.toString()
.padStart(2, '0')
);
return result.join('-');
}
// yyyy-MM-dd
return [getDate(start), getDate(end)];
},
btnChange(index) {
//把index值赋给active,点击改变样式
this.active = index;
this.dateDefault = [];
let setDate;
if (index == 0) {
// 近7天
setDate = endDate => {
endDate.setDate(endDate.getDate() - 6);
return new Date(endDate);
};
} else if (index == 1) {
// 近30天
setDate = endDate => {
endDate.setDate(endDate.getDate() - 29);
return new Date(endDate);
};
} else if (index == 2) {
// 近三个月
setDate = endDate => {
endDate.setMonth(endDate.getMonth() - 3);
endDate.setDate(endDate.getDate() + 1);
return new Date(endDate);
};
} else if (index == 3) {
// 近半年
setDate = endDate => {
endDate.setMonth(endDate.getMonth() - 6);
endDate.setDate(endDate.getDate() + 1);
return new Date(endDate);
};
}
const [start, end] = this.getDateRange(setDate);
this.dateDefault.push(end);
this.dateDefault.push(start);
this.getTableList();
},
toInput: _debounce(function(e, value) {
this.getChartList();
}, 500),
// getDateRange(setEndDate) {
// const start = new Date();
// let end = new Date();
// end = setEndDate(end);
// function getDate(date) {
// const result = [];
// result.push(date.getFullYear());
// result.push((date.getMonth() + 1).toString().padStart(2, '0'));
// result.push(
// date
// .getDate()
// .toString()
// .padStart(2, '0')
// );
// return result.join('-');
// }
// // yyyy-MM-dd
// return [getDate(start), getDate(end)];
// },
// btnChange(index) {
// //把index值赋给active,点击改变样式
// this.dateKey = index;
// this.dateDefault = [];
// let setDate;
// if (index == 0) {
// // 近7天
// setDate = endDate => {
// endDate.setDate(endDate.getDate() - 6);
// return new Date(endDate);
// };
// } else if (index == 1) {
// // 近30天
// setDate = endDate => {
// endDate.setDate(endDate.getDate() - 29);
// return new Date(endDate);
// };
// } else if (index == 2) {
// // 近三个月
// setDate = endDate => {
// endDate.setMonth(endDate.getMonth() - 3);
// endDate.setDate(endDate.getDate() + 1);
// return new Date(endDate);
// };
// } else if (index == 3) {
// // 近半年
// setDate = endDate => {
// endDate.setMonth(endDate.getMonth() - 6);
// endDate.setDate(endDate.getDate() + 1);
// return new Date(endDate);
// };
// }
// const [start, end] = this.getDateRange(setDate);
// this.dateDefault.push(end);
// this.dateDefault.push(start);
// this.getChartList();
// },
onDateChange() {
this.active = -1;
if (this.dateDefault.length) this.getTableList();
this.dateKey = -1;
if (this.dateDefault.length) this.getChartList();
},
// 当前页变化
handleCurrentChange(val) {
......@@ -200,7 +208,7 @@ export default {
handleSizeChange(val) {
this.pageParam.pageNo = 1;
this.pageParam.pageSize = val;
this.getTableList();
this.getChartList();
},
// 排序
sortChange(column) {
......@@ -208,48 +216,49 @@ export default {
that.sortColumn = column.prop;
that.sortType = column.order == 'ascending' ? 'asc' : 'desc';
this.pageParam.inFields.orderByField = `${that.sortColumn} ${that.sortType}`;
that.getTableList();
that.getChartList();
},
// 列表数据
async getTableList() {
this.pageParam.inFields.startTime = this.dateDefault ? this.dateDefault[0].toString() : '';
this.pageParam.inFields.endTime = this.dateDefault ? this.dateDefault[1].toString() : '';
if (this.$route.query.id && this.typeT == 'code') {
this.pageParam.inFields.hmId = this.$route.query.id;
delete this.pageParam.inFields.linkId;
} else if (this.$route.query.id && this.typeT == 'link') {
this.pageParam.inFields.linkId = this.$route.query.id;
delete this.pageParam.inFields.hmId;
}
if (this.pageParam.inFields.storeSelect == '') {
delete this.pageParam.inFields.storeSelect;
}
if (this.pageParam.inFields.clerkSelect == '') {
delete this.pageParam.inFields.clerkSelect;
async getChartList() {
const paras = JSON.parse(JSON.stringify(this.pageParam));
paras.inFields.startTime = this.dateDefault ? this.dateDefault[0] + ' 00:00:00' : '';
paras.inFields.endTime = this.dateDefault ? this.dateDefault[1] + ' 23:59:59' : '';
if (this.id && this.typeT == 'code') {
paras.inFields.hmId = this.id;
} else if (this.id && this.typeT == 'link') {
paras.inFields.linkId = this.id;
paras.inFields.linkSelect1 = paras.inFields.storeSelect;
paras.inFields.linkSelect2 = paras.inFields.clerkSelect;
delete paras.inFields.storeSelect;
delete paras.inFields.clerkSelect;
}
await this.api(this.pageParam).then(res => {
console.log(res);
await this.api(paras).then(res => {
if (res.data.code == 0) {
this.tableData = res.data.result.result || [];
this.totalCount = res.data.result.totalCount;
this.totalCount = res.data.result.totalCount || 0;
// this.totalCount = 1;
} else {
return this.$message(res.data.message);
}
});
},
lookRecords(row) {
if (row.hmId) {
this.$router.push(`/actCodeRecord?hmId=${row.hmId}`);
} else if (row.linkId) {
const { clerkId, linkId } = row;
const startTime = this.dateDefault && this.dateDefault.length ? this.dateDefault[0] : undefined;
const endTime = this.dateDefault && this.dateDefault.length ? this.dateDefault[1] : undefined;
let query = { linkId, clerkId };
startTime ? (query.startTime = startTime) : '';
endTime ? (query.endTime = endTime) : '';
this.$router.push({ path: '/actCodeRecord', query: query });
const { clerkId, linkId, hmId } = row;
const startTime = this.dateDefault && this.dateDefault.length ? this.dateDefault[0] + ' 00:00:00' : undefined;
const endTime = this.dateDefault && this.dateDefault.length ? this.dateDefault[1] + ' 23:59:59' : undefined;
let query = { linkId, clerkId, hmId };
startTime ? (query.startTime = startTime) : '';
endTime ? (query.endTime = endTime) : '';
if (linkId) {
this.$router.push({ path: '/attLinkRecord', query: query });
} else {
if (this.id) {
getRequest('/haoban-manage3-web/hm/qrcode/detail', { hmId: this.id }).then(res => {
this.hmTypeLook = res.data.result.hmType;
query.addChannel = this.hmTypeLook;
this.$router.push({ path: '/actCodeRecord', query: query });
});
}
}
}
}
......@@ -309,4 +318,8 @@ export default {
.el-button--text {
color: #2f54eb;
}
.textCode {
font-size: 12px;
color: #606266;
}
</style>
<template>
<div>
<el-row>
<el-col :span="17">
<el-form-item label="活码类型" @change="radioChange">
<el-radio-group v-model="welcomesType">
<el-radio :label="1">活码欢迎语</el-radio>
<el-radio :label="2">不发送欢迎语</el-radio>
</el-radio-group>
<ul class="tabs" v-if="welcomesType == 1">
<li>1.下方的欢迎语取自【设置-欢迎语设置】中的“特殊欢迎语”;</li>
<li>2.配置“活码欢迎语”后,通过此活码添加好友后,系统自动推送此处所配置的欢迎语</li>
<li>(根据企业微信规则,若所添加的该成员在企业微信后台已经配置了欢迎语,那么会推送企微后台所配置的欢迎语,不会推送此处的欢迎语)</li>
</ul>
<ul class="tabs" v-if="welcomesType == 2">
<li>通过此活码添加好友后,系统不推送欢迎语,及时在【设置-欢迎语设置】中为该成员配置了欢迎语。</li>
<li>(根据企业微信规则,若所添加的该成员在企业微信后台已经配置了欢迎语,那么企微后台的欢迎语会照常推送)</li>
</ul>
</el-form-item>
<el-form-item label="选择欢迎语" v-if="welcomesType == 1">
<div class="welcomeTable">
<div class="wtabTop">
<el-input class="w260" placeholder="请输入标题" v-model="welcomePage.title" @change="onSearch" clearable></el-input>
<el-button plain class="ylbtn" @click="changeRoute">新建欢迎语</el-button>
</div>
<el-table :data="welcomeTableData" max-height="330px">
<el-table-column width="55">
<template slot-scope="scope">
<el-radio :label="scope.$index" @change.native="getCurrentRow(scope.row)" v-model="welcome">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column prop="title" label="标题" width="158px"></el-table-column>
<el-table-column prop="welcomeContent" label="内容" show-overflow-tooltip></el-table-column>
<el-table-column label="附件" width="212px" show-overflow-tooltip>
<template slot-scope="{ row }">
<div class="enclosureBox" v-for="item in row.welcomeMediaList" :key="item.welcomeId">
<el-image class="img" :src="item.mediaUrl">
<div slot="error" class="image-slot img">
<i class="el-icon-picture-outline" style="font-size:40px;"></i>
</div>
</el-image>
<p>{{ item.mediaTitle ? item.mediaTitle : '--' }}</p>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination class="paginationBox" background @current-change="handleCurrentChange" :current-page="welcomePage.pageNum" layout=" prev, pager, next " :page-size="welcomePage.pageSize" :total="totalNum"></el-pagination>
<div class="welcomBox">
<div>
<el-form-item label="设置欢迎语">
<el-radio-group @change="radioChange" v-model="welcomeType">
<el-radio :label="1">{{ welcomeName == 'code' ? '活码' : '链接' }}欢迎语</el-radio>
<el-radio :label="2">不发送欢迎语</el-radio>
</el-radio-group>
<ul class="tabs" v-if="welcomeType == 1">
<li>1.下方的欢迎语取自【设置-欢迎语设置】中的“特殊欢迎语”;</li>
<li>
2.配置“<span>{{ welcomeName == 'code' ? '活码' : '链接' }}</span
>欢迎语”后,通过此活码添加好友后,系统自动推送此处所配置的欢迎语
</li>
<li>(根据企业微信规则,若所添加的该成员在企业微信后台已经配置了欢迎语,那么会推送企微后台所配置的欢迎语,不会推送此处的欢迎语)</li>
</ul>
<ul class="tabs" v-if="welcomeType == 2">
<li>
通过此<span>{{ welcomeName == 'code' ? '活码' : '链接' }}</span
>添加好友后,系统不推送欢迎语,即使在【设置-欢迎语设置】中为该成员配置了欢迎语。
</li>
<li>(根据企业微信规则,若所添加的该成员在企业微信后台已经配置了欢迎语,那么企微后台的欢迎语会照常推送)</li>
</ul>
</el-form-item>
<el-form-item label="选择欢迎语" v-if="welcomeType == 1">
<div class="welcomeTable">
<div class="wtabTop">
<el-input class="w260" placeholder="请输入标题" v-model="welcomePage.title" @keyup.native="toInput" clearable @clear="onSearch"></el-input>
<el-button type="primary" plain @click="changeRoute">新建欢迎语</el-button>
</div>
</el-form-item>
</el-col>
<el-col :span="7" v-if="welcomesType == 1 && welcomeContent != ''">
<p class="welcomeTitle">欢迎语预览</p>
<previewWelcome :welcomeContent="welcomeContent"></previewWelcome>
</el-col>
</el-row>
<el-table :data="welcomeTableData" max-height="300px" @row-click="getCurrentRow">
<el-table-column width="55">
<template slot-scope="{ row }">
<el-radio :label="row.welcomeId" @change.native="getCurrentRow(row)" class="hideLable" v-model="welcomeId"><i></i></el-radio>
</template>
</el-table-column>
<el-table-column prop="title" label="标题" width="158px"></el-table-column>
<el-table-column prop="welcomeContent" label="内容" show-overflow-tooltip></el-table-column>
<el-table-column label="附件" width="200px" show-overflow-tooltip>
<template slot-scope="{ row }">
<el-popover placement="top-start" trigger="hover" v-if="row.welcomeMediaList && row.welcomeMediaList.length">
<div class="flexBox" v-for="item in row.welcomeMediaList" :key="item.welcomeMediaId">
<svg-icon :iconname="iconType[item.mediaType]" size="16" style="margin-right: 13px;"> </svg-icon>
<span class="popverText">{{ item.mediaTitle }}</span>
</div>
<div slot="reference" class="flexBox" v-if="row.welcomeMediaList && row.welcomeMediaList.length">
<svg-icon :iconname="iconType[row.welcomeMediaList[0].mediaType]" size="40" style="margin-right: 10px;"> </svg-icon>
<span class="wrapText"> {{ row.welcomeMediaList[0].mediaTitle }}</span>
</div>
</el-popover>
<div v-else>--</div>
</template>
</el-table-column>
</el-table>
<el-pagination class="paginationBox" background @current-change="handleCurrentChange" :current-page="welcomePage.pageNum" layout=" prev, pager, next " :page-size="welcomePage.pageSize" :total="totalNum"></el-pagination>
</div>
</el-form-item>
</div>
<div v-if="welcomeType == 1 && welcomeContent != ''" class="phone">
<p class="welcomeTitle">欢迎语预览</p>
<previewWelcome :welcomeContent="welcomeContent" :mediaList="welcomeMediaList"></previewWelcome>
</div>
</div>
</template>
......@@ -60,40 +67,69 @@
import previewWelcome from '@/components/preview-welcome.vue';
import { postJsonRequest } from '@/api/api';
import { getRequest } from '../../../api/api';
import { _debounce } from '@/common/js/public';
export default {
name: 'welcomeItem',
components: { previewWelcome },
props: {
welcomeIdP: {
type: Object,
default: null
welcomeId: {
type: [String, Number],
default: ''
},
welcomeName: {
type: String,
default: 'code'
},
welcomeType: {
type: Number,
default: 1
}
},
data() {
return {
welcomesType: 1,
iconType: {
1: 'iconwenjianleixingtupian',
2: 'iconwenjianleixingshipin',
3: 'iconwenjianleixing-wenjian',
4: 'iconwenjianleixing-lianjie',
5: 'iconwenjianleixing-xiaochengxu', // 小程序
6: 'iconwenjianleixing-xiaochengxu', // 带参小程序
7: 'icongongzhonghao1' // 带参公众号
},
welcomeTableData: [],
welcome: '',
welcomeContent: '',
welcomeContent: '你好,<微信名称>',
welcomeMediaList: [],
// 欢迎语参数
welcomePage: {
wxEnterpriseId: sessionStorage.getItem('userInfos') ? JSON.parse(sessionStorage.getItem('userInfos')).wxEnterpriseId : '',
title: '',
type: 2,
pageNum: 1,
pageSize: 4
pageSize: 20
},
totalNum: 1,
welcomeId: '',
templateSelection: {},
currentWelcome: [],
isFlag: false
totalNum: 1
};
},
activated() {
this.onSearch();
mounted() {
this.getWelcomeTable();
document.addEventListener('visibilitychange', () => {
if (document.visibilityState == 'visible') {
this.welcomePage = {
wxEnterpriseId: sessionStorage.getItem('userInfos') ? JSON.parse(sessionStorage.getItem('userInfos')).wxEnterpriseId : '',
title: '',
type: 2,
pageNum: 1,
pageSize: 20
};
this.getWelcomeTable();
}
});
},
methods: {
toInput: _debounce(function(e, value) {
this.onSearch();
}, 500),
onSearch() {
this.welcomePage.pageNum = 1;
this.getWelcomeTable();
......@@ -101,60 +137,46 @@ export default {
// 当前页变化
handleCurrentChange(val) {
this.welcomePage.pageNum = val;
this.welcome = '';
this.getWelcomeTable();
},
// 选择欢迎语列表数据
async getWelcomeTable() {
await postJsonRequest('/haoban-manage3-web/welcome/list', this.welcomePage).then(res => {
getWelcomeTable() {
postJsonRequest('/haoban-manage3-web/welcome/list', this.welcomePage).then(res => {
this.welcomeTableData = res.data.result.result;
this.totalNum = res.data.result.totalCount;
if (this.isFlag) {
let flag = this.welcomeTableData.map(item => item.welcomeId).indexOf(this.currentWelcome.welcomeId);
let flag1 = this.welcomeTableData.map(item => item.welcomeId).includes(this.currentWelcome.welcomeId);
// if (this.welcomePage.pageNum == 1) {
if (flag1) {
this.welcome = flag;
this.welcomeContent = this.currentWelcome.welcomeContent;
} else {
// this.welcomeTableData.unshift(this.currentWelcome);
// this.welcome = 0;
this.welcomeContent = '';
}
// this.welcomeContent = this.currentWelcome.welcomeContent;
// } else if (this.welcomePage.pageNum != 1) {
// if (flag1) {
// this.welcomeTableData.splice(flag, 1);
// }
// this.welcomeContent = '';
// }
}
});
},
// 新建欢迎语
changeRoute() {
this.$router.push({ path: '/salutatorySet', query: { type: 2 } });
// let routeUrl = this.$router.resolve({ path: '/salutatorySet', query: { type: 2 } });
// window.open(routeUrl.href, '_blank');
window.open('/haoban-3/#/salutatorySet?type=2');
},
getCurrentRow(row) {
// 获取选中数据 row表示选中这一行的数据,可以从里面提取所需要的值
this.templateSelection = row;
this.welcomeContent = row.welcomeContent;
this.welcomeId = row.welcomeId;
this.$emit('getWelcomeId', this.welcomeId);
const { welcomeMediaList, welcomeContent, welcomeId } = row;
this.$emit('update:welcomeId', welcomeId);
this.welcomeContent = welcomeContent;
this.welcomeMediaList = welcomeMediaList;
},
// 单选框点击事件
radioChange(e) {
this.$emit('update:welcomeType', e);
if (e == 1) {
this.welcomeId = '';
this.$emit('getWelcomeId', this.welcomeId);
this.getWelcomeTable();
}
},
getDetail() {
getRequest('/haoban-manage3-web/welcome/get', { welcomeId: this.welcomeId, enterpriseId: sessionStorage.getItem('userInfos') ? JSON.parse(sessionStorage.getItem('userInfos')).enterpriseId : '' }).then(res => {
if (res.data.code == 0 && res.data.result) {
const { welcomeMediaList, welcomeContent } = res.data.result;
this.welcomeContent = welcomeContent;
this.welcomeMediaList = welcomeMediaList;
}
});
},
submit() {
if (this.welcomesType == 2) return true;
if (!this.welcomeId) {
this.$message.error('请选择欢迎语');
if (this.welcomeType == 2) return true;
if (this.welcomeType == 1 && !this.welcomeId) {
this.$message.warning('请选择欢迎语');
return false;
} else {
return true;
......@@ -162,29 +184,21 @@ export default {
}
},
watch: {
welcomeIdP: {
welcomeId: {
handler: async function(val) {
if (val) {
this.welcomesType = 1;
this.welcomeId = val;
await getRequest('/haoban-manage3-web/welcome/get', { welcomeId: this.welcomeId, enterpriseId: sessionStorage.getItem('userInfos') ? JSON.parse(sessionStorage.getItem('userInfos')).enterpriseId : '' }).then(res => {
if (res.data.code == 0) {
this.currentWelcome = res.data.result || [];
this.isFlag = true;
this.getWelcomeTable();
}
});
} else {
this.welcomesType = 2;
this.getDetail();
}
},
immediate: true,
deep: true
immediate: true
}
}
};
</script>
<style lang="less" scoped>
.welcomBox {
display: flex;
}
.m20 {
margin: 20px;
}
......@@ -211,21 +225,20 @@ export default {
line-height: 19px;
}
}
.ylbtn {
border: 1px solid #2f54eb;
color: #2f54eb;
}
.addPic {
font-size: 14px;
padding-right: 4px;
}
.welcomeTitle {
text-align: center;
// text-align: center;
margin-left: 118px;
margin-bottom: 26px;
margin-top: 6px;
font-weight: 500;
color: #303133;
font-size: 14px;
font-family: PingFangSC-Medium, PingFang SC;
}
.welcomeTable {
width: 720px;
......@@ -238,28 +251,47 @@ export default {
display: flex;
justify-content: space-between;
margin-bottom: 12px;
.blueBtn {
font-size: 14px;
height: 32px;
}
}
.paginationBox {
position: absolute;
right: 7px;
bottom: 0;
margin-top: 46px;
margin-right: -4px;
margin-right: 6px;
}
.enclosureBox {
display: flex;
align-items: center;
.img {
width: 40px;
height: 40px;
margin-right: 10px;
}
p {
width: 143px;
max-width: 143px;
overflow: hidden;
text-overflow: ellipsis;
}
}
.wrapText {
width: 90%;
text-align: left;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.flexBox {
display: flex;
justify-content: flex-start;
align-items: center;
.popverText {
font-size: 12px;
width: 90%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.flexBox + .flexBox {
margin-top: 10px;
}
.phone {
.iphone {
margin-left: 40px;
}
}
</style>
......@@ -93,7 +93,7 @@ import { getRequest, postExcel } from '@/api/api';
import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public';
export default {
name: 'storeList',
name: 'grStoreList',
props: {
brandId: {
type: String,
......
......@@ -287,6 +287,7 @@ body {
/* background-color: #f0f2f5; */
}
body {
overflow-y: hidden;
-webkit-text-size-adjust: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
......@@ -474,10 +475,13 @@ input:focus {
.p-t-185 {
padding-top: 185px;
}
.p-b-10{
padding-bottom: 10px;
}
.p-b-40{
padding-bottom: 40px;
}
.m-l-10 {
margin-left: 10px;
}
......@@ -515,6 +519,12 @@ input:focus {
.m-t-46 {
margin-top: 46px;
}
.m-r-6{
margin-right: 6px !important;
}
.m-r-5{
margin-right: 5px;
}
.m-r-10 {
margin-right: 10px;
}
......@@ -524,6 +534,9 @@ input:focus {
.m-r-20 {
margin-right: 20px;
}
.m-r-30 {
margin-right: 30px;
}
.m-b-10 {
margin-bottom: 10px;
}
......@@ -836,12 +849,12 @@ select:-webkit-autofill {
position: absolute;
bottom: -30px;
}
.el-form .el-form-item.is-success .el-input__inner,
/* .el-form .el-form-item.is-success .el-input__inner,
.el-form .el-form-item.is-success .el-input__inner:focus,
.el-form .el-form-item.is-success .el-textarea__inner,
.el-form .el-form-item.is-success .el-textarea__inner:focus {
border-color: #dcdfe6;
}
} */
/* 开卡模板 */
.template-cell-r .el-input.is-disabled .el-input__inner {
......@@ -1158,11 +1171,7 @@ button.el-button--primary.is-plain:focus {
background-color: #2f54ed;
border-color: #2f54ed;
}
button.el-button--danger.is-plain {
color: #F5222D;
background: #fff;
border-color: #c4c6cf;
}
/* 拖拽 */
.sortable-chosen.sortable-ghost .li-cell {
......@@ -1332,8 +1341,12 @@ button.el-button--danger.is-plain {
.material-body .el-textarea .el-textarea__inner {
height: 273px;
}
.el-input__suffix i:nth-child(2) {
/* display: none; */
.el-input .el-input__suffix i:nth-child(2) {
display: none;
}
.el-select .el-input .el-input__suffix i:nth-child(2) {
display: block;
}
.damolish .no-empty-icon-table .el-table__empty-block {
display: none;
......@@ -1440,4 +1453,20 @@ ui调整
font-size: 12px;
color: #909399;
line-height: 17px;
}
\ No newline at end of file
}
.hideLable .el-radio__label{
display: none;
}
.el-button--text+.el-dropdown{
margin-left: 20px !important;
}
.fixed-tab {
position: absolute;
top: 110px;
z-index: 20;
padding-bottom: 0;
height: 40px;
background: white;
width: calc(100% - 180px);
padding-top: 20px;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment