index.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. <template>
  2. <div class="app-container">
  3. <div class="conPanel">
  4. <el-row class="ht50p" :gutter="20">
  5. <el-col class="ht100p" :span="7">
  6. <div class="cardDiv">
  7. <div class="cardTitle">客户年龄段性别分布</div>
  8. <bar-two-way-chart
  9. id="barTwoWayChart"
  10. :width="width"
  11. :height="height"
  12. :data="barTwoWayChartData" />
  13. </div>
  14. </el-col>
  15. <el-col class="ht100p" :span="17">
  16. <div class="cardDiv">
  17. <div class="cardTitle">查询条件</div>
  18. <div class="lunboDiv">
  19. <div class="wrapper horizontal demo1">
  20. <ul class="container" style=" transform-style: preserve-3d;transform: rotateX(-5deg) rotateY(0deg);">
  21. <li class="cards-list" v-for="(item,index) in lunboData" :key="index">
  22. <div class="img">
  23. <img class="iconImg" :src="item.iconSrc" alt="">
  24. <img class="shadowImg" src="../assets/image/shadow.png" alt="">
  25. </div>
  26. <div class="main-con">
  27. <div class="name">{{item.name}}</div>
  28. <img src="../assets/image/ItalicsLine.png" alt="">
  29. </div>
  30. </li>
  31. </ul>
  32. </div>
  33. </div>
  34. <div class="infoLeft">
  35. <img class="lineImg" src="../assets/image/line.png" alt="">
  36. <el-button class="lunboSearchBtn" icon="el-icon-search" circle @click="toUserInfoList"></el-button>
  37. <el-form v-if="lunboActiveIndex == 0" ref="conditionData" :model="conditionData" label-width="96px">
  38. <el-form-item class="formItemFull" label="业绩归属:" size="mini">
  39. <el-input v-model="conditionData.yj"></el-input>
  40. </el-form-item>
  41. <el-form-item class="formItemFull" label="年缴费区间:" size="mini">
  42. <el-input v-model="conditionData.jfS" style="width: 43%;"></el-input>
  43. &nbsp;-&nbsp;
  44. <el-input v-model="conditionData.jfE" style="width: 43%;"></el-input>
  45. </el-form-item>
  46. <el-form-item class="formItemFull" label="投保年份:" size="mini">
  47. <el-input v-model="conditionData.money"></el-input>
  48. </el-form-item>
  49. <el-form-item class="formItemFull" label="险种类别:" size="mini">
  50. <el-select v-model="conditionData.num">
  51. <el-option label="险种类别1" value="有效"></el-option>
  52. <el-option label="险种类别2" value="无效"></el-option>
  53. <el-option label="险种类别3" value="无效"></el-option>
  54. <el-option label="险种类别4" value="无效"></el-option>
  55. </el-select>
  56. </el-form-item>
  57. <el-form-item class="formItemFull" label="保额区间:" size="mini">
  58. <el-input v-model="conditionData.name" style="width: 43%;"></el-input>
  59. &nbsp;-&nbsp;
  60. <el-input v-model="conditionData.name" style="width: 43%;"></el-input>
  61. </el-form-item>
  62. </el-form>
  63. <el-form v-if="lunboActiveIndex == 1" :inline="true" ref="conditionData" :model="conditionData" label-width="96px">
  64. <el-form-item class="formItem" label="年龄:" size="mini">
  65. <el-input v-model="conditionData.name"></el-input>
  66. </el-form-item>
  67. <el-form-item class="formItem" label="性别:" size="mini">
  68. <el-select v-model="conditionData.num">
  69. <el-option label="男" value="男"></el-option>
  70. <el-option label="女" value="女"></el-option>
  71. </el-select>
  72. </el-form-item>
  73. <el-form-item class="formItem" label="省份:" size="mini">
  74. <el-select v-model="conditionData.num">
  75. <el-option label="河南" value="河南"></el-option>
  76. <el-option label="河北" value="河北"></el-option>
  77. </el-select>
  78. </el-form-item>
  79. <el-form-item class="formItem" label="学历:" size="mini">
  80. <el-input v-model="conditionData.name"></el-input>
  81. </el-form-item>
  82. <el-form-item class="formItem" label="保单件数:" size="mini">
  83. <el-select v-model="conditionData.num">
  84. <el-option label="3张以下" value="有效"></el-option>
  85. <el-option label="4-7张" value="无效"></el-option>
  86. <el-option label="8-10张" value="无效"></el-option>
  87. <el-option label="10张以上" value="无效"></el-option>
  88. </el-select>
  89. </el-form-item>
  90. <el-form-item class="formItem" label="客户类型:" size="mini">
  91. <el-select v-model="conditionData.num">
  92. <el-option label="客户类型1" value="有效"></el-option>
  93. <el-option label="客户类型2" value="无效"></el-option>
  94. <el-option label="客户类型3" value="无效"></el-option>
  95. <el-option label="客户类型4" value="无效"></el-option>
  96. </el-select>
  97. </el-form-item>
  98. <el-form-item class="formItem" label="核心客户号:" size="mini">
  99. <el-input v-model="conditionData.name"></el-input>
  100. </el-form-item>
  101. <el-form-item class="formItem" label="客户层级:" size="mini">
  102. <el-input v-model="conditionData.name"></el-input>
  103. </el-form-item>
  104. <el-form-item class="formItemFull labelM" label="参与方进入时间:" size="mini">
  105. <el-date-picker
  106. v-model="cyfDate"
  107. type="date"
  108. placeholder="选择日期">
  109. </el-date-picker>
  110. </el-form-item>
  111. </el-form>
  112. <el-form v-if="lunboActiveIndex == 2" ref="conditionData" :model="conditionData" label-width="96px">
  113. <el-form-item class="formItemFull" label="年收入:" size="mini">
  114. <el-input v-model="conditionData.name"></el-input>
  115. </el-form-item>
  116. </el-form>
  117. <el-form v-if="lunboActiveIndex == 3" ref="conditionData" :model="conditionData" label-width="96px">
  118. <el-form-item class="formItemFull" label="投保对象:" size="mini">
  119. <el-input v-model="conditionData.name"></el-input>
  120. </el-form-item>
  121. </el-form>
  122. <el-form v-if="lunboActiveIndex == 4" ref="conditionData" :model="conditionData" label-width="196px">
  123. <el-form-item class="formItemFull" label="是否理赔:" size="mini">
  124. <el-radio v-model="conditionData.radio" label="1">是</el-radio>
  125. <el-radio v-model="conditionData.radio" label="2">否</el-radio>
  126. </el-form-item>
  127. <el-form-item class="formItemFull" label="是否有效:" size="mini">
  128. <el-radio v-model="conditionData.radio" label="1">是</el-radio>
  129. <el-radio v-model="conditionData.radio" label="2">否</el-radio>
  130. </el-form-item>
  131. <el-form-item class="formItemFull" label="是否关注官微:" size="mini">
  132. <el-radio v-model="conditionData.radio" label="1">是</el-radio>
  133. <el-radio v-model="conditionData.radio" label="2">否</el-radio>
  134. </el-form-item>
  135. <el-form-item class="formItemFull" label="是否注册官微:" size="mini">
  136. <el-radio v-model="conditionData.radio" label="1">是</el-radio>
  137. <el-radio v-model="conditionData.radio" label="2">否</el-radio>
  138. </el-form-item>
  139. </el-form>
  140. </div>
  141. <!-- <div class="infoRight">-->
  142. <!-- <div v-if="lunboActiveIndex == 0">-->
  143. <!-- <div class="infoItem">-->
  144. <!-- <div class="infoItemTitle">基本信息</div>-->
  145. <!-- <el-row class="infoCon">-->
  146. <!-- <el-col :span="12">性别:{{conditionData.sex}}</el-col>-->
  147. <!-- <el-col :span="12">年龄:{{conditionData.age}}</el-col>-->
  148. <!-- </el-row>-->
  149. <!-- </div>-->
  150. <!-- <div class="infoItem">-->
  151. <!-- <div class="infoItemTitle">客户标签</div>-->
  152. <!-- <el-row class="infoCon">-->
  153. <!-- <el-col :span="12" v-for="(item,index) in conditionData.tag" :key="index">{{item}}</el-col>-->
  154. <!-- </el-row>-->
  155. <!-- </div>-->
  156. <!-- </div>-->
  157. <!-- <div v-else>-->
  158. <!-- </div>-->
  159. <!-- <div>-->
  160. <!-- <el-button class="searchBtn" type="primary" size="mini">查询</el-button>-->
  161. <!-- </div>-->
  162. <!-- </div>-->
  163. </div>
  164. </el-col>
  165. </el-row>
  166. <el-row class="ht50p" :gutter="20">
  167. <el-col class="ht100p" :span="7">
  168. <div class="cardDiv">
  169. <div class="cardTitle">险种类别</div>
  170. <bar-chart3
  171. id="barChart"
  172. :width="width"
  173. :height="height"
  174. :data="barChartData" />
  175. </div>
  176. </el-col>
  177. <el-col class="ht100p" :span="10">
  178. <div class="cardDiv">
  179. <div class="cardTitle">近10年有效客户数</div>
  180. <bar-chart
  181. id="barChartVistors"
  182. :width="width"
  183. :height="height"
  184. :data="barChartVistorsData" />
  185. </div>
  186. </el-col>
  187. <el-col class="ht100p" :span="7">
  188. <div class="cardDiv">
  189. <div class="cardTitle">拥有保单件数分布</div>
  190. <pie-chart
  191. id="pieChart"
  192. :width="width"
  193. :height="height"
  194. :data="pieChartData" />
  195. </div>
  196. </el-col>
  197. </el-row>
  198. </div>
  199. </div>
  200. </template>
  201. <script>
  202. import '../assets/styles/lunbo.css'
  203. import '../assets/js/empile.js'
  204. import BarTwoWayChart from './dashboard/BarTwoWayChart'
  205. import BarChart from './dashboard/BarChart2'
  206. import BarChart3 from './dashboard/BarChart3'
  207. import PieChart from './dashboard/PieChart2'
  208. import { ageSexDis, riskcode, bdNumDis } from "@/api/index";
  209. export default {
  210. name: "UserInfoDetails",
  211. components: {
  212. BarTwoWayChart,
  213. BarChart,
  214. BarChart3,
  215. PieChart
  216. },
  217. data() {
  218. return {
  219. // 客户年龄段性别分布
  220. barTwoWayChartData:{
  221. legendData:[],
  222. xAxisData:[],
  223. seriesData:[]
  224. },
  225. // 险种类别
  226. barChartData:{
  227. yAxisName:'单位:个',
  228. color:['#028FF3','#F29700'],
  229. xAxisData:[],
  230. seriesData:[]
  231. },
  232. // 拥有保单件数分布
  233. pieChartData:{
  234. color:['#0084F1','#ED475B','#F39801','#00C7FF','rgb(242,158,194)','rgb(250,216,137)','rgb(127,229,154)','rgb(33,201,205)'],
  235. seriesData:[]
  236. },
  237. // 近10年有效客户数
  238. barChartVistorsData:{
  239. yAxisName:'数量:万个',
  240. color:['#048EF3','#7FE59A','#FAD889','#F29EC2'],
  241. xAxisData:['2011', '2012', '2013', '2014', '2015', '2016', '2017'],
  242. seriesData:[
  243. {
  244. name:'白银',
  245. stack: 'vistors',
  246. data: [79, 52, 200, 334, 390, 330, 220]
  247. },
  248. {
  249. name:'黄金',
  250. stack: 'vistors',
  251. data: [80, 52, 200, 334, 390, 330, 220]
  252. },
  253. {
  254. name:'白金',
  255. stack: 'vistors',
  256. data: [30, 52, 200, 334, 390, 330, 220]
  257. },
  258. {
  259. name:'钻石',
  260. stack: 'vistors',
  261. data: [30, 52, 200, 334, 390, 330, 220]
  262. },
  263. ]
  264. },
  265. width:'100%',
  266. height:'80%',
  267. lunboActiveIndex:'0',
  268. lunboData:[
  269. {
  270. iconSrc:require('../assets/image/productInfo.png'),
  271. name:'产品信息',
  272. },
  273. {
  274. iconSrc:require('../assets/image/baseInfo.png'),
  275. name:'基本信息',
  276. },
  277. {
  278. iconSrc:require('../assets/image/money.png'),
  279. name:'资产信息',
  280. },
  281. {
  282. iconSrc:require('../assets/image/guanlian.png'),
  283. name:'关联信息',
  284. },
  285. {
  286. iconSrc:require('../assets/image/tag.png'),
  287. name:'客户标签',
  288. },
  289. ],
  290. conditionData:{
  291. name:'',
  292. status:'',
  293. money:'',
  294. num:'',
  295. sex:'女',
  296. age:'23',
  297. tag:['万能险大户','百万医疗','单身女青年','理性用户'],
  298. },
  299. cyfDate:'',
  300. }
  301. },
  302. created() {
  303. },
  304. mounted() {
  305. this.lunboFn();
  306. this.getRiskcode();
  307. this.getAgeSexDis();
  308. this.getBdNumDis();
  309. },
  310. methods: {
  311. _$ (el) {
  312. try {
  313. var item = document.querySelectorAll(el);
  314. return item.length == 1 ? item[0] : item;
  315. } catch (err) {
  316. console.log(err)
  317. }
  318. },
  319. lunboFn(){
  320. var that = this;
  321. var empile1 = new Empile(that._$('.demo1>.container'), {
  322. waitForTransition: true,
  323. isClickSlide: true,
  324. on: {
  325. // 卡片切换时执行
  326. slideChange: function () {
  327. //设置'当前显示的是第[xxx]张'元素的文本内容
  328. // activeIndexEle.textContent = this.activeIndex + 1;
  329. that.lunboActiveIndex = this.activeIndex;
  330. }
  331. },
  332. css: function (coord, absCoord) {
  333. var zIndex = 100 - absCoord,
  334. opacity = Math.pow(.92, absCoord).toFixed(3),
  335. scale = 'scale(' + Math.pow(.9, absCoord).toFixed(2) + ')',
  336. translateX = 'translateX(' + 30 * coord + 'px)',
  337. translateZ = 'translateZ(' + '105px)',
  338. rotateY= 'rotateY('+ coord * 30 +'deg)';
  339. var transform = [translateX,rotateY,translateZ].join(' ');
  340. return {
  341. zIndex: zIndex,
  342. opacity: opacity,
  343. transform: transform,
  344. }
  345. },
  346. });
  347. },
  348. toUserInfoList(){
  349. this.$router.push({ path:'/userInfoList'})
  350. },
  351. // 客户年龄段性别分布
  352. getAgeSexDis(){
  353. let that = this;
  354. ageSexDis().then(response => {
  355. console.log(response);
  356. that.barTwoWayChartData.xAxisData = response.data.xaxisData;
  357. that.barTwoWayChartData.seriesData = response.data.seriesData;
  358. that.barTwoWayChartData.legendData = response.data.legendData;
  359. this.loading = false;
  360. }
  361. );
  362. },
  363. // 险种类别
  364. getRiskcode(){
  365. let that = this;
  366. riskcode().then(response => {
  367. console.log(response);
  368. that.barChartData.xAxisData = response.data.xaxisData;
  369. that.barChartData.seriesData = response.data.seriesData;
  370. this.loading = false;
  371. }
  372. );
  373. },
  374. // 拥有保单件数分布
  375. getBdNumDis(){
  376. let that = this;
  377. bdNumDis().then(response => {
  378. console.log(response);
  379. that.pieChartData.seriesData = response.data.seriesData;
  380. this.loading = false;
  381. }
  382. );
  383. },
  384. }
  385. };
  386. </script>
  387. <style lang="scss" scoped>
  388. .conPanel{
  389. width: 97%;
  390. height: 96%;
  391. position: absolute;
  392. .cardDiv {
  393. height: 95%;
  394. position: relative;
  395. margin-top: 5px;
  396. background:#FFF;
  397. border-radius:3px;
  398. /*border: 1px solid #122E83;*/
  399. box-sizing: border-box;
  400. /*position:relative;*/
  401. /*&.cardBg{*/
  402. /* background: url("../assets/image/cardBg.png") no-repeat;*/
  403. /* background-size: 100% 100%;*/
  404. /* }*/
  405. /* &.cardBg2{*/
  406. /* background: url("../assets/image/cardBg2.png") no-repeat;*/
  407. /* background-size: 100% 100%;*/
  408. /* }*/
  409. /* &.cardBg3{*/
  410. /* background: url("../assets/image/cardBg3.png") no-repeat;*/
  411. /* background-size: 100% 100%;*/
  412. /* }*/
  413. .cardTitle {
  414. height: 32px;
  415. line-height: 32px;
  416. font-size: 14px;
  417. color: #164993;
  418. font-weight: bold;
  419. padding: 0 15px;
  420. box-sizing: border-box;
  421. background: #DCE4F7;
  422. }
  423. }
  424. }
  425. .ht100p{
  426. height: 100%;
  427. }
  428. .ht50p{
  429. height: 50%;
  430. }
  431. </style>