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 = { ...@@ -15,6 +15,13 @@ module.exports = {
'^/haoban-manage3-web': '' '^/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/': { '/api-plug/': {
target: 'https://www.gicdev.com/api-plug/', target: 'https://www.gicdev.com/api-plug/',
changeOrigin: true, changeOrigin: true,
...@@ -78,5 +85,6 @@ module.exports = { ...@@ -78,5 +85,6 @@ module.exports = {
'^/haoban-app-aggregation-web/': '' '^/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.
<<<<<<< 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 @@ ...@@ -13,7 +13,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="shortcut icon" href="./favicon.ico" /> <link rel="shortcut icon" href="./favicon.ico" />
<title>好办管理平台</title> <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--> <!--好办后台3.0-->
<!-- <link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_1628375_vcg1gtmx7lb.css" /> --> <!-- <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> <script src="//at.alicdn.com/t/font_1628375_vcg1gtmx7lb.js"></script>
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
(function() { (function() {
var src = '/component/static/import-component.js?timestrap='+ new Date().getTime(); var src = '/component/static/import-component.js?timestrap='+ new Date().getTime();
var host = window.location.host; 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>') document.write('<script src="//'+ host + src +'"><\/script>')
})() })()
</script> </script>
......
...@@ -322,6 +322,25 @@ module.exports = { ...@@ -322,6 +322,25 @@ module.exports = {
adminList: { adminList: {
// 1.刷新(按钮) // 1.刷新(按钮)
refreshAdminList: ['刷新', 1, 2] refreshAdminList: ['刷新', 1, 2]
} },
// 按钮名称、是否受权限控制0否1是、是否增删改0:跳转 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"} {"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 \ No newline at end of file
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
"vue-axios": "^2.1.1", "vue-axios": "^2.1.1",
"vue-loader": "^13.3.0", "vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1", "vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.6.6", "vue-template-compiler": "2.6.6",
"vuedraggable": "^2.23.2", "vuedraggable": "^2.23.2",
"webpack": "^3.6.0", "webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0", "webpack-bundle-analyzer": "^2.9.0",
......
...@@ -62,3 +62,15 @@ export const statisticsClerk = params => postJsonRequest('/haoban-manage3-web/hm ...@@ -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 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访问 ...@@ -18,6 +18,7 @@ Vue.axios.defaults.withCredentials = true; // cookie访问
Vue.axios.defaults.headers.common['platform'] = 'haoban'; Vue.axios.defaults.headers.common['platform'] = 'haoban';
Vue.axios.defaults.timeout = 500000; Vue.axios.defaults.timeout = 500000;
let local = window.location.origin; let local = window.location.origin;
const userInfos = JSON.parse(sessionStorage.getItem('userInfos') || '{}'); const userInfos = JSON.parse(sessionStorage.getItem('userInfos') || '{}');
let gicHost = typeof userInfos.gicHost == 'string' ? userInfos.gicHost.replace(/\/$/, '') : ''; let gicHost = typeof userInfos.gicHost == 'string' ? userInfos.gicHost.replace(/\/$/, '') : '';
...@@ -75,29 +76,36 @@ Vue.axios.interceptors.request.use( ...@@ -75,29 +76,36 @@ Vue.axios.interceptors.request.use(
Vue.axios.interceptors.response.use( Vue.axios.interceptors.response.use(
data => { data => {
removePending(data.config); //在一个ajax响应后再执行一下取消操作,把已经完成的请求从pending中移除 removePending(data.config); //在一个ajax响应后再执行一下取消操作,把已经完成的请求从pending中移除
// if (data.status && data.status == 200 && (data.data.errorCode != 1||data.data.code!=1)) { // if (data.data.hasOwnProperty('errorCode') && data.data.errorCode != 1 && data.data.errorCode != 0) {
// if (data.data.errorCode == 4) { // Message.error({ message: `${data.data.message}` });
// if (window.location.href.indexOf('gic-error') != -1) { // }
// return false; // if (data.data.hasOwnProperty('code') && data.data.code != 0) {
// } // Message.error({ message: `${data.data.message}` });
// 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.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; return data;
}, },
err => { err => {
// if (err.response.status == 502) { if (err.response.status == 502) {
// window.location.href = gicHost + '/gic-web/#/login?ishb=1'; window.location.href = gicHost + '/gic-web/#/login?ishb=1';
// Message.error({ message: '服务异常⊙﹏⊙∥' }); Message.error({ message: '服务异常⊙﹏⊙∥' });
// } }
// if (err.response.status != 403) { if (err.response.status != 403) {
// window.location.href = gicHost + '/gic-web/#/login?ishb=1'; window.location.href = gicHost + '/gic-web/#/login?ishb=1';
// Message.error({ message: '登录失效!' }); Message.error({ message: '登录失效!' });
// } }
return Promise.resolve(err); 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 @@ ...@@ -55,6 +55,36 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <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> <span class="icon iconfont-hb3">&#xebeb;</span>
<div class="name">电话</div> <div class="name">电话</div>
<div class="code-name">&amp;#xebeb;</div> <div class="code-name">&amp;#xebeb;</div>
...@@ -73,6 +103,12 @@ ...@@ -73,6 +103,12 @@
</li> </li>
<li class="dib"> <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> <span class="icon iconfont-hb3">&#xe62c;</span>
<div class="name">close</div> <div class="name">close</div>
<div class="code-name">&amp;#xe62c;</div> <div class="code-name">&amp;#xe62c;</div>
...@@ -810,9 +846,9 @@ ...@@ -810,9 +846,9 @@
<pre><code class="language-css" <pre><code class="language-css"
>@font-face { >@font-face {
font-family: 'iconfont-hb3'; font-family: 'iconfont-hb3';
src: url('iconfont.woff2?t=1657521279508') format('woff2'), src: url('iconfont.woff2?t=1659429607578') format('woff2'),
url('iconfont.woff?t=1657521279508') format('woff'), url('iconfont.woff?t=1659429607578') format('woff'),
url('iconfont.ttf?t=1657521279508') format('truetype'); url('iconfont.ttf?t=1659429607578') format('truetype');
} }
</code></pre> </code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3> <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
...@@ -839,6 +875,51 @@ ...@@ -839,6 +875,51 @@
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib"> <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> <span class="icon iconfont-hb3 icondianhua"></span>
<div class="name"> <div class="name">
电话 电话
...@@ -866,6 +947,15 @@ ...@@ -866,6 +947,15 @@
</li> </li>
<li class="dib"> <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> <span class="icon iconfont-hb3 iconclose1"></span>
<div class="name"> <div class="name">
close close
...@@ -1974,6 +2064,46 @@ ...@@ -1974,6 +2064,46 @@
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <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> <use xlink:href="#icondianhua"></use>
</svg> </svg>
<div class="name">电话</div> <div class="name">电话</div>
...@@ -1998,6 +2128,14 @@ ...@@ -1998,6 +2128,14 @@
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <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> <use xlink:href="#iconclose1"></use>
</svg> </svg>
<div class="name">close</div> <div class="name">close</div>
......
@font-face { @font-face {
font-family: "iconfont-hb3"; /* Project id 1628375 */ font-family: "iconfont-hb3"; /* Project id 1628375 */
src: url('iconfont.woff2?t=1657521279508') format('woff2'), src: url('iconfont.woff2?t=1659429607578') format('woff2'),
url('iconfont.woff?t=1657521279508') format('woff'), url('iconfont.woff?t=1659429607578') format('woff'),
url('iconfont.ttf?t=1657521279508') format('truetype'); url('iconfont.ttf?t=1659429607578') format('truetype');
} }
.iconfont-hb3 { .iconfont-hb3 {
...@@ -13,6 +13,26 @@ ...@@ -13,6 +13,26 @@
-moz-osx-font-smoothing: grayscale; -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 { .icondianhua:before {
content: "\ebeb"; content: "\ebeb";
} }
...@@ -25,6 +45,10 @@ ...@@ -25,6 +45,10 @@
content: "\ec97"; content: "\ec97";
} }
.icongengduo3:before {
content: "\ec98";
}
.iconclose1:before { .iconclose1:before {
content: "\e62c"; content: "\e62c";
} }
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -6,6 +6,41 @@ ...@@ -6,6 +6,41 @@
"description": "", "description": "",
"glyphs": [ "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", "icon_id": "25538381",
"name": "电话", "name": "电话",
"font_class": "dianhua", "font_class": "dianhua",
...@@ -27,6 +62,13 @@ ...@@ -27,6 +62,13 @@
"unicode_decimal": 60567 "unicode_decimal": 60567
}, },
{ {
"icon_id": "28687124",
"name": "更多",
"font_class": "gengduo3",
"unicode": "ec98",
"unicode_decimal": 60568
},
{
"icon_id": "1457645", "icon_id": "1457645",
"name": "close", "name": "close",
"font_class": "close1", "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 { ...@@ -387,6 +387,9 @@ export default {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
>>> .el-select .el-input .el-input__suffix i:nth-child(2){
display: none;
}
.select-search { .select-search {
width: 100%; width: 100%;
// padding: 0 10px; // padding: 0 10px;
......
...@@ -486,9 +486,6 @@ export default { ...@@ -486,9 +486,6 @@ export default {
height: 100%; height: 100%;
.daily-set-content { .daily-set-content {
padding: 20px; padding: 20px;
.table-condition-left {
font-size: 0;
}
} }
.depart-item-content { .depart-item-content {
width: 213px; width: 213px;
......
...@@ -4,15 +4,16 @@ ...@@ -4,15 +4,16 @@
<div class="links__body"> <div class="links__body">
<div class="links__body--url">{{ src }}</div> <div class="links__body--url">{{ src }}</div>
<div class="links__body--btn"> <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> </div>
<div class="link__divider"></div> <div class="link__divider"></div>
<div class="links__qr"> <div class="links__qr">
<div style="text-align:center"> <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> </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>
</div> </div>
</el-dialog> </el-dialog>
...@@ -37,6 +38,10 @@ export default { ...@@ -37,6 +38,10 @@ export default {
imageName: { imageName: {
type: String, type: String,
default: '' default: ''
},
sourceType: {
type: Boolean,
default: true
} }
}, },
data() { data() {
...@@ -60,16 +65,50 @@ export default { ...@@ -60,16 +65,50 @@ export default {
close() { close() {
this.$emit('update:show', false); this.$emit('update:show', false);
}, },
download() {
if (this.sourceType) {
this.downloadImg();
} else {
this.downloadCodeImg(this.src);
}
},
downloadImg() { downloadImg() {
const qrcode = document.getElementById('qrImg'); const qrcode = document.getElementById('qrImg');
console.log(qrcode);
let img = qrcode.getElementsByTagName('img')[0]; let img = qrcode.getElementsByTagName('img')[0];
let link = document.createElement('a'); let link = document.createElement('a');
let url = img.getAttribute('src'); let url = img.getAttribute('src');
link.setAttribute('href', url); link.setAttribute('href', url);
link.setAttribute('download', `${this.imageName}.png`); link.setAttribute('download', `${this.imageName}.png`);
link.click(); 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 { ...@@ -92,12 +131,15 @@ export default {
line-height: 1; line-height: 1;
} }
} }
.links__body--btn {
margin-bottom: 10px;
}
.links__qr { .links__qr {
padding: 22px 30px 10px 24px; padding: 22px 30px 10px 24px;
text-align: center; text-align: center;
&--btn { display: flex;
margin: 18px 0 0; flex-direction: column;
} justify-content: space-between;
} }
.link__divider { .link__divider {
margin-top: 19px; margin-top: 19px;
...@@ -122,4 +164,8 @@ export default { ...@@ -122,4 +164,8 @@ export default {
margin-right: 8px; margin-right: 8px;
} }
} }
.imgs {
width: 102px;
height: 105px;
}
</style> </style>
<template> <template>
<el-popover placement="bottom" style="min-width: 357px" v-model="departmentVisible"> <el-popover placement="bottom" v-model="departmentVisible">
<dm-simple-transfer v-model="selected" :props="props" :data="data" :item-size="66" :titles="['选择门店', '已选门店']" filterable filter-placeholder="请输入门店名称/code" @change="change"> <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 }"> <div slot-scope="{ option }">
<p>{{ option.storeName }}</p> <el-tooltip :content="option.storeName" :disabled="option.storeName.length < 10">
<p style="font-size: 12px;line-height: 18px">{{ option.storeCode }}</p> <p class="storeName">{{ option.storeName }}</p>
<p v-show="option.isOver == 1" class="isOver">所有导购今日添加已到上限</p> </el-tooltip>
<p style="font-size: 12px;line-height: 14px">{{ option.storeCode }}</p>
<p v-if="option.isOver == 1" class="isOver">所有导购今日添加已到上限</p>
</div> </div>
</dm-simple-transfer> </dm-simple-transfer>
<div class="show-select-num cursor-pointer w-250" slot="reference"> <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"
><span class="el-input__suffix-inner"><i :class="['el-select__caret el-input__icon el-icon-arrow-up', departmentVisible ? 'is-reverse' : '']"></i></span ><span class="el-input__suffix-inner"><i :class="['el-select__caret el-input__icon el-icon-arrow-up', departmentVisible ? 'is-reverse' : '']"></i></span
></span> ></span>
...@@ -26,6 +29,26 @@ export default { ...@@ -26,6 +29,26 @@ export default {
data: { data: {
type: Array, type: Array,
default: () => [] 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() { data() {
...@@ -33,20 +56,26 @@ export default { ...@@ -33,20 +56,26 @@ export default {
departmentVisible: false, departmentVisible: false,
props: { props: {
key: 'storeId', key: 'storeId',
label: 'storeName' label: 'storeName',
disabledProp: 'disabled'
} }
}; };
}, },
methods: { methods: {
change(val) { change(val) {
console.log(val);
this.$emit('change', val); this.$emit('change', val);
},
onLeftLoadMore(query) {
this.$emit('leftLoadMore', query);
} }
} }
}; };
</script> </script>
<style lang="scss" scoped> <style lang="less" scoped>
/deep/.dm-transfer-panel .transfer-panel-body {
height: calc(100% - 58px);
}
.show-select-num { .show-select-num {
position: relative; position: relative;
display: inline-block; display: inline-block;
...@@ -73,6 +102,12 @@ export default { ...@@ -73,6 +102,12 @@ export default {
} }
} }
} }
.storeName {
width: 208px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.isOver { .isOver {
font-size: 12px; font-size: 12px;
color: #fa8c16; color: #fa8c16;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="bread-menu"> <div class="bread-menu">
<span class="bread-menu-item" v-for="(el, index) in menuList" :key="el.menuCode"> <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> <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> </span>
</div> </div>
</template> </template>
...@@ -17,7 +17,8 @@ export default { ...@@ -17,7 +17,8 @@ export default {
} }
}, },
methods: { methods: {
toPage() { toPage(index) {
if (index == this.menuList.length - 1) return;
this.$router.go(-1); this.$router.go(-1);
} }
} }
......
...@@ -9,10 +9,9 @@ ...@@ -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 }"> <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> --> <!-- <router-view v-if="activeBrand" :brandId="activeBrand" :activeGroupId="activeGroup" :tabType="activeTab" @showTab="showTab"></router-view> -->
<keep-alive> <keep-alive :include="keepAlive">
<router-view :brand-id="enterpriseId" v-if="$route.meta.keepAlive"></router-view> <router-view :key="$route.path" :brand-id="enterpriseId"></router-view>
</keep-alive> </keep-alive>
<router-view v-if="!$route.meta.keepAlive" :brand-id="enterpriseId"></router-view>
</div> </div>
</div> </div>
</div> </div>
...@@ -44,6 +43,7 @@ export default { ...@@ -44,6 +43,7 @@ export default {
}, },
data() { data() {
return { return {
keepAlive: [],
showAside: true, showAside: true,
pagePaddingBottom: null, pagePaddingBottom: null,
enterpriseId: '', enterpriseId: '',
...@@ -69,8 +69,10 @@ export default { ...@@ -69,8 +69,10 @@ export default {
} }
}, },
created() { created() {
this.setKeepAlive(this.$route, {});
this.$router.beforeEach((to, from, next) => { this.$router.beforeEach((to, from, next) => {
this.activedMenu = this.getActivedMenu(this.getMenuByPath(to.path.slice(1))); this.activedMenu = this.getActivedMenu(this.getMenuByPath(to.path.slice(1)));
this.setKeepAlive(to, from);
next(); next();
}); });
provideData.layoutVm = this; provideData.layoutVm = this;
...@@ -119,6 +121,32 @@ export default { ...@@ -119,6 +121,32 @@ export default {
getMenuByPath(path) { getMenuByPath(path) {
return this.pageRight.find(el => el.regexp.test('/' + 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) { onShowLoading(loading) {
if (loading) { if (loading) {
this.fullLoading.visible = true; this.fullLoading.visible = true;
......
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
<div><img src="../../assets/data/people.png" class="m-w-46" alt="" /></div> <div><img src="../../assets/data/people.png" class="m-w-46" alt="" /></div>
<div class="m-l-20"> <div class="m-l-20">
<div class="cell-title"> <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> <span class="font-13 color-909399 cell-title-span" style="cursor: pointer;padding-bottom: 2px; ">员工总人数</span>
</el-tooltip> </el-tooltip>
</div> </div>
......
...@@ -4,15 +4,15 @@ ...@@ -4,15 +4,15 @@
<div class="content"> <div class="content">
<img :src="card.pageBackgroundImg" class="bgImg" v-if="card.pageBackgroundImg" /> <img :src="card.pageBackgroundImg" class="bgImg" v-if="card.pageBackgroundImg" />
<div class="enterpriseInfo"> <div class="enterpriseInfo">
<div class="logo"> <div class="logo" v-if="card.merchantLogo">
<img :src="card.merchantLogo" v-if="card.merchantLogo" /> <img :src="card.merchantLogo" />
</div> </div>
<div class="name">{{ card.merchantName }}</div> <div class="name">{{ card.merchantName }}</div>
</div> </div>
<div class="QRcode"></div> <div class="QRcode"></div>
<div class="leadingText">{{ card.guideComment }}</div> <div class="leadingText">{{ card.guideComment }}</div>
<div class="enterpriseNum"> <div class="enterpriseNum" v-show="card.merchantPhoneNumber">
<i class="iconfont-hb3 iconhuawushuju"></i> <i class="iconfont-hb3 icondianhua"></i>
<p>{{ card.merchantPhoneNumber }}</p> <p>{{ card.merchantPhoneNumber }}</p>
</div> </div>
</div> </div>
...@@ -67,32 +67,32 @@ export default { ...@@ -67,32 +67,32 @@ export default {
height: 543px; height: 543px;
.pageTitle { .pageTitle {
font-size: 14px; font-size: 14px;
position: sticky; position: absolute;
color: #000000; color: #000;
font-weight: 500; font-weight: 500;
top: 105px;
width: 125px; width: 125px;
margin-left: 78px; margin-left: 78px;
line-height: 20px; line-height: 20px;
display: inline-block; display: inline-block;
overflow: hidden; overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap;
text-align: center; text-align: center;
top: 44px;
} }
.content { .content {
width: 228px; width: 228px;
height: 410px; height: 437px;
box-sizing: border-box; box-sizing: border-box;
padding: 20px 16px; padding: 20px 16px;
position: absolute; position: absolute;
top: 97px; top: 70px;
left: 26px; left: 26px;
background: #ffffff; background: #ffffff;
display: flex; display: flex;
align-items: center; align-items: center;
flex-direction: column; flex-direction: column;
border-radius: 10px 10px 24px 24px; border-radius: 0 0 24px 24px;
.bgImg { .bgImg {
position: absolute; position: absolute;
width: 228px; width: 228px;
...@@ -106,11 +106,12 @@ export default { ...@@ -106,11 +106,12 @@ export default {
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
width: 100%; width: 100%;
height: 36px;
z-index: 100; z-index: 100;
.logo { .logo {
width: 36px; width: 36px;
height: 36px; height: 36px;
background: #f6f6f6;
border-radius: 60px; border-radius: 60px;
img { img {
width: 36px; width: 36px;
...@@ -132,8 +133,7 @@ export default { ...@@ -132,8 +133,7 @@ export default {
width: 176px; width: 176px;
height: 176px; height: 176px;
margin: 11px 0 16px 0; margin: 11px 0 16px 0;
background: #f6f6f6; background-image: url('../assets/QRcode.jpg');
background-image: url('../assets/QRcode.png');
background-size: 176px auto; background-size: 176px auto;
} }
.leadingText { .leadingText {
...@@ -155,7 +155,7 @@ export default { ...@@ -155,7 +155,7 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 9px 12px; padding: 9px 12px;
justify-content: center;
line-height: 14px; line-height: 14px;
color: #63666b; color: #63666b;
font-size: 12px; font-size: 12px;
......
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
<el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input> <el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input>
</el-form-item> </el-form-item>
<el-form-item label=" 封面" prop="pic"> <el-form-item label="封面" prop="pic">
<single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set" :uploadLimit="20"> </single-upload> <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> <p style="margin-top: 9px;font-size: 12px;color: #909399;line-height: 17px;">建议尺寸520*416,支持png、jpg、jpeg格式</p>
</el-form-item> </el-form-item>
</el-form> </el-form>
......
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
<el-form-item label="标题:" prop="title"> <el-form-item label="标题:" prop="title">
<el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input> <el-input show-word-limit placeholder="请输入标题" type="text" v-model="ruleForm.title" maxlength="80"></el-input>
</el-form-item> </el-form-item>
<el-form-item label=" 封面:" prop="pic"> <el-form-item label="封面:" prop="pic">
<single-upload uploadType="1" :imgSrc.sync="ruleForm.imageUrl" :field="''" class="app-set" :uploadLimit="20"> </single-upload> <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> <p style="margin-top: 9px;font-size: 12px;color: #909399;line-height: 17px;">建议尺寸520*416,支持png、jpg、jpeg格式</p>
</el-form-item> </el-form-item>
</el-form> </el-form>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<limitInput :inputWidth="440" :inputValue.sync="ruleForm.link" :holder="'请输入页面路径'" :getByType="'word'" :maxLength="100"> </limitInput> <limitInput :inputWidth="440" :inputValue.sync="ruleForm.link" :holder="'请输入页面路径'" :getByType="'word'" :maxLength="100"> </limitInput>
</el-form-item> </el-form-item>
<el-form-item label="封面" prop="imgUrl"> <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-item>
</el-form> </el-form>
</div> </div>
......
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
<limitInput :inputWidth="440" :inputValue.sync="ruleForm.materialTitle" :holder="'请输入视频标题'" :getByType="'word'" :maxLength="20"> </limitInput> <limitInput :inputWidth="440" :inputValue.sync="ruleForm.materialTitle" :holder="'请输入视频标题'" :getByType="'word'" :maxLength="20"> </limitInput>
</el-form-item> </el-form-item>
<el-form-item label="封面" prop="imgUrl"> <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>
<el-form-item label="视频" prop="link"> <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-item>
</el-form> </el-form>
</div> </div>
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<limitInput :inputWidth="440" :inputValue.sync="ruleForm.materialDesc" :holder="'请输入网页摘要'" :getByType="'word'" :maxLength="100"> </limitInput> <limitInput :inputWidth="440" :inputValue.sync="ruleForm.materialDesc" :holder="'请输入网页摘要'" :getByType="'word'" :maxLength="100"> </limitInput>
</el-form-item> </el-form-item>
<el-form-item label="封面" prop="imgUrl"> <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>
</el-form> </el-form>
</div> </div>
......
...@@ -14,31 +14,27 @@ ...@@ -14,31 +14,27 @@
</single-upload> </single-upload>
--> -->
<template> <template>
<div class="single-upload-wrap"> <div>
<el-upload class="avatar-uploader" :action="uploadUrl()" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"> <i v-if="imgSrc && showDel" class="del-icon iconfont-hb3 iconclose-circle-fill" @click="handleRemove"></i>
<img v-if="imgSrc" :src="imgSrc" class="avatar" @mouseover="showImage(imgSrc)" /> <div class="single-upload-wrap">
<video v-if="videoSrc != '' && videoFlag == false" :src="videoSrc" class="avatar">您的浏览器不支持视频播放</video> <el-upload class="avatar-uploader" :action="uploadUrl()" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
<div v-if="!imgSrc && !videoSrc"> <img v-if="imgSrc" :src="imgSrc" class="avatar" @mouseover="showImage(imgSrc)" />
<i class="iconfont-hb3 iconPlusOutlined avatar-uploader-icon"></i> <video v-if="videoSrc != '' && videoFlag == false" :src="videoSrc" class="avatar">您的浏览器不支持视频播放</video>
<p class="font-12 color-606266" style="line-height:6px;">{{ uploadType == 1 || uploadType == 2 || uploadType == 4 ? '上传图片' : '上传视频' }}</p> <div v-if="!imgSrc && !videoSrc">
</div> <i class="iconfont-hb3 iconPlusOutlined avatar-uploader-icon"></i>
<!-- <el-progress v-if="videoFlag == true" type="circle" :percentage="videoUploadPercent" style="margin-top:30px;"></el-progress> --> <p class="font-12 color-606266" style="line-height: 6px">{{ uploadType == 1 || uploadType == 2 || uploadType == 4 ? '上传图片' : '上传视频' }}</p>
</el-upload> </div>
<p v-if="uploadType == 1 && showTips" class="upload-tip color-909399 font-12"> <!-- <el-progress v-if="videoFlag == true" type="circle" :percentage="videoUploadPercent" style="margin-top:30px;"></el-progress> -->
图片支持png、jpg、jpeg格式,大小不超过2M,可上传1张 </el-upload>
</p>
<p v-if="uploadType == 2 && showTips" class="upload-tip color-909399 font-12"> <p v-if="uploadType == 1 && showTips" class="upload-tip color-909399 font-12">图片支持png、jpg、jpeg格式,大小不超过2M,可上传1张</p>
建议尺寸:160×160;支持jpg、jpeg、png格式,图片大小不超过1MB <p v-if="uploadType == 2 && showTips" class="upload-tip color-909399 font-12">建议尺寸:160×160;支持jpg、jpeg、png格式,图片大小不超过1MB</p>
</p> <p v-if="uploadType == 3 && showTips" class="upload-tip color-909399 font-12">视频支持MP4格式,大小不超过10M,上传企业微信后3天内有效</p>
<p v-if="uploadType == 3 && showTips" class="upload-tip color-909399 font-12"> <p v-if="uploadType == 4 && showTips" class="upload-tip color-909399 font-12">建议尺寸:520×416,支持png、jpg、jpeg格式,大小不超过1M</p>
视频支持MP4格式,大小不超过10M,上传企业微信后3天内有效 <!-- 图片预览 -->
</p> <!-- <vue-gic-img-preview :imgUrl="imgUrl" :imgShowFlag="imgShowFlag" @hideImage="hideImage"></vue-gic-img-preview> -->
<p v-if="uploadType == 4 && showTips" class="upload-tip color-909399 font-12"> </div>
建议尺寸:520×416,支持png、jpg、jpeg格式,大小不超过1M
</p>
<!-- 图片预览 -->
<!-- <vue-gic-img-preview :imgUrl="imgUrl" :imgShowFlag="imgShowFlag" @hideImage="hideImage"></vue-gic-img-preview> -->
</div> </div>
</template> </template>
<script> <script>
...@@ -74,11 +70,15 @@ export default { ...@@ -74,11 +70,15 @@ export default {
}, },
uploadLimit: { uploadLimit: {
type: [Number, String], type: [Number, String],
default: 2 default: '2/MB'
}, },
uploadType: { uploadType: {
type: [Number, String], type: [Number, String],
default: 1 // 1.图片 2.网页 3.视频 4小程序 default: 1 // 1.图片 2.网页 3.视频 4小程序
},
showDel: {
type: Boolean,
default: false
} }
}, },
data() { data() {
...@@ -101,6 +101,9 @@ export default { ...@@ -101,6 +101,9 @@ export default {
// that.upUrl = that.baseUrl + '/api-plug/upload-img?wxFlag=1' // that.upUrl = that.baseUrl + '/api-plug/upload-img?wxFlag=1'
}, },
methods: { methods: {
handleRemove() {
this.$emit('update:imgSrc', '');
},
/** /**
* 上传图片/视频 * 上传图片/视频
*/ */
...@@ -130,23 +133,35 @@ export default { ...@@ -130,23 +133,35 @@ export default {
/* eslint-disable */ /* eslint-disable */
beforeAvatarUpload(file) { beforeAvatarUpload(file) {
const that = this; const that = this;
// console.log(file); 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' : ''; 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 isJPG = this.imgType.includes(file.type);
const isMP4 = file.type == 'video/mp4'; const isMP4 = file.type == 'video/mp4';
const isLt2M = file.size / 1024 / 1024 < that.uploadLimit; const uploadLimit = that.uploadLimit.split('/')[0];
if ((that.uploadType == 1 || that.uploadType == 2 || that.uploadType == 4) && !isJPG) { const unit = that.uploadLimit.split('/')[1];
that.$message.error(`上传图片支持${ this.imgType.map(item=>item.split('/')[1]).join('、')}格式!`); 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) { 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) { if (that.uploadType == 3 && !isMP4) {
that.$message.error('上传视频支持MP4格式!'); that.$message.error('上传视频支持MP4格式!');
return false;
} }
if (that.uploadType == 3 && !isLt2M) { if (that.uploadType == 3 && !isLt2M) {
that.$message.error(`上传视频大小不能超过 ${that.uploadLimit}MB!`); that.$message.error(`上传视频大小不能超过 ${uploadLimit}${unit}!`);
return false;
} }
if (that.uploadType == 3) { if (that.uploadType == 3) {
return isMP4 && isLt2M; return isMP4 && isLt2M;
...@@ -196,6 +211,7 @@ export default { ...@@ -196,6 +211,7 @@ export default {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.w-500 { .w-500 {
width: 500px; width: 500px;
} }
...@@ -267,14 +283,20 @@ export default { ...@@ -267,14 +283,20 @@ export default {
.avatar-uploader-icon { .avatar-uploader-icon {
font-size: 24px; font-size: 24px;
color:#303133; color: #303133;
} }
.avatar { .avatar {
max-width: 100px; max-width: 100px;
max-height: 100px; max-height: 100px;
display: block; display: block;
} }
.del-icon{
position: absolute;
top: -13px;
left: 92px;
z-index: 2;
cursor: pointer;
}
.upload-tip { .upload-tip {
margin-top: 8px; margin-top: 8px;
font-size: 12px; font-size: 12px;
......
...@@ -24,4 +24,24 @@ const clipboard = { ...@@ -24,4 +24,24 @@ const clipboard = {
el.removeEventListener('click', el.handler); 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'; ...@@ -17,7 +17,7 @@ import directives from '@/components/utils/directives';
import './assets/font/iconfont.css' import './assets/font/iconfont.css'
import './assets/gic后台font/iconfont.css' import './assets/gic后台font/iconfont.css'
import '../static/css/index.less'; import '../static/css/index.less';
import '../theme/index.css'; // import '../theme/index.css';
import '../static/css/dialog.css'; import '../static/css/dialog.css';
import filters from './filters/index.js'; import filters from './filters/index.js';
...@@ -79,24 +79,6 @@ router.beforeEach((to, from, next) => { ...@@ -79,24 +79,6 @@ router.beforeEach((to, from, next) => {
} else { } else {
baseUrl = host; 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(); next();
}); });
......
...@@ -4,7 +4,13 @@ const attractFlowLinkRouter = [ ...@@ -4,7 +4,13 @@ const attractFlowLinkRouter = [
{ {
path: '/attractFlowLink', path: '/attractFlowLink',
name: '引流链接', 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', path: '/attractFlowLinkAdd',
...@@ -31,9 +37,26 @@ const attractFlowLinkRouter = [ ...@@ -31,9 +37,26 @@ const attractFlowLinkRouter = [
component: _import('salesleads/actCodeManage/attractFlowLink', 'info') 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', path: '/ladingPageList',
name: '落地页列表', name: '落地页列表',
component: _import('salesleads/actCodeManage/attractFlowLink/landingPage', 'list') component: _import('salesleads/actCodeManage/attractFlowLink/landingPage', 'list'),
meta: {
componentName: 'ladingPageList',
fromPath: ['/ladingPageEdit/:id']
}
}, },
{ {
path: '/ladingPageAdd', path: '/ladingPageAdd',
...@@ -50,6 +73,11 @@ const attractFlowLinkRouter = [ ...@@ -50,6 +73,11 @@ const attractFlowLinkRouter = [
type: 'edit' type: 'edit'
}, },
component: _import('salesleads/actCodeManage/attractFlowLink/landingPage', 'detail') component: _import('salesleads/actCodeManage/attractFlowLink/landingPage', 'detail')
},
{
path: '/operationLog',
name: '操作日志',
component: _import('salesleads/actCodeManage', 'operateLog')
} }
]; ];
......
...@@ -4,7 +4,11 @@ const staffActCodeRouter = [ ...@@ -4,7 +4,11 @@ const staffActCodeRouter = [
{ {
path: '/staffActCode', path: '/staffActCode',
name: '员工活码', name: '员工活码',
component: _import('salesleads/actCodeManage/staffActCode', 'index') component: _import('salesleads/actCodeManage/staffActCode', 'index'),
meta: {
componentName: 'staffActCode',
fromPath: ['/actCodeEdit', '/actCodeBatch', '/actCodeDetail', '/actCodeDetails']
}
}, },
{ {
path: '/actCodeRecord', path: '/actCodeRecord',
...@@ -13,35 +17,32 @@ const staffActCodeRouter = [ ...@@ -13,35 +17,32 @@ const staffActCodeRouter = [
}, },
{ {
path: '/actCodeDetail', path: '/actCodeDetail',
name: '活码详情', name: '活码详情-数据',
component: _import('salesleads/actCodeManage/staffActCode', 'actCodeDetail') component: _import('salesleads/actCodeManage/staffActCode', 'actCodeDetail')
}, },
{ {
path: '/actCodeAdd', path: '/actCodeDetails',
name: '新增活码', name: '活码详情-详情',
component: _import('salesleads/actCodeManage/staffActCode/views', 'setActCode'), component: _import('salesleads/actCodeManage/staffActCode', 'actCodeDetail'),
meta: { meta: {
keepAlive: true, componentName: 'actCodeDetail',
fromPath: ['/salutatorySet'] fromPath: ['/actCodeRecord']
} }
}, },
{ {
path: '/actCodeAdd',
name: '新增活码',
component: _import('salesleads/actCodeManage/staffActCode/views', 'setActCode')
},
{
path: '/actCodeEdit', path: '/actCodeEdit',
name: '编辑活码', name: '编辑活码',
component: _import('salesleads/actCodeManage/staffActCode/views', 'setActCode'), component: _import('salesleads/actCodeManage/staffActCode/views', 'setActCode')
meta: {
keepAlive: true,
fromPath: ['/salutatorySet']
}
}, },
{ {
path: '/actCodeBatch', path: '/actCodeBatch',
name: '批量创建活码', name: '批量创建活码',
component: _import('salesleads/actCodeManage/staffActCode/views', 'batchAddCode'), component: _import('salesleads/actCodeManage/staffActCode/views', 'batchAddCode')
meta: {
keepAlive: true,
fromPath: ['/salutatorySet']
}
} }
]; ];
export default staffActCodeRouter; export default staffActCodeRouter;
...@@ -100,7 +100,11 @@ export const constantRouterMap = [ ...@@ -100,7 +100,11 @@ export const constantRouterMap = [
{ {
path: '/salutatory', path: '/salutatory',
name: '欢迎语', name: '欢迎语',
component: _import('enterprise', 'salutatoryIndex') component: _import('enterprise', 'salutatoryIndex'),
meta:{
componentName: 'salutatoryIndex',
fromPath: ['/editSalutatorySet']
}
}, },
{ {
path: '/salutatorySet', path: '/salutatorySet',
...@@ -144,7 +148,7 @@ export const constantRouterMap = [ ...@@ -144,7 +148,7 @@ export const constantRouterMap = [
name: '话务任务记录', name: '话务任务记录',
component: _import('salesleads/trafficTask', 'taskRecord'), component: _import('salesleads/trafficTask', 'taskRecord'),
meta: { meta: {
keepAlive: true, componentName: 'TaskRecord',
fromPath: ['/taskDetail'] fromPath: ['/taskDetail']
} }
...@@ -174,7 +178,7 @@ export const constantRouterMap = [ ...@@ -174,7 +178,7 @@ export const constantRouterMap = [
name: '门店视图', name: '门店视图',
component: _import('salesleads/groupSend', 'grStoreList'), component: _import('salesleads/groupSend', 'grStoreList'),
meta: { meta: {
keepAlive: true, componentName: 'grStoreList',
fromPath: ['/grStoreDetail/:id'] fromPath: ['/grStoreDetail/:id']
} }
}, },
...@@ -242,7 +246,7 @@ export const constantRouterMap = [ ...@@ -242,7 +246,7 @@ export const constantRouterMap = [
name: '客户分组设置', name: '客户分组设置',
component: _import('apps/customerApp', 'memberGroupSet'), component: _import('apps/customerApp', 'memberGroupSet'),
meta: { meta: {
keepAlive: true, componentName: 'memberGroupSet',
fromPath: ['/addGroupTemplate', '/editGroupTemplate', '/storeRangeSet'] fromPath: ['/addGroupTemplate', '/editGroupTemplate', '/storeRangeSet']
} }
}, },
...@@ -353,7 +357,7 @@ export const constantRouterMap = [ ...@@ -353,7 +357,7 @@ export const constantRouterMap = [
name: '月指标任务', name: '月指标任务',
component: _import('apps/quota', 'monthTask'), component: _import('apps/quota', 'monthTask'),
meta: { meta: {
keepAlive: true, componentName: 'monthTask',
fromPath: ['/monthTaskDetail'] fromPath: ['/monthTaskDetail']
} }
}, },
......
import Vue from 'vue' import Vue from 'vue';
import Clipboard from 'clipboard' import Clipboard from 'clipboard';
function clipboardSuccess() { function clipboardSuccess() {
Vue.prototype.$message({ Vue.prototype.$message({
message: 'Copy successfully', message: 'Copy successfully',
type: 'success', type: 'success',
duration: 1500 duration: 1500
}) });
} }
function clipboardError() { function clipboardError() {
Vue.prototype.$message({ Vue.prototype.$message({
message: 'Copy failed', message: 'Copy failed',
type: 'error' type: 'error'
}) });
} }
export default function handleClipboard(text, event) { export default function handleClipboard(text, event) {
const clipboard = new Clipboard(event.target, { const clipboard = new Clipboard(event.target, {
text: () => text text: () => text
}) });
clipboard.on('success', () => { clipboard.on('success', () => {
clipboardSuccess() clipboardSuccess();
clipboard.off('error') clipboard.off('error');
clipboard.off('success') clipboard.off('success');
clipboard.destroy() clipboard.destroy();
}) });
clipboard.on('error', () => { clipboard.on('error', () => {
clipboardError() clipboardError();
clipboard.off('error') clipboard.off('error');
clipboard.off('success') clipboard.off('success');
clipboard.destroy() clipboard.destroy();
}) });
clipboard.onClick(event) clipboard.onClick(event);
} }
/*设置cookie*/ /*设置cookie*/
export function setCookie(c_name,value,expire) { export function setCookie(c_name, value, expire) {
var date=new Date(); var date = new Date();
date.setSeconds(date.getSeconds()+expire); date.setSeconds(date.getSeconds() + expire);
document.cookie = c_name + "="+ encodeURI(value)+"; expires="+date.toGMTString(); document.cookie = c_name + '=' + encodeURI(value) + '; expires=' + date.toGMTString();
} }
/*获取cookie*/ /*获取cookie*/
export function getCookie(c_name){ export function getCookie(c_name) {
if(document.cookie.length>0){ if (document.cookie.length > 0) {
var name = encodeURI(c_name); var name = encodeURI(c_name);
var allcookies = document.cookie; var allcookies = document.cookie;
name += "="; name += '=';
var pos = allcookies.indexOf(name); var pos = allcookies.indexOf(name);
if(pos != -1){ if (pos != -1) {
var start = pos + name.length; var start = pos + name.length;
var end = allcookies.indexOf(";",start); var end = allcookies.indexOf(';', start);
if(end == -1){ if (end == -1) {
end = allcookies.length; end = allcookies.length;
} }
var value = allcookies.substring(start,end); var value = allcookies.substring(start, end);
return decodeURI(value); return decodeURI(value);
} else{ } else {
return ""; return '';
} }
} }
} }
/*删除cookie*/ /*删除cookie*/
export function delCookie(c_name){ export function delCookie(c_name) {
setCookie(c_name, "", -1); setCookie(c_name, '', -1);
} }
...@@ -45,9 +45,9 @@ export function validateEmail(email) { ...@@ -45,9 +45,9 @@ export function validateEmail(email) {
* @param {Object} that vue实例 * @param {Object} that vue实例
* this.scrollToError(this); * this.scrollToError(this);
*/ */
export const scrollToError = that => { export const scrollToError = (that, className = 'is-error') => {
that.$nextTick(_ => { that.$nextTick(_ => {
const isError = document.getElementsByClassName('is-error'); const isError = document.getElementsByClassName(className);
isError[0].scrollIntoView({ isError[0].scrollIntoView({
// 滚动到指定节点 // 滚动到指定节点
// 值有start,center,end,nearest,当前显示在视图区域中间 // 值有start,center,end,nearest,当前显示在视图区域中间
......
...@@ -476,9 +476,6 @@ export default { ...@@ -476,9 +476,6 @@ export default {
.daily-set-content { .daily-set-content {
padding: 20px; padding: 20px;
box-sizing: border-box; box-sizing: border-box;
.table-condition-left {
font-size: 0;
}
} }
.depart-item-content { .depart-item-content {
width: 213px; width: 213px;
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
import MemberGroupList from './memberGroupList.vue'; import MemberGroupList from './memberGroupList.vue';
import MemberGroupSetList from './memberGroupSetList.vue'; import MemberGroupSetList from './memberGroupSetList.vue';
export default { export default {
name: 'app-detail', name: 'memberGroupSet',
components: { MemberGroupList, MemberGroupSetList }, components: { MemberGroupList, MemberGroupSetList },
props: { props: {
brandId: { brandId: {
......
...@@ -51,7 +51,7 @@ import { getRequest, postExcel } from '@/api/api'; ...@@ -51,7 +51,7 @@ import { getRequest, postExcel } from '@/api/api';
import { _debounce } from '@/common/js/public'; import { _debounce } from '@/common/js/public';
import errMsg from '@/common/js/error'; import errMsg from '@/common/js/error';
export default { export default {
name: 'reviewed', name: 'monthTask',
props: { props: {
brandId: { brandId: {
type: String, type: String,
......
...@@ -477,9 +477,7 @@ export default { ...@@ -477,9 +477,7 @@ export default {
.daily-set-content { .daily-set-content {
padding: 20px; padding: 20px;
box-sizing: border-box; box-sizing: border-box;
.table-condition-left {
font-size: 0;
}
.image-wrap { .image-wrap {
width: 40px; width: 40px;
height: 40px; height: 40px;
......
...@@ -117,6 +117,7 @@ ...@@ -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 == 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 == 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 == 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> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -10,13 +10,13 @@ ...@@ -10,13 +10,13 @@
<el-table-column prop="referName" label="关联名称" show-overflow-tooltip></el-table-column> <el-table-column prop="referName" label="关联名称" show-overflow-tooltip></el-table-column>
<el-table-column prop="type" label="类型"> <el-table-column prop="type" label="类型">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
{{ row.type == 1 ? '员工活码' : '引流链接' }} {{ row.type == 1 ? '引流链接' : '员工活码' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="status" label="状态"> <el-table-column prop="status" label="状态">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<div class="status-class"> <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> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -46,7 +46,7 @@ export default { ...@@ -46,7 +46,7 @@ export default {
total: 0, total: 0,
tableData: [], tableData: [],
relationSatusMap: { relationSatusMap: {
1: '启用', 1: '正常',
0: '删除', 0: '删除',
2: '废弃' 2: '废弃'
}, },
......
...@@ -124,9 +124,10 @@ export default { ...@@ -124,9 +124,10 @@ export default {
}; };
}, },
mounted() { mounted() {
const that = this; this.getData();
that.getData(); },
// this.getSetting(); activated() {
this.getData();
}, },
props: { props: {
type: { type: {
...@@ -187,8 +188,9 @@ export default { ...@@ -187,8 +188,9 @@ export default {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
getRequest('/haoban-manage3-web/welcome/remove', { welcomeId: row.welcomeId }).then(res => { getRequest('/haoban-manage3-web/welcome/remove', { welcomeId: row.welcomeId }).then(res => {
console.log(res);
let resData = res.data; let resData = res.data;
if (resData.code == 0 && resData.result) { if (resData.code == 0) {
this.$message.success('删除成功'); this.$message.success('删除成功');
this.getData(); this.getData();
} }
...@@ -197,16 +199,15 @@ export default { ...@@ -197,16 +199,15 @@ export default {
}, },
delType2(row) { delType2(row) {
getRequest('/haoban-manage3-web/welcome/statistics', { welcomeId: row.welcomeId }).then(res => { getRequest('/haoban-manage3-web/welcome/statistics', { welcomeId: row.welcomeId }).then(res => {
console.log(res);
const { result } = res.data; const { result } = res.data;
let str = ''; let str = '';
if (result) { if (result) {
if (result.qrCodeReferNum && result.linkReferNum) { if (result.qrCodeReferNum && result.linkReferNum) {
str = `当前模板已关联状态为正常的活码(${result.qrCodeReferNum})、链接(${result.linkReferNum}),请确认相关活码是否不再使用该欢迎语以及链接已投放结束,取消关联后才可删除该模板`; str = `当前欢迎语已关联状态为正常的活码(${result.qrCodeReferNum})、链接(${result.linkReferNum}),请确认相关活码是否不再使用该欢迎语以及链接已投放结束,解除关联后才可删除该模板`;
} else if (result.qrCodeReferNum) { } else if (result.qrCodeReferNum) {
str = `当前模板已关联状态为正常的活码(${result.qrCodeReferNum}),请确认相关活码是否不再使用该欢迎语,取消关联后才可删除该模板`; str = `当前欢迎语已关联状态为正常的活码(${result.qrCodeReferNum}),请确认相关活码是否不再使用该欢迎语,解除关联后才可删除该模板`;
} else if (result.linkReferNum) { } else if (result.linkReferNum) {
str = `当前模板已关联链接(${result.linkReferNum}),请确认相关链接已投放结束,取消关联后才可删除该模板`; str = `当前欢迎语已关联链接(${result.linkReferNum}),请确认相关链接已投放结束,解除关联后才可删除该模板`;
} }
this.$confirm(str, '无法删除该欢迎语', { this.$confirm(str, '无法删除该欢迎语', {
confirmButtonText: '关联详情', confirmButtonText: '关联详情',
...@@ -216,15 +217,16 @@ export default { ...@@ -216,15 +217,16 @@ export default {
this.showRelateDetail(row); this.showRelateDetail(row);
}); });
} else { } else {
str = '模板删除后将无法恢复'; str = '欢迎语删除后将无法恢复';
this.$confirm(str, '确认要删除该欢迎语吗?', { this.$confirm(str, '确认要删除该欢迎语吗?', {
confirmButtonText: '删除', confirmButtonText: '删除',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
getRequest('/haoban-manage3-web/welcome/remove', { welcomeId: row.welcomeId }).then(res => { getRequest('/haoban-manage3-web/welcome/remove', { welcomeId: row.welcomeId }).then(res => {
console.log(res);
let resData = res.data; let resData = res.data;
if (resData.code == 0 && resData.result) { if (resData.code == 0) {
this.$message.success('删除成功'); this.$message.success('删除成功');
this.getData(); this.getData();
} }
...@@ -238,11 +240,10 @@ export default { ...@@ -238,11 +240,10 @@ export default {
this.welcomeId = item.welcomeId; this.welcomeId = item.welcomeId;
}, },
goLinkDetail(row) { goLinkDetail(row) {
console.log(row); if (row.type == 2) {
if (row.type == 1) { window.open(`/haoban-3/#/actCodeDetail?hmId=${row.referId}`);
this.$router.push('/actCodeDetail?hmId=' + row.referId);
} else { } else {
this.$router.push(`/attractFlowLinkInfo/${row.referId}`); window.open(`/haoban-3/#/attractFlowLinkInfo/${row.referId}`);
} }
}, },
/** /**
...@@ -253,7 +254,7 @@ export default { ...@@ -253,7 +254,7 @@ export default {
postJsonRequest('/haoban-manage3-web/welcome/list', { ...this.form, wxEnterpriseId: this.wxEnterpriseId, type: this.type }) postJsonRequest('/haoban-manage3-web/welcome/list', { ...this.form, wxEnterpriseId: this.wxEnterpriseId, type: this.type })
.then(res => { .then(res => {
let resData = res.data; let resData = res.data;
console.log(resData);
if (resData.code == 0 && resData.result) { if (resData.code == 0 && resData.result) {
this.tableData = resData.result.result; this.tableData = resData.result.result;
this.tableData.forEach(item => { this.tableData.forEach(item => {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
<script> <script>
import salutatory from './salutatory.vue'; import salutatory from './salutatory.vue';
export default { export default {
name: 'salutatoryIndex',
components: { components: {
salutatory salutatory
}, },
...@@ -27,6 +28,14 @@ export default { ...@@ -27,6 +28,14 @@ export default {
this.activeName = Number(sessionStorage.getItem('activeName')); this.activeName = Number(sessionStorage.getItem('activeName'));
} }
}, },
activated() {
if (sessionStorage.getItem('activeName')) {
this.activeName = Number(sessionStorage.getItem('activeName'));
}
},
destroyed() {
sessionStorage.setItem('activeName', 1);
},
watch: { watch: {
activeName(val) { activeName(val) {
sessionStorage.setItem('activeName', val); sessionStorage.setItem('activeName', val);
......
...@@ -75,12 +75,12 @@ ...@@ -75,12 +75,12 @@
</div> </div>
</el-form-item> </el-form-item>
<el-button type="primary" style="margin-left:117px;margin-bottom:20px" :loading="submitbtnLoading" @click="submit">保存</el-button> <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> </el-form>
<preview :welcomeContent="form.welcomeContent" :mediaList="form.welcomeMediaList" /> <preview :welcomeContent="form.welcomeContent" :mediaList="form.welcomeMediaList" />
</div> </div>
<el-dialog title="添加公众号" width="585px" class="replay-link-dialog" :visible.sync="addReplayDialog" @closed="onClosed"> <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-form-item label="公众号名称">
<el-input v-model="accountName" @keyup.enter.native="addAcountName"></el-input> <el-input v-model="accountName" @keyup.enter.native="addAcountName"></el-input>
</el-form-item> </el-form-item>
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="添加链接" width="585px" class="replay-link-dialog" :visible.sync="urlDialogVisible" @closed="onClosed"> <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-form-item label="链接地址">
<el-input v-model="url" @keyup.enter.native="addUrl"></el-input> <el-input v-model="url" @keyup.enter.native="addUrl"></el-input>
<span style="font-size:12px;color:#909399;">以http或https开头</span> <span style="font-size:12px;color:#909399;">以http或https开头</span>
...@@ -236,7 +236,7 @@ export default { ...@@ -236,7 +236,7 @@ export default {
}, },
accountName: '', accountName: '',
rules: { rules: {
title: [{ required: true, message: '请输入欢迎语标题', trigger: 'blur' }], title: [{ required: true, message: '请输入欢迎语标题' }],
welcomeContent: [{ required: true, message: '请输入欢迎语内容', trigger: 'blur' }] welcomeContent: [{ required: true, message: '请输入欢迎语内容', trigger: 'blur' }]
}, },
wxEnterpriseId: '', wxEnterpriseId: '',
...@@ -288,6 +288,7 @@ export default { ...@@ -288,6 +288,7 @@ export default {
this.isNew = false; this.isNew = false;
} }
this.form.type = type; this.form.type = type;
sessionStorage.setItem('activeName', type);
this.getExistDefaultWelcome(); this.getExistDefaultWelcome();
this.getAppleList(); this.getAppleList();
}, },
...@@ -310,7 +311,6 @@ export default { ...@@ -310,7 +311,6 @@ export default {
}); });
}, },
handleDiabled(val) { handleDiabled(val) {
console.log('handleDiabled');
if (this.form.welcomeMediaList.filter(item => item.miniprogramSettingId && item.miniprogramSettingId == val.miniprogramSettingId).length) { if (this.form.welcomeMediaList.filter(item => item.miniprogramSettingId && item.miniprogramSettingId == val.miniprogramSettingId).length) {
return true; return true;
} else { } else {
...@@ -674,7 +674,7 @@ export default { ...@@ -674,7 +674,7 @@ export default {
para.suitDepartmentDeleteList.forEach(item => { para.suitDepartmentDeleteList.forEach(item => {
item.selectType = 1; item.selectType = 1;
}); });
console.log(para);
this.submitbtnLoading = true; this.submitbtnLoading = true;
postJsonRequest('/haoban-manage3-web/welcome/save', para) postJsonRequest('/haoban-manage3-web/welcome/save', para)
.then(res => { .then(res => {
...@@ -684,8 +684,10 @@ export default { ...@@ -684,8 +684,10 @@ export default {
type: 'success', type: 'success',
message: '保存成功!' message: '保存成功!'
}); });
// this.$router.push('/salutatory'); sessionStorage.setItem('activeName', para.type);
this.$router.go(-1); this.$router.push('salutatory');
} else {
this.$message.error({ message: `${res.data.message}` });
} }
}) })
.catch(function(error) { .catch(function(error) {
......
...@@ -77,7 +77,11 @@ export default { ...@@ -77,7 +77,11 @@ export default {
*/ */
toLogin() { toLogin() {
const that = this; 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; window.location.href = href;
}, },
changeEnterprise(val) { changeEnterprise(val) {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<dm-sub-title class="m-b-10"> <dm-sub-title class="m-b-10">
<div class="title"> <div class="title">
<span>引流加入</span> <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> </div>
</dm-sub-title> </dm-sub-title>
<!-- <el-tabs v-model="activeName" @tab-click="handleClick"> <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
...@@ -11,29 +11,29 @@ ...@@ -11,29 +11,29 @@
<div class="flex flex-space-between m-b-16"> <div class="flex flex-space-between m-b-16">
<div class="flex flex-align-center"> <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-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-option v-for="item in options" :key="item.key" :label="item.label" :value="item.key"> </el-option>
</el-select> </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>
<div> <div>
<el-button @click="goLanding">落地页模板</el-button> <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>
</div> </div>
<el-table :data="tableData" style="width:100%" v-loading="loading" @sort-change="handleSortChange"> <el-table :data="tableData" style="width:100%" v-loading="loading" :max-height="tableMaxHeight" @sort-change="handleSortChange">
<el-table-column width="120" prop="linkId" label="链接ID" /> <el-table-column min-width="120" prop="linkCode" label="链接ID" />
<el-table-column minWidth="180" prop="memberId" label="链接信息"> <el-table-column minWidth="180" prop="memberId" label="链接信息">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<p class="overFlow">{{ row.name }}</p> <p class="overFlow">{{ row.name }}</p>
<p class="tips">{{ row.linkCode }}</p> <p class="tips">code:{{ row.shortCode }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="110" prop="linkType" label="链接类型"> <el-table-column width="110" prop="linkType" label="链接类型">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-tag size="mini" v-if="row.linkType == 1"> 专用链接 </el-tag> <el-tag size="mini" class="el-tag--cyan" v-if="row.linkType == 1"> 专用链接 </el-tag>
<el-tag v-else size="mini" class="el-tag--cyan">通用链接</el-tag> <el-tag v-else size="mini">通用链接</el-tag>
</template> </template>
</el-table-column> </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"> <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 @@ ...@@ -42,7 +42,7 @@
<span v-else>{{ scope.row[v.prop] }}</span> <span v-else>{{ scope.row[v.prop] }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="160" fixed="right"> <el-table-column label="操作" min-width="160" fixed="right">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<dm-dropdown ref="drop" :scope-data="row" :configs="btnArr" /> <dm-dropdown ref="drop" :scope-data="row" :configs="btnArr" />
</template> </template>
...@@ -52,9 +52,6 @@ ...@@ -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> <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> </div>
<links :src="linkUrl" :show.sync="show" :imageName="imageName" /> <links :src="linkUrl" :show.sync="show" :imageName="imageName" />
<!-- </el-tab-pane>
<el-tab-pane label="引流入群" name="second">引流入群</el-tab-pane>
</el-tabs> -->
</div> </div>
</template> </template>
<script> <script>
...@@ -66,7 +63,7 @@ const tableHead = [ ...@@ -66,7 +63,7 @@ const tableHead = [
{ {
label: '添加好友人数', label: '添加好友人数',
prop: 'addNumT', prop: 'addNumT',
width: '130', minWidth: '130',
sortable: 'custom', sortable: 'custom',
formatter: function(row) { formatter: function(row) {
return `<span>${row.addNumT ? row.addNumT : '- -'}</span>`; return `<span>${row.addNumT ? row.addNumT : '- -'}</span>`;
...@@ -75,7 +72,7 @@ const tableHead = [ ...@@ -75,7 +72,7 @@ const tableHead = [
{ {
label: '今日新增人数', label: '今日新增人数',
prop: 'addNum', prop: 'addNum',
width: '130', minWidth: '130',
sortable: 'custom', sortable: 'custom',
formatter: function(row) { formatter: function(row) {
return `<span>${row.addNum ? row.addNum : '- -'}</span>`; return `<span>${row.addNum ? row.addNum : '- -'}</span>`;
...@@ -84,7 +81,7 @@ const tableHead = [ ...@@ -84,7 +81,7 @@ const tableHead = [
{ {
label: '点击总人次', label: '点击总人次',
prop: 'clickTimesT', prop: 'clickTimesT',
width: '120', minWidth: '120',
sortable: 'custom', sortable: 'custom',
formatter: function(row) { formatter: function(row) {
return `<span>${row.clickTimesT ? row.clickTimesT : '- -'}</span>`; return `<span>${row.clickTimesT ? row.clickTimesT : '- -'}</span>`;
...@@ -92,17 +89,17 @@ const tableHead = [ ...@@ -92,17 +89,17 @@ const tableHead = [
}, },
{ {
label: '今日点击人次', label: '今日点击人次',
prop: 'clickNum', prop: 'clickTimes',
width: '130', minWidth: '130',
sortable: 'custom', sortable: 'custom',
formatter: function(row) { formatter: function(row) {
return `<span>${row.clickNum ? row.clickNum : '- -'}</span>`; return `<span>${row.clickTimes ? row.clickTimes : '- -'}</span>`;
} }
}, },
{ {
label: '点击总人数', label: '点击总人数',
prop: 'clickNumT', prop: 'clickNumT',
width: '120', minWidth: '120',
sortable: 'custom', sortable: 'custom',
formatter: function(row) { formatter: function(row) {
return `<span>${row.clickNumT ? row.clickNumT : '- -'}</span>`; return `<span>${row.clickNumT ? row.clickNumT : '- -'}</span>`;
...@@ -111,7 +108,7 @@ const tableHead = [ ...@@ -111,7 +108,7 @@ const tableHead = [
{ {
label: '今日点击人数', label: '今日点击人数',
prop: 'clickNum', prop: 'clickNum',
width: '130', minWidth: '130',
sortable: 'custom', sortable: 'custom',
formatter: function(row) { formatter: function(row) {
return `<span>${row.clickNum ? row.clickNum : '- -'}</span>`; return `<span>${row.clickNum ? row.clickNum : '- -'}</span>`;
...@@ -139,8 +136,11 @@ const tableHead = [ ...@@ -139,8 +136,11 @@ const tableHead = [
} }
]; ];
export default { export default {
name: 'attractFlowLink',
data() { data() {
let tableMaxHeight = document.body.clientHeight - 285 + 'px';
return { return {
tableMaxHeight,
activeName: 'first', activeName: 'first',
loading: false, loading: false,
form: { form: {
...@@ -148,7 +148,8 @@ export default { ...@@ -148,7 +148,8 @@ export default {
pageNum: 1, pageNum: 1,
linkType: '', linkType: '',
searchParams: '', searchParams: '',
dateRange: [] dateRange: [],
sortColumn: ''
}, },
options: [ options: [
{ {
...@@ -160,24 +161,51 @@ export default { ...@@ -160,24 +161,51 @@ export default {
key: 2 key: 2
} }
], ],
pickerOptions: {
disabledDate: time => {
const end = new Date();
return time.getTime() > end.getTime();
}
},
btnArr: [ btnArr: [
{ {
text: '数据', text: '数据',
visible: row => {
return this.$getButtonLimit(this.$buttonCode.dataLink);
},
props: {
limitCode: this.$buttonCode.dataLink
},
handler: row => this.goDetail(row, 'second') handler: row => this.goDetail(row, 'second')
}, },
{ {
text: '详情', text: '详情',
visible: row => {
return this.$getButtonLimit(this.$buttonCode.infoLink);
},
props: {
limitCode: this.$buttonCode.infoLink
},
handler: row => this.goDetail(row, 'first') handler: row => this.goDetail(row, 'first')
}, },
{ {
text: '链接', text: '链接',
visible: row => { 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) handler: row => this.goLink(row)
}, },
{ {
text: '编辑', text: '编辑',
visible: row => {
return this.$getButtonLimit(this.$buttonCode.editLink);
},
props: {
limitCode: this.$buttonCode.editLink
},
handler: row => this.goEdit(row) handler: row => this.goEdit(row)
} }
], ],
...@@ -191,6 +219,9 @@ export default { ...@@ -191,6 +219,9 @@ export default {
mounted() { mounted() {
this.getList(); this.getList();
}, },
activated() {
this.getList();
},
components: { components: {
links links
}, },
...@@ -252,16 +283,18 @@ export default { ...@@ -252,16 +283,18 @@ export default {
this.$router.push('/ladingPageList'); this.$router.push('/ladingPageList');
}, },
goDetail(row, type) { 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) { goLink(row) {
this.linkUrl = row.linkUrl; this.linkUrl = row.linkUrl;
this.imageName = `${row.linkId}_${row.name}`; this.imageName = `${row.linkCode}_${row.name}`;
this.show = true; this.show = true;
console.log(row);
}, },
goEdit(row) { goEdit(row) {
console.log(row);
this.$router.push(`attractFlowLinkEdit/${row.linkId}`); this.$router.push(`attractFlowLinkEdit/${row.linkId}`);
} }
} }
...@@ -272,9 +305,6 @@ export default { ...@@ -272,9 +305,6 @@ export default {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.info-icon {
margin-right: 8px;
}
} }
.overFlow { .overFlow {
overflow: hidden; overflow: hidden;
......
...@@ -21,17 +21,17 @@ ...@@ -21,17 +21,17 @@
<span class="pageTitle">{{ card.pageTitle }}</span> <span class="pageTitle">{{ card.pageTitle }}</span>
<img src="@/assets/iphone-head.png" /> <img src="@/assets/iphone-head.png" />
<div class="content"> <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="enterpriseInfo">
<div class="logo"> <div v-if="card.merchantLogo" class="logo">
<img :src="card.merchantLogo" /> <img :src="card.merchantLogo" />
</div> </div>
<div class="name">{{ card.merchantName }}</div> <div class="name">{{ card.merchantName }}</div>
</div> </div>
<div class="QRcode"></div> <div class="QRcode"></div>
<div class="leadingText">{{ card.guideComment }}</div> <div class="leadingText">{{ card.guideComment }}</div>
<div class="enterpriseNum"> <div class="enterpriseNum" v-if="card.merchantPhoneNumber">
<i class="iconfont-hb3 iconhuawushuju"></i> <i class="iconfont-hb3 icondianhua"></i>
<p>{{ card.merchantPhoneNumber }}</p> <p>{{ card.merchantPhoneNumber }}</p>
</div> </div>
</div> </div>
...@@ -52,7 +52,7 @@ export default { ...@@ -52,7 +52,7 @@ export default {
merchantName: '', merchantName: '',
merchantPhoneNumber: '', merchantPhoneNumber: '',
merchantLogo: '', merchantLogo: '',
pageBackgroudImg: '', pageBackgroundImg: '',
guideComment: '' guideComment: ''
} }
}; };
...@@ -68,8 +68,8 @@ export default { ...@@ -68,8 +68,8 @@ export default {
content: { content: {
handler(val) { handler(val) {
if (val) { if (val) {
const { pageName, pageCode, pageId, pageTitle, merchantName, merchantPhoneNumber, merchantLogo, pageBackgroudImg, guideComment, createorName, createTime } = val; const { pageName, pageCode, pageId, pageTitle, merchantName, merchantPhoneNumber, merchantLogo, pageBackgroundImg, guideComment, createorName, createTime } = val;
this.card = { pageName, pageCode, pageId, pageTitle, merchantName, merchantPhoneNumber, merchantLogo, pageBackgroudImg, guideComment, createorName, createTime }; this.card = { pageName, pageCode, pageId, pageTitle, merchantName, merchantPhoneNumber, merchantLogo, pageBackgroundImg, guideComment, createorName, createTime };
} }
}, },
immediate: true immediate: true
...@@ -80,13 +80,13 @@ export default { ...@@ -80,13 +80,13 @@ export default {
<style type="text/scss" lang="scss" scoped> <style type="text/scss" lang="scss" scoped>
.card { .card {
width: 384px; width: 380px;
height: 687px; height: 687px;
border-radius: 8px; border-radius: 8px;
border: 1px solid #dcdfe6; border: 1px solid #dcdfe6;
background: #e5e7ed; background: RGBA(240, 243, 253, 1);
.head { .head {
width: 384px; width: 380px;
height: 87px; height: 87px;
border-radius: 8px 8px 0px 0px; border-radius: 8px 8px 0px 0px;
...@@ -121,7 +121,7 @@ export default { ...@@ -121,7 +121,7 @@ export default {
} }
} }
.iphone-content { .iphone-content {
width: 384px; width: 380px;
height: 600px; height: 600px;
display: flex; display: flex;
justify-content: center; justify-content: center;
...@@ -132,7 +132,6 @@ export default { ...@@ -132,7 +132,6 @@ export default {
.iphone { .iphone {
width: 320px; width: 320px;
height: 570px; height: 570px;
background: #f7f8fa;
box-shadow: 0px 4px 8px 0px rgba(220, 223, 230, 0.6); box-shadow: 0px 4px 8px 0px rgba(220, 223, 230, 0.6);
border-radius: 8px; border-radius: 8px;
position: relative; position: relative;
...@@ -151,10 +150,10 @@ export default { ...@@ -151,10 +150,10 @@ export default {
} }
.content { .content {
width: 320px; width: 320px;
height: 475px; height: 495px;
background: #ffffff; background: #ffffff;
border-radius: 8px; border-radius: 8px;
top: 95px; top: 75px;
left: 0; left: 0;
box-sizing: border-box; box-sizing: border-box;
padding: 20px 16px; padding: 20px 16px;
...@@ -177,6 +176,7 @@ export default { ...@@ -177,6 +176,7 @@ export default {
align-items: center; align-items: center;
width: 100%; width: 100%;
z-index: 100; z-index: 100;
height: 36px;
margin-bottom: 19px; margin-bottom: 19px;
.logo { .logo {
width: 48px; width: 48px;
...@@ -204,8 +204,7 @@ export default { ...@@ -204,8 +204,7 @@ export default {
z-index: 100; z-index: 100;
width: 236px; width: 236px;
height: 236px; height: 236px;
background: #f6f6f6; background-image: url('../../../../../assets/QRcode.jpg');
background-image: url('../../../../../assets/QRcode.png');
background-size: 236px auto; background-size: 236px auto;
} }
.leadingText { .leadingText {
...@@ -232,6 +231,7 @@ export default { ...@@ -232,6 +231,7 @@ export default {
line-height: 14px; line-height: 14px;
color: #63666b; color: #63666b;
font-size: 12px; font-size: 12px;
justify-content: center;
i { i {
font-size: 17px; font-size: 17px;
} }
......
<template> <template>
<div> <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 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-input show-word-limit placeholder="请输入模板名称" type="text" v-model="form.pageName" maxlength="20" class="w-340"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="页面标题" prop="pageTitle"> <el-form-item label="页面标题" prop="pageTitle">
...@@ -15,12 +15,12 @@ ...@@ -15,12 +15,12 @@
<el-input show-word-limit placeholder="请输入商户电话" type="text" v-model="form.merchantPhoneNumber" maxlength="20" class="w-340"></el-input> <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>
<el-form-item label="商户LOGO"> <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> <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>
<el-form-item label="页面背景"> <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> <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,大小 200KB 以内。</p> <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>
<el-form-item label="引导语" prop="guideComment"> <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> <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 @@ ...@@ -33,7 +33,7 @@
</div> </div>
</div> </div>
<div class="footBtn"> <div class="footBtn">
<el-button type="primary" @click="save">保存</el-button> <el-button type="primary" @click="save" :loading="btnLoading">保存</el-button>
</div> </div>
</div> </div>
</template> </template>
...@@ -53,8 +53,12 @@ export default { ...@@ -53,8 +53,12 @@ export default {
const reg1 = /^\s*$/; const reg1 = /^\s*$/;
const reg2 = /^\+*$/; const reg2 = /^\+*$/;
const reg3 = /^\-*$/; const reg3 = /^\-*$/;
if (!value) {
callback();
return;
}
if (reg1.test(value) || reg2.test(value) || reg3.test(value)) { if (reg1.test(value) || reg2.test(value) || reg3.test(value)) {
callback('请输入手机号'); callback('请输入正确的手机号');
} }
if (!reg.test(value)) { if (!reg.test(value)) {
callback('仅支持输入数字,空格,-,+'); callback('仅支持输入数字,空格,-,+');
...@@ -77,8 +81,10 @@ export default { ...@@ -77,8 +81,10 @@ export default {
isEdit: this.$route.meta.type == 'edit', isEdit: this.$route.meta.type == 'edit',
isAdd: this.$route.meta.type == 'add', isAdd: this.$route.meta.type == 'add',
loading: false, loading: false,
btnLoading: false,
rules: { rules: {
merchantPhoneNumber: [{ validator: merchantPhoneNumberVal }] merchantPhoneNumber: [{ validator: merchantPhoneNumberVal }],
pageName: [{ required: true, message: '请输入模板名称' }]
} }
}; };
}, },
...@@ -92,44 +98,49 @@ export default { ...@@ -92,44 +98,49 @@ export default {
methods: { methods: {
getDetail() { getDetail() {
console.log(this.$route); console.log(this.$route);
guidePageDetail({ pageId: this.$route.params.id }).then(res => { this.loading = true;
if (res.data.result) { guidePageDetail({ pageId: this.$route.params.id })
const result = res.data.result; .then(res => {
this.form = result; if (res.data.result) {
} const result = res.data.result;
}); this.form = result;
}
})
.finally(_ => {
this.loading = false;
});
}, },
getEchoEnterpriseInfo() { getEchoEnterpriseInfo() {
wxEnterpriseList({}).then(res => { wxEnterpriseList({}).then(res => {
let resData = res.data; let resData = res.data;
if (!!resData.result && !!resData.result.length) { 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.merchantLogo = enterpriseLogo;
this.form.merchantPhoneNumber = conactsPhone; this.form.merchantPhoneNumber = customerPhone;
this.form.merchantName = enterpriseName; this.form.merchantName = enterpriseName;
} }
}); });
}, },
guidePageEdit() { guidePageEdit() {
this.loading = true; this.btnLoading = true;
guidePageEdit(this.form) guidePageEdit(this.form)
.then(_ => { .then(_ => {
this.$router.go(-1); this.$router.push('/ladingPageList');
this.$message.success('保存成功'); this.$message.success('保存成功');
}) })
.finally(_ => { .finally(_ => {
this.loading = false; this.btnLoading = false;
}); });
}, },
guidePageSave() { guidePageSave() {
this.loading = true; this.btnLoading = true;
guidePageSave(this.form) guidePageSave(this.form)
.then(_ => { .then(_ => {
this.$router.go(-1); this.$router.push('/ladingPageList');
this.$message.success('保存成功'); this.$message.success('保存成功');
}) })
.finally(_ => { .finally(_ => {
this.loading = false; this.btnLoading = false;
}); });
}, },
save() { save() {
...@@ -148,6 +159,7 @@ export default { ...@@ -148,6 +159,7 @@ export default {
<style type="text/scss" lang="scss" scoped> <style type="text/scss" lang="scss" scoped>
.daily-set-content { .daily-set-content {
padding: 20px; padding: 20px;
margin-bottom: 56px;
} }
.form { .form {
float: left; float: left;
...@@ -170,7 +182,7 @@ export default { ...@@ -170,7 +182,7 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
} }
.footBtn { .footBtn {
width: 100%; width: calc(100vw - 190px);
height: 56px; height: 56px;
background: #ffffff; background: #ffffff;
box-shadow: 1px -2px 8px 0px rgba(220, 223, 230, 0.6); box-shadow: 1px -2px 8px 0px rgba(220, 223, 230, 0.6);
......
...@@ -11,8 +11,16 @@ ...@@ -11,8 +11,16 @@
<div class="tips m-b-16"> <div class="tips m-b-16">
二维码只是样式预览效果,请勿直接使用 二维码只是样式预览效果,请勿直接使用
</div> </div>
<div class="card-content" v-loading="loading"> <div 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 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> </div>
<relation-dialog :dialogVisible.sync="dialogVisible" :pageId="pageId" @goLinkDetail="goLinkDetail" /> <relation-dialog :dialogVisible.sync="dialogVisible" :pageId="pageId" @goLinkDetail="goLinkDetail" />
<div class="text-right" v-if="list.length != 0"> <div class="text-right" v-if="list.length != 0">
...@@ -26,6 +34,7 @@ import relationDialog from './relationDialog'; ...@@ -26,6 +34,7 @@ import relationDialog from './relationDialog';
import { guidePageList, guidePageDel, guidePageRelation } from '@/api/actCode'; import { guidePageList, guidePageDel, guidePageRelation } from '@/api/actCode';
import { _debounce } from '@/common/js/public'; import { _debounce } from '@/common/js/public';
export default { export default {
name: 'ladingPageList',
data() { data() {
return { return {
form: { form: {
...@@ -37,73 +46,8 @@ export default { ...@@ -37,73 +46,8 @@ export default {
loading: false, loading: false,
total: 0, total: 0,
pageId: '', pageId: '',
list: [ dialogVisible: false,
{ 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
}
]
}; };
}, },
components: { components: {
...@@ -113,10 +57,14 @@ export default { ...@@ -113,10 +57,14 @@ export default {
mounted() { mounted() {
this.getList(); this.getList();
}, },
activated() {
this.getList();
},
methods: { methods: {
toInput: _debounce(function(e, value) { toInput: _debounce(function(e, value) {
this.getList(); this.getList();
}, 500), }, 500),
getList() { getList() {
const param = { ...this.form }; const param = { ...this.form };
if (this.form.dateRange && this.form.dateRange.length) { if (this.form.dateRange && this.form.dateRange.length) {
...@@ -157,7 +105,7 @@ export default { ...@@ -157,7 +105,7 @@ export default {
guidePageRelation({ pageId: item.pageId }).then(res => { guidePageRelation({ pageId: item.pageId }).then(res => {
const { totalCount } = res.data.result; const { totalCount } = res.data.result;
if (totalCount) { if (totalCount) {
this.$confirm(`当前模板已关联链接(${totalCount}),请确认投放链接已投放结束,取消关联后才可删除该模板`, '无法删除该模板', { this.$confirm(`当前模板已关联链接(${totalCount}),请确认投放链接已投放结束,解除关联后才可删除该模板`, '无法删除该模板', {
confirmButtonText: '关联详情', confirmButtonText: '关联详情',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
...@@ -185,8 +133,7 @@ export default { ...@@ -185,8 +133,7 @@ export default {
this.$router.push(`/ladingPageEdit/${item.pageId}`); this.$router.push(`/ladingPageEdit/${item.pageId}`);
}, },
goLinkDetail(referId) { goLinkDetail(referId) {
console.log(referId); window.open(`/haoban-3/#/attractFlowLinkInfo/${referId}`);
this.$router.push(`/ladingPageEdit/${referId}`);
} }
} }
}; };
...@@ -202,4 +149,19 @@ export default { ...@@ -202,4 +149,19 @@ export default {
flex-wrap: wrap; flex-wrap: wrap;
gap: 20px; 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> </style>
<template> <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-if="charData.length" :id="id"></div> -->
<!-- <div v-else class="chart--nodata"></div> --> <!-- <div v-else class="chart--nodata"></div> -->
</template> </template>
<script> <script>
// import G2 from '@antv/g2';
import * as G2 from '@antv/g2'; import * as G2 from '@antv/g2';
export default { export default {
data() { data() {
return { return {
chart: null chart: null,
maxNum: 0,
maxTimes: 0
}; };
}, },
props: { props: {
...@@ -20,11 +30,7 @@ export default { ...@@ -20,11 +30,7 @@ export default {
return []; return [];
} }
}, },
id: String, id: String
width: {
type: Number,
default: 1192
}
}, },
mounted() { mounted() {
setTimeout(() => { setTimeout(() => {
...@@ -42,96 +48,144 @@ export default { ...@@ -42,96 +48,144 @@ export default {
methods: { methods: {
async drawChart() { async drawChart() {
this.chart && this.chart.destroy(); this.chart && this.chart.destroy();
if (!this.charData.length) return;
const data = this.handleData(this.charData);
this.chart = new G2.Chart({ this.chart = new G2.Chart({
container: this.id, container: this.id,
height: 359, autoFit: true,
forceFit: true, forceFit: true,
width: this.width, height: 359,
padding: [20, 40, 80, 80] width: 1400,
padding: [70, 60, 40, 70]
}); });
this.chart.data(this.charData, { this.chart.source(data, {
bizDate: { value: {
// type: 'cat', //分类 type: 'linear',
alias: '日期' //别名 tickInterval: 50
}, }
addNum: { });
alias: '今日添加人数' this.chart.tooltip({
showMarkers: false,
shared: true
});
this.chart.scale({
date: {
dataKey: 'date',
type: 'cat'
}, },
clickNum: { num: {
alias: '今日点击人数' min: 0,
tickCount: this.maxNum > 2 ? 5 : this.maxNum + 1,
tickMethod: 'wilkinson-extended',
nice: true
}, },
clickTimes: { times: {
alias: '今日点击人次' min: 0,
tickCount: this.maxTimes > 2 ? 5 : this.maxTimes + 1,
tickMethod: 'wilkinson-extended',
nice: true
} }
}); });
//坐标轴配置(法一配置) this.chart.legend({
this.chart.axis('bizDate', { position: 'top-left'
line: { });
style: { this.chart.axis('times', {
stroke: '#606266', grid: {
lineDash: [3, 3] line: {
type: 'line',
style: {
stroke: '#E4E7ED',
lineDash: [3, 3]
}
} }
}, },
tickLine: { label: {
style: { formatter: text => {
fill: '#E4E7ED', let num = Math.floor(text);
lineDash: [3, 3] return num + '人次';
}
}
});
this.chart.axis('num', {
grid: {
line: {
type: 'line',
style: {
stroke: '#E4E7ED',
lineDash: [3, 3]
}
} }
}, },
label: { label: {
style: { formatter: text => {
fill: '#606266' let num = Math.floor(text);
return num + '人';
} }
} }
}); });
// this.chart.axis('新增人数', { this.chart.tooltip({
// grid: { showMarkers: false,
// line: { shared: true,
// type: 'line', showCrosshairs: true
// 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
.line()
.position('bizDate*addNum')
.color('#4B74E8');
this.chart this.chart
.line() .line()
.position('bizDate*clickTimes') .position('date*num')
.color('#D6B38C'); .color('type', ['rgba(75,116,232,1)', 'rgba(20, 201, 201, 1)', 'rgba(214, 179, 140, 1)']);
this.chart this.chart
.line() .line()
.position('bizDate*clickNum') .position('date*times')
.color('#14C9C9'); .color('type', ['rgba(214, 179, 140, 1)']);
// this.chart.removeInteraction('legend-filter'); // 自定义图例,移除默认的分类图例筛选交互
this.chart.removeInteraction('legend-filter'); // 自定义图例,移除默认的分类图例筛选交互
//图表绘制的最后一步,用于将图表渲染至画布 //图表绘制的最后一步,用于将图表渲染至画布
this.chart.render(); 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> </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 { ...@@ -25,9 +25,9 @@ export default {
let end2 = new Date(pickerMinDate); let end2 = new Date(pickerMinDate);
if (pickerMinDate) { if (pickerMinDate) {
start = start.setFullYear(start.getFullYear() - 2); start = start.setFullYear(start.getFullYear() - 2);
start2 = start2.setDate(start2.getDate() - 60); start2 = start2.setDate(start2.getDate() - 59);
start = start > start2 ? start : start2; 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(); end = end.getTime() > end2 ? end2 : end.getTime();
} else { } else {
start = start.setFullYear(start.getFullYear() - 2); start = start.setFullYear(start.getFullYear() - 2);
...@@ -79,22 +79,26 @@ export default { ...@@ -79,22 +79,26 @@ export default {
} else if (index == 2) { } else if (index == 2) {
// 近三个月 // 近三个月
setDate = endDate => { setDate = endDate => {
endDate.setMonth(endDate.getMonth() - 3); endDate.setMonth(endDate.getMonth() - 2);
endDate.setDate(endDate.getDate() + 1); endDate.setDate(1);
return new Date(endDate); return new Date(endDate);
}; };
} else if (index == 3) { } else if (index == 3) {
// 近半年 // 近半年
setDate = endDate => { setDate = endDate => {
endDate.setMonth(endDate.getMonth() - 6); endDate.setMonth(endDate.getMonth() - 5);
endDate.setDate(endDate.getDate() + 1); endDate.setDate(1); // 以1号为开端
return new Date(endDate); return new Date(endDate);
}; };
} else { } else {
// 近一年 // 近一年
setDate = endDate => { setDate = endDate => {
console.log(endDate);
endDate.setFullYear(endDate.getFullYear() - 1); endDate.setFullYear(endDate.getFullYear() - 1);
endDate.setDate(endDate.getDate() + 1); endDate.setMonth(endDate.getMonth() + 1);
endDate.setDate(1);
return new Date(endDate); return new Date(endDate);
}; };
} }
......
<template> <template>
<div> <div>
<el-button class="select-clerk-trigger" v-if="!Array.isArray(data) || data.length == 0" @click="showSelectClerk = true"> <el-button class="select-clerk-trigger" v-if="!Array.isArray(data) || data.length == 0" :disabled="disabled" @click="showSelectClerk = true">
<i class="iconfont-hb3 icontianjia trigger-icon"></i> <i class="iconfont-hb3 iconPlusOutlined trigger-icon"></i>
添加成员 添加成员
</el-button> </el-button>
<template v-if="Array.isArray(data) && data.length > 0"> <template v-if="Array.isArray(data) && data.length > 0">
<div v-if="multiple" class="multiple-preview"> <div v-if="multiple" class="multiple-preview">
<dm-sub-title style="margin-left: 4px; width: calc(100% - 4px)" title-align="space-between"> <dm-sub-title style="margin-left: 4px; width: calc(100% - 4px)" title-align="space-between">
<div>{{ `已选成员(${data.length})` }}</div> <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="del-btn" type="text" @click="onDelAll">清除</el-button>
<el-button class="update-clerk-trigger" type="text" @click="showSelectClerk = true">编辑</el-button> <el-button class="update-clerk-trigger" type="text" @click="showSelectClerk = true">编辑</el-button>
</div> </div>
</dm-sub-title> </dm-sub-title>
<div class="clerk-list"> <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> </div>
<div v-else class="single-preview"> <div v-else class="single-preview">
<selected-clerk-item :clerk-data="data[0]" :show-del="false"></selected-clerk-item> <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> </div>
</template> </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> </div>
</template> </template>
...@@ -33,6 +33,11 @@ export default { ...@@ -33,6 +33,11 @@ export default {
name: 'Index', name: 'Index',
components: { SelectClerk, SelectedClerkItem }, components: { SelectClerk, SelectedClerkItem },
props: { props: {
// 是否单人活码
isSimple: {
type: Boolean,
default: false
},
// 是否多选 // 是否多选
multiple: { multiple: {
type: Boolean, type: Boolean,
...@@ -47,6 +52,10 @@ export default { ...@@ -47,6 +52,10 @@ export default {
data: { data: {
type: Array, type: Array,
default: () => [] default: () => []
},
disabled: {
type: Boolean,
default: false
} }
}, },
data() { data() {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="clerk-info-box"> <div class="clerk-info-box">
<div class="clerk-info"> <div class="clerk-info">
{{ clerkData.clerkName }} {{ clerkData.clerkName }}
<div class="clerk-code">{{ clerkData.clerkCode }}</div> <div class="clerk-code">code:{{ clerkData.clerkCode }}</div>
</div> </div>
<i v-if="showDel" @click="$emit('del', clerkData.clerkId)" class="iconfont-hb3 iconclose1 del-clerk"></i> <i v-if="showDel" @click="$emit('del', clerkData.clerkId)" class="iconfont-hb3 iconclose1 del-clerk"></i>
</div> </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 @@ ...@@ -8,7 +8,7 @@
<el-tag size="small" effect="dark" :type="codeStatusLis[statusIndex].style" style="margin-left: 8px;">{{ codeStatusLis[statusIndex].value }}</el-tag> <el-tag size="small" effect="dark" :type="codeStatusLis[statusIndex].style" style="margin-left: 8px;">{{ codeStatusLis[statusIndex].value }}</el-tag>
<!-- 正常success/正常到上限warning/待生效info/已作废danger --> <!-- 正常success/正常到上限warning/待生效info/已作废danger -->
</div> </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 font-14" style="padding-top:20px;">
<div class="flex flex-1"> <div class="flex flex-1">
<div class="font-14 line-22"> <div class="font-14 line-22">
...@@ -27,17 +27,20 @@ ...@@ -27,17 +27,20 @@
</div> </div>
<div class="flex flex-1"> <div class="flex flex-1">
<div class="font-14 line-22">活码标签:</div> <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> </div>
<div v-if="codeInfo.statusFlag != 2" class="flex" style="padding-top:20px;"> <div v-if="codeInfo.statusFlag != 2 && codeInfo.statusFlag" 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> <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="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>
</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-tabs v-model="activeName" type="card">
<el-tab-pane label="详情信息" name="first"> <div></div> </el-tab-pane> <el-tab-pane label="详情信息" name="first"> <div></div> </el-tab-pane>
<el-tab-pane label="数据统计" name="second"> <el-tab-pane label="数据统计" name="second">
...@@ -45,12 +48,12 @@ ...@@ -45,12 +48,12 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<el-tabs v-model="activeName" type="card"> <el-tabs v-model="activeName" type="card" ref="page">
<el-tab-pane label="详情信息" name="first"> <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"></act-code-detail-info> <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>
<el-tab-pane label="数据统计" name="second"> <el-tab-pane label="数据统计" name="second" v-if="$getButtonLimit($buttonCode.dataActCode)" :limit-code="$buttonCode.dataActCode">
<act-code-detail-statistics :hm-id="$route.query.hmId"></act-code-detail-statistics> <act-code-detail-statistics :chart-width="chartWidth" :hm-id="$route.query.hmId"></act-code-detail-statistics>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
...@@ -72,6 +75,8 @@ export default { ...@@ -72,6 +75,8 @@ export default {
}, },
data() { data() {
return { return {
chartWidth: 0,
fixedHeight: 217,
codeInfo: {}, codeInfo: {},
loading: false, loading: false,
activeName: 'first', activeName: 'first',
...@@ -84,20 +89,35 @@ export default { ...@@ -84,20 +89,35 @@ export default {
], ],
statusIndex: 1, statusIndex: 1,
scrollTop: 0, scrollTop: 0,
scrollStyle: 'position:fixed;top:80px;z-index:1;padding-bottom:0;height:40px;background:yellow;' useMemberList: []
}; };
}, },
methods: { methods: {
downloadQR() { 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() { modifyCode() {
this.$router.push(`/actCodeEdit?hmId=${this.$route.query.hmId}`); this.$router.push(`/actCodeEdit?hmId=${this.$route.query.hmId}`);
}, },
discardCode() { discardCode() {
const that = this; const that = this;
this.$confirm('确认要作废该活码?此操作将永久废弃该活码,请确保不影响其他投放使用!', '作废提示', { this.$confirm('此操作将永久废弃该活码,请确保不影响其他投放使用!', '确认要作废该活码?', {
confirmButtonText: '删除', confirmButtonText: '作废',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
...@@ -118,31 +138,12 @@ export default { ...@@ -118,31 +138,12 @@ export default {
that.loading = true; that.loading = true;
getRequest('/haoban-manage3-web/hm/qrcode/detail', { hmId: that.$route.query.hmId }) getRequest('/haoban-manage3-web/hm/qrcode/detail', { hmId: that.$route.query.hmId })
.then(res => { .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; let resData = res.data;
that.loading = false; that.loading = false;
if (resData.code == 0) { if (resData.code == 0) {
that.statusIndex = resData.result.statusFlag == 1 && resData.result.overFlag == 1 ? 4 : resData.result.statusFlag; that.statusIndex = resData.result.statusFlag == 1 && resData.result.overFlag == 1 ? 4 : resData.result.statusFlag;
that.codeInfo = resData.result; that.codeInfo = resData.result;
that.fixedHeight = that.codeInfo.statusFlag != 2 ? 260 : 217;
return; return;
} }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
...@@ -157,11 +158,15 @@ export default { ...@@ -157,11 +158,15 @@ export default {
scrollMethod: _throttle(function() { scrollMethod: _throttle(function() {
// 节流会不自然 左右不滑动 // 节流会不自然 左右不滑动
this.scrollTop = document.getElementById('hb-layout-pager-one').scrollTop; this.scrollTop = document.getElementById('hb-layout-pager-one').scrollTop;
}, 100) }, 100),
useMemberData(data) {
this.useMemberList = data;
}
}, },
mounted() { mounted() {
let that = this; let that = this;
this.activeName = this.$route.query.activeName || 'first'; this.activeName = this.$route.query.activeName || 'first';
this.chartWidth = this.$refs.page.$el.clientWidth;
that.getActCodeInfo(); that.getActCodeInfo();
document.getElementById('hb-layout-pager-one').addEventListener('scroll', that.scrollMethod); document.getElementById('hb-layout-pager-one').addEventListener('scroll', that.scrollMethod);
}, },
...@@ -192,14 +197,9 @@ export default { ...@@ -192,14 +197,9 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.fixed-tab {
position: absolute; .button-discard {
top: 80px; width: 98px;
z-index: 1; margin-left: 20px;
padding-bottom: 0;
height: 40px;
background: white;
width: 100%;
// left: 50px;
} }
</style> </style>
...@@ -7,8 +7,7 @@ ...@@ -7,8 +7,7 @@
<span class="font-w-500 color-303133">概览</span> <span class="font-w-500 color-303133">概览</span>
</div> </div>
<div class="flex"> <div class="flex">
<i class="iconfont-hb3 iconzhibiaoshuoming color-1890ff"></i> <el-button type="text" v-jumpLink:codeGl><i class="iconfont-hb3 iconzhibiaoshuoming m-r-6"></i>指标说明</el-button>
<div class="color-1890ff font-14 p-l-6" @click="explain('http://baidu.com')">指标说明</div>
</div> </div>
</div> </div>
<ul class="flex"> <ul class="flex">
...@@ -18,12 +17,12 @@ ...@@ -18,12 +17,12 @@
<i class="iconfont-hb3 iconxinzengyonghu color-1890ff font-28"></i> <i class="iconfont-hb3 iconxinzengyonghu color-1890ff font-28"></i>
</div> </div>
<div class="m-l-16"> <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> <span class="font-30 font-din" style="margin-top:1;">{{ overViewData.addNumT || 0 }}</span>
</div> </div>
</div> </div>
</li> </li>
<li class="data-total-cell "> <li class="data-total-cell">
<div class="flex p-20"> <div class="flex p-20">
<div class="icon-background" style="background: #d9f3fd;"> <div class="icon-background" style="background: #d9f3fd;">
<i class="iconfont-hb3 iconxinzengyonghu color-35C4FC font-28"></i> <i class="iconfont-hb3 iconxinzengyonghu color-35C4FC font-28"></i>
...@@ -40,10 +39,10 @@ ...@@ -40,10 +39,10 @@
<ul class="datebox" v-for="(lis, index) in dateLis" :key="lis.key"> <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> <li :class="dateKey == index ? 'activeClass' : 'noActive'" class="dateLisBox" @click="btnChange(index)">{{ lis.value }}</li>
</ul> </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>
</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> <div>
<div class="flex justify-between title"> <div class="flex justify-between title">
...@@ -52,8 +51,7 @@ ...@@ -52,8 +51,7 @@
<span class="font-w-500 color-303133">查看明细</span> <span class="font-w-500 color-303133">查看明细</span>
</div> </div>
<div class="flex"> <div class="flex">
<i class="iconfont-hb3 iconzhibiaoshuoming color-1890ff"></i> <el-button type="text" v-jumpLink:codeCkmx><i class="iconfont-hb3 iconzhibiaoshuoming m-r-6"></i>指标说明</el-button>
<div class="color-1890ff font-14 p-l-6" @click="explain('http://baidu.com')">指标说明</div>
</div> </div>
</div> </div>
<data-detail :id="hmId"></data-detail> <data-detail :id="hmId"></data-detail>
...@@ -75,13 +73,38 @@ export default { ...@@ -75,13 +73,38 @@ export default {
default() { default() {
return ''; return '';
} }
} },
chartWidth: Number
}, },
mixins: [mixin], mixins: [mixin],
data() { data() {
return { return {
loading: false, 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: [] } overViewData: { addNumT: 0, addNum: 0, dateList: [] }
}; };
}, },
...@@ -94,8 +117,8 @@ export default { ...@@ -94,8 +117,8 @@ export default {
let para = { let para = {
inFields: { inFields: {
hmId: that.hmId, hmId: that.hmId,
startTime: that.dateDefault[0], startTime: that.dateDefault[0] + ' 00:00:00',
endTime: that.dateDefault[1], endTime: that.dateDefault[1] + ' 23:59:59',
type: that.dateKey >= 2 ? 2 : 1 type: that.dateKey >= 2 ? 2 : 1
} }
}; };
...@@ -105,43 +128,17 @@ export default { ...@@ -105,43 +128,17 @@ export default {
let resData = res.data; let resData = res.data;
that.loading = false; that.loading = false;
if (resData.code == 0) { if (resData.code == 0) {
// let resData = { let result = resData.result || { addNumT: 0, addNum: 0, dateList: [] };
// result: { // result.dateList = [
// addNumT: 20, // { bizDate: '2018/8/1', 新增人数: 0 },
// addNum: 10, // { bizDate: '2018/8/2', 新增人数: 1 },
// dateList: [ // { bizDate: '2018/8/3', 新增人数: 1 },
// { bizDate: '2018/8/1', addNum: 4623 }, // { bizDate: '2018/8/4', 新增人数: 1 }
// { bizDate: '2018/8/2', addNum: 6145 }, // ];
// { bizDate: '2018/8/3', addNum: 508 }, result.dateList.map(function(date, index) {
// { 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) {
date['新增人数'] = date.addNum; date['新增人数'] = date.addNum;
}); });
that.overViewData = resData.result || {}; that.overViewData = result;
return; return;
} }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
......
...@@ -11,12 +11,23 @@ ...@@ -11,12 +11,23 @@
<div class="flex"> <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="scope.row.memberImage" />
<img v-if="!scope.row.memberImage" class="image-40" src="@/assets/user-default.svg" /> <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"> <div class="flex text-ellipsis">
<span class="text-ellipsis">{{ scope.row.memberName || '--' }}</span> <span class="text-ellipsis">{{ scope.row.memberName }}</span>
<span class="color-909399 text-ellipsis">{{ scope.row.memberNick || '--' }}</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> </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>
</div> </div>
</template> </template>
...@@ -34,13 +45,13 @@ ...@@ -34,13 +45,13 @@
<el-table-column prop="" label="导购信息" show-overflow-tooltip min-width="128px"> <el-table-column prop="" label="导购信息" show-overflow-tooltip min-width="128px">
<template slot-scope="scope"> <template slot-scope="scope">
<p class="line-20 text-ellipsis">{{ scope.row.clerkName || '--' }}</p> <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> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="导购所属门店" show-overflow-tooltip min-width="185px"> <el-table-column prop="" label="导购所属门店" show-overflow-tooltip min-width="185px">
<template slot-scope="scope"> <template slot-scope="scope">
<p class="line-20 text-ellipsis">{{ scope.row.storeName || '--' }}</p> <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> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="企微号" show-overflow-tooltip min-width="107px"> <el-table-column prop="" label="企微号" show-overflow-tooltip min-width="107px">
...@@ -83,18 +94,12 @@ import { postJsonRequest } from '@/api/api'; ...@@ -83,18 +94,12 @@ import { postJsonRequest } from '@/api/api';
export default { export default {
name: 'actCodeRecord', name: 'actCodeRecord',
components: {}, components: {},
props: {
hmId: {
type: String,
default: ''
}
},
data() { data() {
return { return {
loading: false, loading: false,
tableData: [],
// searchInputStore: '', // searchInputStore: '',
// searchInputGuide: '', // 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, currentPage: 1,
pageSize: 20, pageSize: 20,
...@@ -121,7 +126,6 @@ export default { ...@@ -121,7 +126,6 @@ export default {
*/ */
sortChange(column, prop, order) { sortChange(column, prop, order) {
const that = this; const that = this;
console.log(column.order);
that.currentPage = 1; that.currentPage = 1;
that.sortType = column.order == 'ascending' ? 'asc' : 'desc'; // 默认倒序 that.sortType = column.order == 'ascending' ? 'asc' : 'desc'; // 默认倒序
that.getTableList(); that.getTableList();
...@@ -152,36 +156,28 @@ export default { ...@@ -152,36 +156,28 @@ export default {
async getTableList() { async getTableList() {
const that = this; const that = this;
that.loading = true; that.loading = true;
let para = {}; const { startTime, endTime, clerkId, linkId, hmId } = this.$route.query;
let api = ''; let para = {
if (this.$route.query.hmId) { pageNum: that.currentPage, // 当前页
api = '/haoban-manage3-web/hm/qrcode/wxUserAddLog/list'; pageSize: that.pageSize, // 一页显示个数
para = { linkId,
pageNum: that.currentPage, // 当前页 hmId,
pageSize: that.pageSize, // 一页显示个数 clerkId,
hmId: that.$route.query.hmId, startTime,
createTimeOrder: that.sortType || '' endTime,
}; // addChannel: 1,
} else if (this.$route.query.linkId) { addChannel: linkId ? 1 : hmId ? this.$route.query.addChannel : 0, // 不具备传0
const { startTime, endTime, clerkId, linkId } = this.$route.query; createTimeOrder: that.sortType || ''
api = '/haoban-manage3-web/hm/link/statistics/log'; };
para = { postJsonRequest('/haoban-manage3-web/hm/qrcode/wxUserAddLog/list', para)
pageNum: that.currentPage, // 当前页
pageSize: that.pageSize, // 一页显示个数
linkId,
clerkId,
startTime,
endTime
// createTimeOrder: that.sortType || ''
};
}
// console.log(para);
postJsonRequest(api, para)
.then(res => { .then(res => {
let resData = res.data; let resData = res.data;
that.loading = false; that.loading = false;
if (resData.code == 0) { if (resData.code == 0) {
that.tableData = resData.result.result || []; that.tableData = resData.result.result || [];
// that.tableData[0].memberPhone = '';
// that.tableData[0].memberNick = '';
// that.tableData[0].memberName = '';
that.total = resData.result.totalCount || 0; that.total = resData.result.totalCount || 0;
return; return;
} }
...@@ -199,6 +195,7 @@ export default { ...@@ -199,6 +195,7 @@ export default {
mounted() { mounted() {
let that = this; let that = this;
that.getTableList(); that.getTableList();
console.log(this.$route.query);
} }
}; };
</script> </script>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<dm-sub-title text="配置标签" class="m-b-10"> <dm-sub-title text="配置标签" class="m-b-10">
<div class="title"> <div class="title">
<span>员工活码</span> <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> </div>
</dm-sub-title> </dm-sub-title>
<act-code-table :currentGroupId="currentGroupId"></act-code-table> <act-code-table :currentGroupId="currentGroupId"></act-code-table>
...@@ -40,10 +40,9 @@ export default { ...@@ -40,10 +40,9 @@ export default {
watch: { watch: {
currentGroupId: { currentGroupId: {
handler: function(val) { handler: function(val) {
console.log(val, 111); // if (val != null) {
if (val != null) { this.currentGroupId = val;
this.currentGroupId = val; // }
}
}, },
immediate: true immediate: true
} }
...@@ -73,6 +72,7 @@ export default { ...@@ -73,6 +72,7 @@ export default {
.list-right { .list-right {
position: relative; position: relative;
height: 500px; height: 500px;
width: 100%;
min-width: calc(100% - 300px); min-width: calc(100% - 300px);
min-height: calc(100vh - 94px); min-height: calc(100vh - 94px);
border-left: 1px solid #e4e7ed; border-left: 1px solid #e4e7ed;
...@@ -83,13 +83,6 @@ export default { ...@@ -83,13 +83,6 @@ export default {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.info-content {
color: #2f54eb;
font-size: 14px;
}
.info-icon {
margin-right: 8px;
}
} }
.cur-po { .cur-po {
cursor: pointer; cursor: pointer;
......
<template> <template>
<div :id="id"></div> <div>
<!-- <div v-if="charData.length" :id="id"></div> --> <div :id="id" class="chart--box" v-show="charData.length > 0"></div>
<!-- <div v-else class="chart--nodata"></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> </template>
<script> <script>
// import G2 from '@antv/g2';
import * as G2 from '@antv/g2'; import * as G2 from '@antv/g2';
import filters from '@/filters/index';
export default { export default {
components: {},
data() { data() {
return { return {
chart: null chart: null
...@@ -21,67 +28,46 @@ export default { ...@@ -21,67 +28,46 @@ export default {
} }
}, },
id: String, id: String,
width: { chartWidth: Number
type: Number,
default: 1192
}
},
mounted() {
setTimeout(() => {
this.drawChart(); // 第一步是创建的时候更新图表,但是这个不适用于异步请求接口获取相关数据,采用下面的监听的方式
}, 30);
}, },
beforeUpdate() { beforeUpdate() {
this.drawChart(); this.drawChart();
}, },
watch: {
charData() {
this.drawChart();
}
},
methods: { methods: {
async drawChart() { drawChart() {
this.chart && this.chart.destroy(); this.chart && this.chart.destroy();
if (!this.charData.length) return;
this.chart = new G2.Chart({ this.chart = new G2.Chart({
container: this.id, container: this.id,
height: 359, autoFit: true,
forceFit: true, forceFit: true,
width: this.width, height: 359,
padding: [20, 40, 80, 80] width: this.chartWidth,
padding: [70, 60, 40, 70]
}); });
//装载数据 //装载数据
// { date: '2018/8/1', 新增人数: 4623 }, let list = JSON.parse(JSON.stringify(this.charData));
// { date: '2018/8/2', 新增人数: 6145 }, list.sort((a, b) => {
// { date: '2018/8/3', 新增人数: 508 }, return b.新增人数 - a.新增人数;
// { date: '2018/8/4', 新增人数: 289 }
// this.chart.data(this.charData); // 载入数据源
this.chart.data(this.charData, {
bizDate: {
// type: 'cat', //分类
alias: '日期' //别名
},
新增人数: {
alias: '新增人数'
}
}); });
//坐标轴配置(法一配置) let maxNum = list[0]['新增人数'];
this.chart.axis('bizDate', { this.chart.data(this.charData); // 载入数据源
line: { this.chart.tooltip({
style: { showMarkers: false,
stroke: '#606266', shared: true,
lineDash: [3, 3] showCrosshairs: true
} });
}, this.chart.scale({
tickLine: { 新增人数: {
style: { // tickInterval: 1,
fill: '#E4E7ED', tickCount: maxNum > 2 ? 5 : maxNum + 1,
lineDash: [3, 3] minTickInterval: 1,
} nice: true,
min: 0
// type: 'linear'
}, },
label: { bizDate: {
style: { type: 'cat'
fill: '#606266'
}
} }
}); });
this.chart.axis('新增人数', { this.chart.axis('新增人数', {
...@@ -98,23 +84,54 @@ export default { ...@@ -98,23 +84,54 @@ export default {
style: { style: {
fill: '#606266' fill: '#606266'
}, },
formatter: val => { formatter: text => {
// 格式化参数值 let num = Number(text);
return val; 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({ this.chart.legend({
custom: true, custom: true,
position: 'top-left', position: 'top-left',
items: [{ name: '新增人数', value: '新增人数', marker: { symbol: 'line', style: { stroke: '#4B74E8', lineWidth: 12, lineHeight: 8 } } }] items: [{ name: '新增人数', value: '新增人数', marker: { symbol: 'line', style: { stroke: '#4B74E8', lineWidth: 12, lineHeight: 8 } } }]
}); });
if (this.charData.length > 1) {
this.chart this.chart
.line() .line()
.position('bizDate*新增人数') .position('bizDate*新增人数')
.color('#4B74E8'); .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'); // 自定义图例,移除默认的分类图例筛选交互 this.chart.removeInteraction('legend-filter'); // 自定义图例,移除默认的分类图例筛选交互
//图表绘制的最后一步,用于将图表渲染至画布 //图表绘制的最后一步,用于将图表渲染至画布
...@@ -123,3 +140,24 @@ export default { ...@@ -123,3 +140,24 @@ export default {
} }
}; };
</script> </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> <template>
<div> <div>
<setActCode @sumbit="onSubmit"> <setActCode :actCodeData="form" @sumbit="onSubmit" ref="setActCodePage">
<template #typeCode> <template #typeCode>
<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="form.hmType"> <el-radio-group v-model="form.hmType">
...@@ -9,14 +9,14 @@ ...@@ -9,14 +9,14 @@
</el-form-item> </el-form-item>
</template> </template>
<template #member> <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-group v-model="memberType" @change="radioChange">
<el-radio :label="1">全部成员</el-radio> <el-radio :label="1">全部成员</el-radio>
<el-radio :label="2">部分成员</el-radio> <el-radio :label="2">部分成员</el-radio>
</el-radio-group> </el-radio-group>
<br /> <br />
<p v-if="memberType == 1" class="tips">当前已选择 {{ hmMemberNum }} 个成员 <span>(活码名称默认为使用成员名称)</span></p> <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> </el-form-item>
</template> </template>
</setActCode> </setActCode>
...@@ -31,17 +31,23 @@ export default { ...@@ -31,17 +31,23 @@ export default {
components: { setActCode, SelectClerk }, components: { setActCode, SelectClerk },
data() { data() {
return { return {
hmMemberNum: 1, hmMemberNum: 0,
form: { form: {
hmId: '',
hmGroupId: '',
passFlag: 1,
welcomeId: '',
hmType: 1, hmType: 1,
// name: '', name: '',
clerkIdList: [], memberLabelId: '',
hmUserNum: null memberLabelName: '',
memberLabelStatus: -1,
clerkList: [],
welcomeType: 1,
hmUserNum: null //多人活码人数
}, },
memberType: 1, memberType: 1
data: [],
storeClerkList: []
}; };
}, },
created() { created() {
...@@ -50,41 +56,40 @@ export default { ...@@ -50,41 +56,40 @@ export default {
methods: { methods: {
radioChange(e) { radioChange(e) {
if (e == 1) { if (e == 1) {
this.form.clerkIdList = ['-1']; this.form.clerkList = [];
this.data = []; this.form.hmUserNum = 0;
this.form.hmUserNum = this.hmMemberNum;
} }
}, },
getClerkNum() { getClerkNum() {
getRequest('/haoban-manage3-web/hm/qrcode/getAddCount', {}).then(res => { getRequest('/haoban-manage3-web/hm/qrcode/getAddCount', {}).then(res => {
if (res.data.code == 0) { if (res.data.code == 0) {
this.hmMemberNum = res.data.result || 1; this.hmMemberNum = res.data.result || 0;
} }
}); });
}, },
onChange(data) { onChange(data) {
this.data = data; this.form.clerkList = data;
this.form.clerkIdList = data;
this.form.hmUserNum = data.length; this.form.hmUserNum = data.length;
}, },
async onSubmit(event) { onSubmit(event) {
if (this.memberType == 1) { if (this.memberType == 1) {
this.form.clerkIdList = ['-1']; this.form.clerkIdList = ['-1'];
this.form.hmUserNum = this.hmMemberNum; this.form.hmUserNum = this.hmMemberNum;
} else {
this.form.clerkIdList = this.form.clerkList.map(el => el.clerkId);
} }
let obj = { let obj = {
...event, ...event,
...this.form ...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) { if (res.data.code == 0) {
this.form = { setTimeout(() => {
hmType: 1, this.$refs.setActCodePage.saveLoading = false;
clerkIdList: [], this.$router.go(-1);
hmUserNum: null //多人活码人数 }, 1000);
};
this.$router.go(-1);
} else { } else {
this.$refs.setActCodePage.saveLoading = false;
return this.$message.error(res.data.message); return this.$message.error(res.data.message);
} }
}); });
...@@ -103,6 +108,8 @@ export default { ...@@ -103,6 +108,8 @@ export default {
} }
.tips { .tips {
color: #303133; color: #303133;
margin-top: 12px;
font-size: 14px;
span { span {
color: #909399; color: #909399;
} }
......
...@@ -12,10 +12,10 @@ ...@@ -12,10 +12,10 @@
<span :title="listItem.groupName" class="listItemName overflow-ellipsis">{{ listItem.groupName }}</span> <span :title="listItem.groupName" class="listItemName overflow-ellipsis">{{ listItem.groupName }}</span>
<span>{{ `(${listItem.referNum})` }}</span> <span>{{ `(${listItem.referNum})` }}</span>
</div> </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="editGroupListItem(listItem)">编辑</p>
<p class="more" @click="delGroupListItem(listItem)" v-if="!listItem.referNum">删除</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> </el-popover>
</li> </li>
<li> <li>
...@@ -34,8 +34,9 @@ ...@@ -34,8 +34,9 @@
<el-form :model="groupListForm" :rules="groupListFormRules" ref="groupListForm"> <el-form :model="groupListForm" :rules="groupListFormRules" ref="groupListForm">
<el-form-item label="分组名称" prop="groupName"> <el-form-item label="分组名称" prop="groupName">
<el-input placeholder="请输入分组名称" v-model="groupListForm.groupName" :maxlength="10" show-word-limit clearable></el-input> <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> </el-form-item>
<p class="addGroupTip" v-show="!isEditGroup">分组名称不可重复,建议"创建人姓名-分组名称"</p>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="addOrEditGroupDialog = false"> </el-button> <el-button @click="addOrEditGroupDialog = false"> </el-button>
...@@ -71,7 +72,7 @@ export default { ...@@ -71,7 +72,7 @@ export default {
return { return {
searchTip: false, searchTip: false,
groupLoading: false, groupLoading: false,
currentListItemUuid: 1, currentListItemUuid: -1,
groupList: [], groupList: [],
scrollLoad: false, scrollLoad: false,
title: '新增分组', title: '新增分组',
...@@ -92,7 +93,7 @@ export default { ...@@ -92,7 +93,7 @@ export default {
pageP: { pageP: {
groupName: '', groupName: '',
pageNum: 1, pageNum: 1,
pageSize: 20 pageSize: 40
}, },
checkNameLength: -1, checkNameLength: -1,
editNamePre: '' editNamePre: ''
...@@ -101,6 +102,9 @@ export default { ...@@ -101,6 +102,9 @@ export default {
created() { created() {
this.searchGroup(); this.searchGroup();
}, },
activated() {
this.searchGroup();
},
methods: { methods: {
onSearch() { onSearch() {
this.pageP.pageNum = 1; this.pageP.pageNum = 1;
...@@ -151,8 +155,8 @@ export default { ...@@ -151,8 +155,8 @@ export default {
}) })
.then(() => { .then(() => {
// 删除操作 // 删除操作
// const listItemIndex = this.groupList.findIndex(item => item.groupId === listItem.groupId); const listItemIndex = this.groupList.findIndex(item => item.groupId === listItem.groupId);
// if (listItemIndex < 0) return; if (listItemIndex < 0) return;
let params = { let params = {
groupId: listItem.groupId groupId: listItem.groupId
}; };
...@@ -163,6 +167,11 @@ export default { ...@@ -163,6 +167,11 @@ export default {
message: '删除成功!' message: '删除成功!'
}); });
// this.groupList.splice(listItemIndex, 1); // 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.pageP.pageNum = 1;
this.searchGroup(); this.searchGroup();
} }
...@@ -176,7 +185,7 @@ export default { ...@@ -176,7 +185,7 @@ export default {
// 用来接收编辑或者新增后的返回结果 // 用来接收编辑或者新增后的返回结果
let res = {}; let res = {};
let resSucTip = `${this.isEditGroup ? '修改' : '新增'}成功`; let resSucTip = `${this.isEditGroup ? '修改' : '新增'}成功`;
let resErTip = `${this.isEditGroup ? '修改' : '新增'}失败`; // let resErTip = `${this.isEditGroup ? '修改' : '新增'}失败`;
if (this.isEditGroup) { if (this.isEditGroup) {
let obj = { let obj = {
groupId: this.groupListForm.groupId, groupId: this.groupListForm.groupId,
...@@ -198,17 +207,14 @@ export default { ...@@ -198,17 +207,14 @@ export default {
if (this.isEditGroup) { if (this.isEditGroup) {
const groupListItem = this.groupList.find(({ groupId }) => groupId == this.groupListForm.groupId); const groupListItem = this.groupList.find(({ groupId }) => groupId == this.groupListForm.groupId);
groupListItem.groupName = this.groupListForm.groupName; groupListItem.groupName = this.groupListForm.groupName;
} else {
// this.pageP.pageNum = 1;
// this.searchGroup();
} }
this.pageP.pageNum = 1; this.pageP.pageNum = 1;
this.searchGroup(); this.searchGroup();
this.addOrEditGroupDialog = false; this.addOrEditGroupDialog = false;
} else { } else {
this.$message({ this.$message({
type: 'error', type: 'warning',
message: resErTip message: res.data.message
}); });
} }
} }
...@@ -222,7 +228,7 @@ export default { ...@@ -222,7 +228,7 @@ export default {
{ {
groupName: '全部分组', groupName: '全部分组',
referNum: '', referNum: '',
groupId: null groupId: '-1'
} }
]; ];
this.groupList[0].referNum = countNum.data.result; this.groupList[0].referNum = countNum.data.result;
...@@ -239,7 +245,6 @@ export default { ...@@ -239,7 +245,6 @@ export default {
if (this.pageP.groupName == '') { if (this.pageP.groupName == '') {
this.searchTip = false; this.searchTip = false;
} else if (this.pageP.groupName != '') { } else if (this.pageP.groupName != '') {
// this.groupList.splice(0, 1);
if (this.groupList.length <= 0) { if (this.groupList.length <= 0) {
this.searchTip = true; this.searchTip = true;
} }
...@@ -279,6 +284,14 @@ export default { ...@@ -279,6 +284,14 @@ export default {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
padding: 0 5px 0 10px; padding: 0 5px 0 10px;
.iconhover,
.el-popover__reference {
display: inline-block;
width: 20px;
height: 20px;
line-height: 20px;
text-align: center;
}
&:hover { &:hover {
color: #303133; color: #303133;
background: #f2f3f5; background: #f2f3f5;
...@@ -286,11 +299,15 @@ export default { ...@@ -286,11 +299,15 @@ export default {
&.active-li { &.active-li {
color: #2f54eb; color: #2f54eb;
background: #ebeffe; background: #ebeffe;
.iconhover:hover, .iconhover:hover {
.iconhover:active {
background: #d8defc; background: #d8defc;
border-radius: 2px;
} }
} }
.iconhover:hover {
background: #e5e6eb;
border-radius: 2px;
}
} }
.more { .more {
line-height: 26px; line-height: 26px;
......
<template> <template>
<div> <div>
<setActCode @sumbit="onSubmit" :actCodeData="detailCode"> <setActCode ref="setActCodePage" :actCodeData="form" @sumbit="onSubmit">
<template #typeCode> <template #typeCode>
<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="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="1">单人活码</el-radio>
<el-radio :label="2">多人活码</el-radio> <el-radio :label="2">多人活码</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</template> </template>
<template #codeName> <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-input class="w340" v-model="form.name" placeholder="请输入活码名称,默认使用成员名称" maxlength="20" show-word-limit></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template #member> <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 == 1">单人活码仅可选择一名成员</p>
<p class="tabs" v-if="form.hmType == 2">若选择多名成员,则随机分配企微员工</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> </el-form-item>
</template> </template>
</setActCode> </setActCode>
...@@ -34,96 +34,93 @@ export default { ...@@ -34,96 +34,93 @@ export default {
return { return {
loading: false, loading: false,
form: { form: {
hmId: '',
hmGroupId: '',
passFlag: 1,
welcomeId: '',
hmType: 1, hmType: 1,
name: '', name: '',
clerkIdList: [], memberLabelId: '',
memberLabelName: '',
memberLabelStatus: -1,
clerkList: [],
welcomeType: 1,
hmUserNum: null //多人活码人数 hmUserNum: null //多人活码人数
}, }
multiple: false,
data: [],
dataArr: [],
detailCode: []
}; };
}, },
created() { created() {
if (this.$route.query.hmId) { if (this.$route.query.hmId) {
this.form.hmId = this.$route.query.hmId;
this.getActCodeInfo(); this.getActCodeInfo();
} }
}, },
methods: { methods: {
changeEvent(e) { onTypeChange() {
this.data = []; this.form.name = '';
this.dataArr = []; this.form.clerkList = [];
if (e == 2) { this.form.hmUserNum = 0;
this.multiple = true;
} else if (e == 1) {
this.multiple = false;
}
}, },
onChange(data) { onChange(data) {
this.data = data;
this.form.hmUserNum = data.length; this.form.hmUserNum = data.length;
this.form.clerkIdList = data.map(item => { this.form.clerkList = data;
return item.clerkId;
});
this.dataArr = data.map(item => {
return item.clerkName;
});
if (this.form.name == '') { 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() { getActCodeInfo() {
const that = this; this.loading = true;
that.loading = true; getRequest('/haoban-manage3-web/hm/qrcode/detail', { hmId: this.form.hmId })
if (this.$route.query.hmId) { .then(res => {
await getRequest('/haoban-manage3-web/hm/qrcode/detail', { hmId: this.$route.query.hmId }).then(res => { this.form = res.data.result;
this.detailCode = res.data.result; if (this.form.welcomeId) {
this.form.hmType = this.detailCode.hmType; this.form.welcomeType = 1;
this.form.name = this.detailCode.name; } else {
this.form.clerkIdList = this.detailCode.clerkList.map(i => i.clerkId); this.form.welcomeType = 2;
this.form.hmUserNum = this.form.clerkIdList.length; }
this.data = this.detailCode.clerkList; this.form.hmUserNum = this.form.clerkList.length;
that.loading = false; })
}); .finally(() => (this.loading = false));
}
}, },
async onSubmit(event) { onSubmit(event) {
let obj = { let obj = {
...event, ...event,
...this.form ...this.form
}; };
if (this.$route.query.hmId) { obj.clerkIdList = obj.clerkList.map(el => el.clerkId);
obj = { if (this.form.hmId) {
...obj,
hmId: this.$route.query.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) { if (res.data.code == 0) {
this.form = { setTimeout(() => {
hmType: 1, this.$router.go(-1);
name: '', this.$refs.setActCodePage.btnLoading = false;
clerkIdList: [], this.$refs.setActCodePage.saveLoading = false;
hmUserNum: null //多人活码人数 }, 1000);
};
this.$router.go(-1);
} else { } else {
this.$refs.setActCodePage.btnLoading = false;
this.$refs.setActCodePage.saveLoading = false;
return this.$message.error(res.data.message); return this.$message.error(res.data.message);
} }
}); });
} else { } 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) { if (res.data.code == 0) {
this.form = { setTimeout(() => {
hmType: 1, this.$refs.setActCodePage.btnLoading = false;
name: '', this.$refs.setActCodePage.saveLoading = false;
clerkIdList: [], this.$router.go(-1);
hmUserNum: null //多人活码人数 }, 1000);
};
this.$router.go(-1);
} else { } else {
this.$refs.setActCodePage.btnLoading = false;
this.$refs.setActCodePage.saveLoading = false;
return this.$message.error(res.data.message); return this.$message.error(res.data.message);
} }
}); });
...@@ -140,4 +137,8 @@ export default { ...@@ -140,4 +137,8 @@ export default {
.w340 { .w340 {
width: 340px; width: 340px;
} }
.tabs {
font-size: 12px;
color: #909399;
}
</style> </style>
<template> <template>
<div> <div>
<div class="m20 formBox"> <div class="m20 formBox" v-loading="saveLoading">
<dm-sub-title text="基础信息" type="line" /> <dm-sub-title text="基础信息" type="line" />
<el-form class="mt20" ref="form" :model="form" :rules="rules" label-width="110px"> <el-form class="mt20" ref="form" :model="form" :rules="rules" label-width="110px">
<slot name="typeCode"></slot> <slot name="typeCode"></slot>
<slot name="codeName"></slot> <slot name="codeName"></slot>
<el-form-item label="活码分组" prop="hmGroupId"> <el-form-item label="活码分组" prop="hmGroupId" class="code-group">
<el-select class="w340" v-model="form.hmGroupId" v-loadmore="onLoadmore" clearable remote filterable :remote-method="remoteMethod"> <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-option v-for="item in groupList" :key="item.groupId" :label="item.groupName" :value="item.groupId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<slot name="member"></slot> <slot name="member"></slot>
<el-form-item label="自动通过好友"> <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> <span class="tabs">开启后,客户添加该企业微信时,无需好友验证,将会自动添加成功</span>
</el-form-item> </el-form-item>
<el-form-item label="活码标签"> <el-form-item label="活码标签" prop="memberLabelId" class="memberTag-form-item">
<el-button plain class="ylbtn" @click="tagsDialogVisible = true"><i class="iconfont-components3 icon-cp-PlusOutlined addPic"></i>添加标签</el-button> <el-button v-if="!form.memberLabelId" plain class="ylbtn" @click="tagsDialogVisible = true">
<dm-memberTag-group :visiable.sync="tagsDialogVisible" projectName="haobao-3" @save="saveTagPop"></dm-memberTag-group> <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> </el-form-item>
<dm-sub-title text="欢迎语设置" type="line" class="mt40b20" /> <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> </el-form>
</div> </div>
<div class="saveBtn"> <div class="saveBtn">
<el-button type="primary" @click="save">保存</el-button> <el-button type="primary" @click="save" :loading="saveLoading">保存</el-button>
</div> </div>
</div> </div>
</template> </template>
...@@ -56,16 +62,20 @@ export default { ...@@ -56,16 +62,20 @@ export default {
}, },
data() { data() {
return { return {
saveLoading: false,
form: { form: {
// hmType: 1, //1单人 2多人 // hmType: 1, //1单人 2多人
// name: '', // 名称 // name: '', // 名称
hmGroupId: '', //活码分组id // hmGroupId: '', //活码分组id
passFlag: true, // 1自动通过 0否 // passFlag: true, // 1自动通过 0否
memberLabelId: 'fd6b44967aa647bcadfad10706244c56', //会员活动标签id // memberLabelId: '', //会员活动标签id
welcomeId: '' // 欢迎语id // memberLabelName: '',
// welcomeId: '', // 欢迎语id
// clerkIdList: '', // 选择导购id // clerkIdList: '', // 选择导购id
// storeId: '' //门店id // storeId: '' //门店id
// hmUserNum: null //多人活码人数 // hmUserNum: null //多人活码人数
// memberLabelStatus: -1,
// welcomeType: 1
}, },
rules: { rules: {
hmGroupId: [{ required: true, message: '请选择活码分组', trigger: 'blur' }] hmGroupId: [{ required: true, message: '请选择活码分组', trigger: 'blur' }]
...@@ -79,33 +89,40 @@ export default { ...@@ -79,33 +89,40 @@ export default {
}, },
total: 1, total: 1,
groupList: [], groupList: []
data: ''
}; };
}, },
created() { created() {
this.searchGroup(); this.searchGroup();
}, },
methods: { methods: {
getForm() {
return this.$refs.form;
},
handleTagCloseTag() {
this.form.memberLabelName = '';
this.form.memberLabelId = '';
},
saveTagPop(data) { saveTagPop(data) {
this.data = data; const { tagItemId, tagItemName } = data;
this.form.memberLabelId = tagItemId;
this.form.memberLabelName = tagItemName;
this.form.memberLabelStatus = 1;
}, },
onLoadmore() { onLoadmore() {
if (this.pageParam.pageNum >= this.total) return; if (this.pageParam.pageNum >= this.total) return;
this.pageParam.pageNum++; this.pageParam.pageNum++;
this.searchGroup(); this.searchGroup();
}, },
async searchGroup() { searchGroup() {
if (this.pageParam.pageNum == 1) { if (this.pageParam.pageNum == 1) {
this.groupList = []; 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) { if (res.data.code == 0) {
const { result, pages } = res.data.result || {}; const { result, pages } = res.data.result || {};
this.total = pages || 1; this.total = pages || 1;
if (this.pageParam.groupName != '') { if (Array.isArray(result)) {
this.groupList = result;
} else if (Array.isArray(result)) {
this.groupList = this.groupList.concat(result); this.groupList = this.groupList.concat(result);
} }
} }
...@@ -113,14 +130,10 @@ export default { ...@@ -113,14 +130,10 @@ export default {
}, },
// 远程搜索 // 远程搜索
remoteMethod(query) { remoteMethod(query) {
if (query !== '') { this.pageParam.groupName = query;
this.pageParam.groupName = query; this.pageParam.pageNum = 1;
this.pageParam.pageNum = 1; this.groupList = [];
this.groupList = []; this.searchGroup();
this.searchGroup();
} else {
this.groupList = [];
}
}, },
visibleChange(e) { visibleChange(e) {
if (!e) { if (!e) {
...@@ -132,12 +145,35 @@ export default { ...@@ -132,12 +145,35 @@ export default {
}, },
// 保存按钮 // 保存按钮
save() { 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; return;
} }
if (this.form.welcomeType == 2) {
this.form.welcomeId = '';
}
this.$refs.form.validate(async valid => { this.$refs.form.validate(async valid => {
if (!this.$refs.welcomeItem.submit()) {
return;
}
if (valid) { 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); this.$emit('sumbit', this.form);
} }
}); });
...@@ -145,24 +181,42 @@ export default { ...@@ -145,24 +181,42 @@ export default {
}, },
watch: { watch: {
actCodeData: { actCodeData: {
deep: true,
immediate: true,
handler: function(val) { handler: function(val) {
this.form = val;
if (val) { if (val) {
this.form.hmGroupId = val.hmGroupId; // this.form.hmGroupId = val.hmGroupId;
this.form.passFlag = val.passFlag == 1 ? true : false; // this.form.passFlag = val.passFlag == 1 ? true : false;
this.form.memberLabelId = val.memberLabelId ? val.memberLabelId : ''; // this.form.memberLabelId = val.memberLabelId ? val.memberLabelId : '';
this.form.welcomeId = val.welcomeId; // 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> </script>
<style lang="less" scoped> <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 { /deep/ .el-table__body-wrapper .el-table__row .cell {
padding-left: 10px !important; padding-left: 10px !important;
line-height: 14px; // line-height: 16px;
} }
.m20 { .m20 {
margin: 20px; margin: 20px;
......
...@@ -34,19 +34,19 @@ ...@@ -34,19 +34,19 @@
<div v-if="type == 'actCode'"> <div v-if="type == 'actCode'">
<div class="title flex"> <div class="title flex">
<div class="blue-block"></div> <div class="blue-block"></div>
<span class="font-w-500 color-303133">使用成员</span> <span class="font-w-500 color-303133">关联导购</span>
</div> </div>
<el-table ref="useMemberTableRef" v-loading="loading" :data="useMemberData" tooltip-effect="dark"> <el-table ref="useMemberTableRef" v-loading="loading" :data="useMemberData" tooltip-effect="dark">
<el-table-column prop="" label="导购信息" show-overflow-tooltip min-width="185px"> <el-table-column prop="" label="导购信息" show-overflow-tooltip min-width="185px">
<template slot-scope="scope"> <template slot-scope="scope">
<p class="line-20 text-ellipsis">{{ scope.row.clerkName }}</p> <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> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="导购所属门店" show-overflow-tooltip min-width="185px"> <el-table-column prop="" label="导购所属门店" show-overflow-tooltip min-width="185px">
<template slot-scope="scope"> <template slot-scope="scope">
<p class="line-20 text-ellipsis">{{ scope.row.storeName }}</p> <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> </template>
</el-table-column> </el-table-column>
<el-table-column prop="" label="企微号" show-overflow-tooltip min-width="185px"> <el-table-column prop="" label="企微号" show-overflow-tooltip min-width="185px">
...@@ -173,7 +173,6 @@ export default { ...@@ -173,7 +173,6 @@ export default {
if (resData.code == 0) { if (resData.code == 0) {
that.total = resData.result.totalCount || 0; that.total = resData.result.totalCount || 0;
that.useMemberData = resData.result.result || []; that.useMemberData = resData.result.result || [];
// that.total = resData.result.pageInfo ? resData.result.pageInfo.total : 0;
return; return;
} }
errMsg.errorMsg(resData); errMsg.errorMsg(resData);
...@@ -196,9 +195,15 @@ export default { ...@@ -196,9 +195,15 @@ export default {
watch: { watch: {
welcomeId: function(newData, oldData) { welcomeId: function(newData, oldData) {
const that = this; const that = this;
if (!newData || newData.length <= 0) return; if (!newData || newData.length <= 0) {
this.welcomeData = null;
return;
}
that.welcomeId = newData || ''; that.welcomeId = newData || '';
that.getwelcomeInfo(); that.getwelcomeInfo();
},
useMemberData: function(newData, oldData) {
this.$emit('useMemberList', newData);
} }
} }
}; };
......
...@@ -93,7 +93,7 @@ import { getRequest, postExcel } from '@/api/api'; ...@@ -93,7 +93,7 @@ import { getRequest, postExcel } from '@/api/api';
import errMsg from '@/common/js/error'; import errMsg from '@/common/js/error';
import { _debounce } from '@/common/js/public'; import { _debounce } from '@/common/js/public';
export default { export default {
name: 'storeList', name: 'grStoreList',
props: { props: {
brandId: { brandId: {
type: String, type: String,
......
...@@ -287,6 +287,7 @@ body { ...@@ -287,6 +287,7 @@ body {
/* background-color: #f0f2f5; */ /* background-color: #f0f2f5; */
} }
body { body {
overflow-y: hidden;
-webkit-text-size-adjust: none; -webkit-text-size-adjust: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
} }
...@@ -474,10 +475,13 @@ input:focus { ...@@ -474,10 +475,13 @@ input:focus {
.p-t-185 { .p-t-185 {
padding-top: 185px; padding-top: 185px;
} }
.p-b-10{
padding-bottom: 10px;
}
.p-b-40{ .p-b-40{
padding-bottom: 40px; padding-bottom: 40px;
} }
.m-l-10 { .m-l-10 {
margin-left: 10px; margin-left: 10px;
} }
...@@ -515,6 +519,12 @@ input:focus { ...@@ -515,6 +519,12 @@ input:focus {
.m-t-46 { .m-t-46 {
margin-top: 46px; margin-top: 46px;
} }
.m-r-6{
margin-right: 6px !important;
}
.m-r-5{
margin-right: 5px;
}
.m-r-10 { .m-r-10 {
margin-right: 10px; margin-right: 10px;
} }
...@@ -524,6 +534,9 @@ input:focus { ...@@ -524,6 +534,9 @@ input:focus {
.m-r-20 { .m-r-20 {
margin-right: 20px; margin-right: 20px;
} }
.m-r-30 {
margin-right: 30px;
}
.m-b-10 { .m-b-10 {
margin-bottom: 10px; margin-bottom: 10px;
} }
...@@ -836,12 +849,12 @@ select:-webkit-autofill { ...@@ -836,12 +849,12 @@ select:-webkit-autofill {
position: absolute; position: absolute;
bottom: -30px; 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-input__inner:focus,
.el-form .el-form-item.is-success .el-textarea__inner, .el-form .el-form-item.is-success .el-textarea__inner,
.el-form .el-form-item.is-success .el-textarea__inner:focus { .el-form .el-form-item.is-success .el-textarea__inner:focus {
border-color: #dcdfe6; border-color: #dcdfe6;
} } */
/* 开卡模板 */ /* 开卡模板 */
.template-cell-r .el-input.is-disabled .el-input__inner { .template-cell-r .el-input.is-disabled .el-input__inner {
...@@ -1158,11 +1171,7 @@ button.el-button--primary.is-plain:focus { ...@@ -1158,11 +1171,7 @@ button.el-button--primary.is-plain:focus {
background-color: #2f54ed; background-color: #2f54ed;
border-color: #2f54ed; border-color: #2f54ed;
} }
button.el-button--danger.is-plain {
color: #F5222D;
background: #fff;
border-color: #c4c6cf;
}
/* 拖拽 */ /* 拖拽 */
.sortable-chosen.sortable-ghost .li-cell { .sortable-chosen.sortable-ghost .li-cell {
...@@ -1332,8 +1341,12 @@ button.el-button--danger.is-plain { ...@@ -1332,8 +1341,12 @@ button.el-button--danger.is-plain {
.material-body .el-textarea .el-textarea__inner { .material-body .el-textarea .el-textarea__inner {
height: 273px; 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 { .damolish .no-empty-icon-table .el-table__empty-block {
display: none; display: none;
...@@ -1440,4 +1453,20 @@ ui调整 ...@@ -1440,4 +1453,20 @@ ui调整
font-size: 12px; font-size: 12px;
color: #909399; color: #909399;
line-height: 17px; 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