Browse Source

Merge branch 'master' of http://101.200.220.49:8001/xiuli.gao/playlet

xiuli.gao 2 years ago
parent
commit
9e8310ec07

+ 6 - 0
.idea/misc.xml

@@ -0,0 +1,6 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="WebPackConfiguration">
4
+    <option name="mode" value="DISABLED" />
5
+  </component>
6
+</project>

+ 52 - 1
project/package-lock.json

@@ -4432,6 +4432,11 @@
4432 4432
         }
4433 4433
       }
4434 4434
     },
4435
+    "file-saver": {
4436
+      "version": "2.0.5",
4437
+      "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
4438
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
4439
+    },
4435 4440
     "file-uri-to-path": {
4436 4441
       "version": "1.0.0",
4437 4442
       "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@@ -9786,7 +9791,8 @@
9786 9791
     "raw-loader": {
9787 9792
       "version": "0.5.1",
9788 9793
       "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
9789
-      "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao="
9794
+      "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=",
9795
+      "dev": true
9790 9796
     },
9791 9797
     "read-cache": {
9792 9798
       "version": "1.0.0",
@@ -10393,6 +10399,7 @@
10393 10399
       "version": "0.7.2",
10394 10400
       "resolved": "https://registry.npmjs.org/script-loader/-/script-loader-0.7.2.tgz",
10395 10401
       "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==",
10402
+      "dev": true,
10396 10403
       "requires": {
10397 10404
         "raw-loader": "~0.5.1"
10398 10405
       }
@@ -12866,6 +12873,16 @@
12866 12873
       "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
12867 12874
       "dev": true
12868 12875
     },
12876
+    "wmf": {
12877
+      "version": "1.0.2",
12878
+      "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
12879
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
12880
+    },
12881
+    "word": {
12882
+      "version": "0.3.0",
12883
+      "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz",
12884
+      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
12885
+    },
12869 12886
     "wordwrap": {
12870 12887
       "version": "0.0.2",
12871 12888
       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
@@ -12928,6 +12945,40 @@
12928 12945
         "safe-buffer": "~5.1.0"
12929 12946
       }
12930 12947
     },
12948
+    "xlsx": {
12949
+      "version": "0.18.5",
12950
+      "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz",
12951
+      "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
12952
+      "requires": {
12953
+        "adler-32": "~1.3.0",
12954
+        "cfb": "~1.2.1",
12955
+        "codepage": "~1.15.0",
12956
+        "crc-32": "~1.2.1",
12957
+        "ssf": "~0.11.2",
12958
+        "wmf": "~1.0.1",
12959
+        "word": "~0.3.0"
12960
+      },
12961
+      "dependencies": {
12962
+        "codepage": {
12963
+          "version": "1.15.0",
12964
+          "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
12965
+          "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
12966
+        },
12967
+        "frac": {
12968
+          "version": "1.1.2",
12969
+          "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
12970
+          "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
12971
+        },
12972
+        "ssf": {
12973
+          "version": "0.11.2",
12974
+          "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
12975
+          "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
12976
+          "requires": {
12977
+            "frac": "~1.1.2"
12978
+          }
12979
+        }
12980
+      }
12981
+    },
12931 12982
     "xlsx-style": {
12932 12983
       "version": "0.8.13",
12933 12984
       "resolved": "https://registry.npmjs.org/xlsx-style/-/xlsx-style-0.8.13.tgz",

+ 1 - 2
project/package.json

@@ -22,7 +22,6 @@
22 22
     "md5": "^2.3.0",
23 23
     "node-sass": "^4.12.0",
24 24
     "sass-loader": "^7.1.0",
25
-    "script-loader": "^0.7.2",
26 25
     "switch-address": "^1.0.4",
27 26
     "vue": "^2.5.2",
28 27
     "vue-axios": "^3.2.5",
@@ -52,7 +51,7 @@
52 51
     "css-loader": "^0.28.0",
53 52
     "echarts": "^5.2.2",
54 53
     "extract-text-webpack-plugin": "^3.0.0",
55
-    "file-loader": "^1.1.4",
54
+    "file-loader": "^1.1.11",
56 55
     "friendly-errors-webpack-plugin": "^1.6.1",
57 56
     "html-webpack-plugin": "^2.30.1",
58 57
     "node-notifier": "^5.1.2",

+ 13 - 2
project/src/components/customManage/manage.vue

@@ -126,8 +126,11 @@
126 126
       <shielding-user @cancel='shieldingUserCancel' :shieldingData='shieldingData'></shielding-user>
127 127
     </el-dialog>
128 128
 
129
-    <el-drawer size="50%" :visible.sync="detialDrawer" :with-header="false">
130
-      <detial></detial>
129
+    <el-drawer
130
+      :size="drawerSize"
131
+      :visible.sync="detialDrawer"
132
+      :with-header="false">
133
+      <detial @changeDrawerSize="changeDrawerSize" @closeDrawer="closeDrawer"></detial>
131 134
     </el-drawer>
132 135
   </div>
133 136
 </template>
@@ -146,6 +149,7 @@ export default {
146 149
   components: { detial, selfInput, selfCustomerservice, enterpriseTag, datePicker, selfChannel, selfGender, lossBody, screenPay, shieldingUser },
147 150
   data () {
148 151
     return {
152
+      drawerSize:'60%',
149 153
       detialDrawer: false,
150 154
       loading: false,
151 155
       page: 1,
@@ -179,6 +183,12 @@ export default {
179 183
     this.init(1)
180 184
   },
181 185
   methods: {
186
+        changeDrawerSize(){
187
+    this.drawerSize = this.drawerSize == '100%' ? '60%' : '100%'
188
+  },
189
+  closeDrawer(){
190
+    this.detialDrawer = false
191
+  },
182 192
     resetEvent () {//重置
183 193
       this.resetFlag = !this.resetFlag
184 194
       this.input_keyword = '';
@@ -294,6 +304,7 @@ export default {
294 304
 
295 305
     },
296 306
     showDetial () {
307
+      this.drawerSize = '60%'
297 308
       this.detialDrawer = true
298 309
     }
299 310
   }

+ 201 - 33
project/src/components/detials/customerProfile.vue

@@ -1,43 +1,88 @@
1 1
 <template>
2
-  <div>
2
+<!--  v-loading="loading"-->
3
+  <div >
3 4
     <div class="bigTitle">
4 5
       <i class="el-icon-user-solid"></i>
5 6
       <span>添加客服信息</span>
6 7
     </div>
7 8
     <div class="tableBox_detial">
8
-      <el-table
9
-        :data="tableData"
10
-        :header-cell-class-name="headerClassName"
11
-        border
12
-        style="width: 100%">
13
-        <el-table-column
14
-          label="所属员工"
15
-          class-name="self-column">
16
-          <template >
17
-            <div class="flex">
18
-              <img src="@/assets/img/userDefault.png" alt="" width="40px">
19
-              <span>莲雾</span>
20
-            </div>
21
-          </template>
22
-        </el-table-column>
23
-        <el-table-column
24
-          class-name="self-column"
25
-          prop="name"
26
-          label="其他客户来源">
27
-        </el-table-column>
28
-        <el-table-column
29
-          class-name="self-column"
30
-          prop="address"
31
-          label="添加时间">
32
-        </el-table-column>
33
-        <el-table-column
34
-          class-name="self-column"
35
-          prop="address"
36
-          label="最近沟通">
37
-        </el-table-column>
38
-      </el-table>
9
+      <el-skeleton :loading="loading" animated>
10
+        <template slot="template">
11
+          <el-skeleton-item animated style="height: 100px"/>
12
+        </template>
13
+        <template>
14
+          <el-table
15
+            :data="tableData"
16
+            :header-cell-class-name="headerClassName"
17
+            border
18
+            style="width: 100%">
19
+            <el-table-column
20
+              label="所属员工"
21
+              class-name="self-column">
22
+              <template >
23
+                <div class="flex-align-center">
24
+                  <img src="@/assets/img/userDefault.png" alt="" width="40px">
25
+                  <span class="lMar8">莲雾</span>
26
+                </div>
27
+              </template>
28
+            </el-table-column>
29
+            <el-table-column
30
+              class-name="self-column"
31
+              prop="name"
32
+              label="其他客户来源">
33
+            </el-table-column>
34
+            <el-table-column
35
+              class-name="self-column"
36
+              prop="address"
37
+              label="添加时间">
38
+            </el-table-column>
39
+            <el-table-column
40
+              class-name="self-column"
41
+              prop="address"
42
+              label="最近沟通">
43
+            </el-table-column>
44
+          </el-table>
45
+        </template>
46
+      </el-skeleton>
39 47
     </div>
40 48
 
49
+    <div class="bigTitle tMar30">
50
+      <i class="el-icon-user-solid"></i>
51
+      <span>基本信息</span>
52
+      <span style="color: #898D92;font-weight: 400;margin-left: 6px">所属员工可在「侧边栏-客户画像」中进行编辑</span>
53
+    </div>
54
+    <el-skeleton :loading="loading" animated>
55
+      <template slot="template">
56
+        <el-skeleton-item animated style="height: 140px"/>
57
+      </template>
58
+      <template>
59
+        <div class="tableBox_detial flexWrap" style="border: 1px solid #D2D2D2">
60
+          <div v-for="(b,bidx) in basicInfo" :key="bidx" class="basic_item"
61
+               :style="[{borderBottom:(b.name == '企业' || b.name == '微博') ? 'none' : '' },{borderRight:bidx%2!==0 ? 'none' : ''}]">
62
+            <div class="name">{{b.name}}</div>
63
+            <div class="value">
64
+              <template v-if="b.name == '生日'">
65
+                <el-date-picker class="ipt"
66
+                                v-focus
67
+                                v-if="b.itpShow"
68
+                                @blur="iptBlur(bidx)"
69
+                                v-model="b.value"
70
+                                type="date"
71
+                                value-format="yyyy-MM-dd"
72
+                                :placeholder="'请输入'+b.name">
73
+                </el-date-picker>
74
+                <span @click="b.itpShow = true" class="text" v-else>{{b.value?b.value:'-'}}</span>
75
+              </template>
76
+              <template v-else>
77
+                <el-input class="ipt" v-focus v-model="b.value" :placeholder="'请输入'+b.name" v-if="b.itpShow" @blur="iptBlur(bidx)"></el-input>
78
+                <span @click="b.itpShow = true" class="text" v-else>{{b.value?b.value:'-'}}</span>
79
+              </template>
80
+            </div>
81
+          </div>
82
+        </div>
83
+      </template>
84
+    </el-skeleton>
85
+
41 86
   </div>
42 87
 </template>
43 88
 
@@ -46,16 +91,101 @@ export default {
46 91
   name: "customerProfile",
47 92
   data(){
48 93
     return{
94
+      loading:false,
49 95
       tableData: [{
50 96
         date: '2016-05-02',
51 97
         name: '王小虎',
52 98
         address: '上海市普陀区金沙江路 1518 弄'
53
-      }]
99
+      }],
100
+      basicInfo:[
101
+        {
102
+          name:'性别',
103
+          key:'sex',
104
+          value:'',
105
+          itpShow:false
106
+        },
107
+        {
108
+          name:'地址',
109
+          key:'sex',
110
+          value:'',
111
+          itpShow:false
112
+        },
113
+        {
114
+          name:'年龄',
115
+          key:'sex',
116
+          value:'',
117
+          itpShow:false
118
+        },
119
+        {
120
+          name:'生日',
121
+          key:'sex',
122
+          value:'',
123
+          itpShow:false
124
+        },
125
+        {
126
+          name:'描述',
127
+          key:'sex',
128
+          value:'',
129
+          itpShow:false
130
+        },
131
+        {
132
+          name:'邮箱',
133
+          key:'sex',
134
+          value:'',
135
+          itpShow:false
136
+        },
137
+        {
138
+          name:'电话',
139
+          key:'sex',
140
+          value:'',
141
+          itpShow:false
142
+        },
143
+        {
144
+          name:'职位',
145
+          key:'sex',
146
+          value:'',
147
+          itpShow:false
148
+        },
149
+        {
150
+          name:'QQ',
151
+          key:'sex',
152
+          value:'',
153
+          itpShow:false
154
+        },
155
+        {
156
+          name:'来源',
157
+          key:'sex',
158
+          value:'',
159
+          itpShow:false
160
+        },
161
+        {
162
+          name:'企业',
163
+          key:'sex',
164
+          value:'',
165
+          itpShow:false
166
+        },
167
+        {
168
+          name:'微博',
169
+          key:'sex',
170
+          value:'',
171
+          itpShow:false
172
+        }
173
+      ]
174
+    }
175
+  },
176
+  directives:{
177
+    focus:{
178
+      inserted : function (el){
179
+        el.querySelector('input').focus()
180
+      }
54 181
     }
55 182
   },
56 183
   methods:{
57 184
     headerClassName(){
58 185
       return 'headerClass'
186
+    },
187
+    iptBlur(index){
188
+      this.basicInfo[index].itpShow = false
59 189
     }
60 190
   }
61 191
 }
@@ -67,6 +197,43 @@ export default {
67 197
     font-weight: 400;
68 198
     color: #666;
69 199
   }
200
+  .basic_item{
201
+    width: 50%;
202
+    font-size: 14px;
203
+    display: flex;
204
+    align-items: center;
205
+    line-height: 44px;
206
+    border-bottom: 1px solid #D2D2D2;
207
+    border-right: 1px solid #D2D2D2;
208
+    .value{
209
+      padding: 0 20px;
210
+      width: 100%;
211
+      .ipt{
212
+        width: 80%;
213
+        .el-input__inner{
214
+          height: 30px;
215
+          line-height: 30px;
216
+        }
217
+      }
218
+      .text{
219
+        width: 80%;
220
+        height: 30px;
221
+        line-height: 30px;
222
+        display:inline-block;
223
+      }
224
+      .text:hover{
225
+        border-bottom: 1px solid #333;
226
+        cursor: text;
227
+      }
228
+    }
229
+    .name{
230
+      color: #666;
231
+      background: #FBFBFB;
232
+      width: 30%;
233
+      padding-left: 20px;
234
+      border-right: 1px solid #D2D2D2;
235
+    }
236
+  }
70 237
 }
71 238
 </style>
72 239
 
@@ -76,6 +243,7 @@ export default {
76 243
   font-size: 14px;
77 244
   margin-left: 5px;
78 245
   font-weight: 600;
246
+  margin-bottom: 10px;
79 247
 }
80 248
 .tableBox_detial{
81 249
   font-size: 14px;

+ 119 - 2
project/src/components/detials/customerStatus.vue

@@ -1,13 +1,130 @@
1 1
 <template>
2
+  <div v-loading="loading" class="con">
3
+    <div v-for="(l,idx) in list" :key="idx">
4
+      <div class="dayDate">{{l.date}}{{l.week}}</div>
5
+      <div v-for="(s,sIdx) in l.sub" :key="sIdx" class="subBox" :class="sIdx==0 ? 'tMar17' : ''">
6
+        <div class="subBox_line">
7
+          <i class="el-icon-price-tag f16"></i>
8
+          <div class="splitLine"></div>
9
+        </div>
10
+        <div class="lMar8">
11
+          <div class="dayTime">{{s.time}}</div>
12
+          <div class="behavior_box">
13
+            <div class="behavior">{{s.opa}}</div>
14
+            <div class="behavior_detial"><span class="fWeight600">{{s.name1}}</span> 添加了 <span class="fWeight600">{{s.name2}}</span> 为好友</div>
15
+          </div>
16
+        </div>
17
+      </div>
18
+    </div>
19
+
20
+  </div>
2 21
 
3 22
 </template>
4 23
 
5 24
 <script>
6 25
 export default {
7
-  name: "customerStatus"
26
+  name: "customerStatus",
27
+  data(){
28
+    return{
29
+      loading:false,
30
+      list:[
31
+        {
32
+          date:'2022-03-18',
33
+          week:'星期三',
34
+          sub:[
35
+            {
36
+              time:'10.45',
37
+              opa:'添加好友',
38
+              name1:'黄金菊',
39
+              name2:'蛋卷',
40
+            }
41
+          ]
42
+        },
43
+        {
44
+          date:'2022-03-18',
45
+          week:'星期三',
46
+          sub:[
47
+            {
48
+              time:'10.45',
49
+              opa:'添加好友',
50
+              name1:'黄金菊',
51
+              name2:'蛋卷',
52
+            },
53
+            {
54
+              time:'10.45',
55
+              opa:'添加好友',
56
+              name1:'黄金菊',
57
+              name2:'蛋卷',
58
+            },
59
+            {
60
+              time:'10.45',
61
+              opa:'添加好友',
62
+              name1:'黄金菊',
63
+              name2:'蛋卷',
64
+            }
65
+          ]
66
+        },
67
+        {
68
+          date:'2022-03-18',
69
+          week:'星期三',
70
+          sub:[
71
+            {
72
+              time:'10.45',
73
+              opa:'添加好友',
74
+              name1:'黄金菊',
75
+              name2:'蛋卷',
76
+            }
77
+          ]
78
+        }
79
+      ]
80
+    }
81
+  }
8 82
 }
9 83
 </script>
10 84
 
11
-<style scoped>
85
+<style lang="scss" scoped>
86
+.con{
87
+  .dayDate{
88
+    font-size: 14px;
89
+    font-weight: 600;
90
+    color: #333;
91
+    margin-top: 20px;
92
+  }
93
+  .subBox{
94
+    display: flex;
95
+    align-items: flex-start;
96
+    .dayTime{
97
+      font-size: 14px;
98
+      color: #999;
99
+    }
100
+    .subBox_line{
101
+      display: flex;
102
+      flex-direction: column;
103
+      align-items: center;
104
+      .splitLine{
105
+        width: 1px;
106
+        height: 120px;
107
+        border-left: 1px dashed #979797;
108
+      }
109
+    }
110
+
111
+    .behavior_box{
112
+      margin-top: 15px;
113
+      background: #F5FFFD;
114
+      border: 1px solid #00B38A;
115
+      padding: 20px 18px 25px;
116
+      .behavior{
117
+        font-size: 16px;
118
+        font-weight: 600;
119
+        color: #333;
120
+        margin-bottom: 10px;
121
+      }
122
+      .behavior_detial{
123
+
124
+      }
125
+    }
126
+  }
12 127
 
128
+
129
+}
13 130
 </style>

+ 343 - 32
project/src/components/detials/index.vue

@@ -1,46 +1,181 @@
1 1
 <template>
2 2
   <div class="detialCon">
3 3
     <div class="title padCon">
4
-      <div>客户详情</div>
4
+      <div class="flex">
5
+        客户详情
6
+        <span class="lMar8">
7
+          <el-tooltip effect="light" content="上一位" placement="bottom">
8
+            <i class="el-icon-arrow-left f16"></i>
9
+          </el-tooltip>
10
+        </span>
11
+        <span class="lMar8">
12
+           <el-tooltip effect="light" content="下一位" placement="bottom">
13
+            <i class="el-icon-arrow-right f16"></i>
14
+          </el-tooltip>
15
+        </span>
16
+      </div>
5 17
       <div>
6
-        <i class="el-icon-plus"></i>
7
-        <i class="el-icon-close"></i>
18
+        <i class="el-icon-plus pointer" @click="changeWidth"></i>
19
+        <i class="el-icon-close pointer" @click="close"></i>
8 20
       </div>
9 21
     </div>
10 22
     <div class="splitLine"></div>
11
-    <div class="infoBox padCon">
12
-      <div><img src="@/assets/img/userDefault.png" alt="" ></div>
13
-      <div>
14
-        <div class="name">
15
-          <span>我回去了</span>
16
-          <span class="bright">@微信</span>
17
-        </div>
18
-        <div class="lable">
19
-          <span>企业标签:</span>
20
-          <span class="lable_con">开发</span>
21
-          <span class="bright"><i class="el-icon-edit"></i> 编辑</span>
22
-        </div>
23
-        <div class="lable">
24
-          <span>个人标签:</span>
25
-          <span class="bright"><i class="el-icon-edit"></i> 编辑</span>
26
-        </div>
27
-      </div>
28
-
23
+    <div class= "padCon">
24
+      <el-skeleton :loading="loading" animated>
25
+        <template slot="template">
26
+          <div class="infoBox">
27
+            <el-skeleton-item variant="image" style="width: 100px;height: 100px;margin-right: 10px;"/>
28
+            <div style="width: 30%">
29
+              <el-skeleton-item animated/>
30
+              <el-skeleton-item class="tMar20" animated/>
31
+              <el-skeleton-item class="tMar20" animated/>
32
+            </div>
33
+          </div>
34
+        </template>
35
+        <template>
36
+          <div class="infoBox">
37
+            <div><img src="@/assets/img/userDefault.png"  alt="" ></div>
38
+            <div>
39
+              <div class="name">
40
+                <span>我回去了</span>
41
+                <span class="bright">@微信</span>
42
+              </div>
43
+              <div class="lable">
44
+                <span>企业标签:</span>
45
+                <span class="lable_con">开发</span>
46
+                <span class="bright" @click="comLableShow = true"><i class="el-icon-edit"></i> 编辑</span>
47
+              </div>
48
+              <div class="lable">
49
+                <span>个人标签:</span>
50
+                <span class="bright" @click="selfLableShow = true"><i class="el-icon-edit"></i> 编辑</span>
51
+              </div>
52
+            </div>
53
+          </div>
54
+        </template>
55
+      </el-skeleton>
29 56
     </div>
30 57
     <div class="splitLine"></div>
31 58
     <div class="tabCon padCon">
32 59
       <div class="tabCon_bar">
33 60
         <div class="rMar60 pointer" v-for="t in tabList" :key="t.id" :class="acIdx == t.id ? 'ac_css' : ''" @click="acIdx = t.id">
34
-          <div style="margin:10px 10px 20px">{{t.name}}</div>
61
+          <div style="margin:10px 10px 15px">{{t.name}}</div>
35 62
           <div :class="acIdx == t.id ? 'bor_line_ac' : 'bor_line'"></div>
36 63
         </div>
37 64
       </div>
38 65
       <customerProfile v-if="acIdx == 0"></customerProfile>
39 66
       <customerStatus v-if="acIdx == 1"></customerStatus>
40
-      <chatRecord v-if="acIdx == 2"></chatRecord>
41
-      <chatGroup v-if="acIdx == 3"></chatGroup>
67
+<!--      <chatRecord v-if="acIdx == 2"></chatRecord>-->
68
+<!--      <chatGroup v-if="acIdx == 3"></chatGroup>-->
42 69
       <order v-if="acIdx == 4"></order>
43 70
     </div>
71
+
72
+    <el-dialog
73
+      title="选择企业标签"
74
+      :visible.sync="comLableShow"
75
+      :append-to-body="true"
76
+      class="addLable_dialog"
77
+      width="30%">
78
+      <div class="addLableBox">
79
+        <div class="add" @click="iptshow = true,addLableVal = ''">+ 添加</div>
80
+        <el-input v-if="iptshow" v-focus class="ipt" v-model="addLableVal" placeholder="请输入标签" @blur="iptBlur"></el-input>
81
+        <div class="lableItem" v-for="(l,lidx) in lableArr" :key="l.id" :class="lableArr_checked.indexOf(l.id) == -1 ? '' : 'lableItemAc'" @click="switchLable(l.id)">{{l.name}}</div>
82
+      </div>
83
+      <div slot="footer" class="dialog-footer">
84
+        <div class="addLableGroup" @click="lableGroup = true">
85
+          +新建标签组
86
+        </div>
87
+        <div>
88
+          <el-button size="mini" @click="comLableShow = false">取 消</el-button>
89
+          <el-button size="mini" type="primary" @click="comLableShow = false">确 定</el-button>
90
+        </div>
91
+      </div>
92
+    </el-dialog>
93
+
94
+    <el-dialog
95
+      title="新建企业标签组"
96
+      :visible.sync="lableGroup"
97
+      :append-to-body="true"
98
+      class="addLable_dialog"
99
+      width="30%">
100
+      <div class="groupCon">
101
+        <div class="group_item">
102
+          <div class="lable">标签组名称:</div>
103
+          <div class="opaArea">
104
+            <el-input class="ipt_group" v-model="groupName" placeholder="请输入标签组名称"></el-input>
105
+          </div>
106
+        </div>
107
+        <div class="group_item">
108
+          <div class="lable">可见范围:</div>
109
+          <div class="opaArea">
110
+            <el-radio-group v-model="scopeVal">
111
+              <el-radio :label="0">全部员工</el-radio>
112
+              <el-radio :label="1">部门可用</el-radio>
113
+            </el-radio-group>
114
+          </div>
115
+        </div>
116
+        <div class="group_item" v-if="scopeVal==1">
117
+          <div class="lable">选择可用部门:</div>
118
+          <div class="pointer" style="padding: 8px 12px;border: 1px solid #D2D2D2;margin-left: 20px">
119
+            + 添加部门
120
+          </div>
121
+        </div>
122
+        <div class="group_item" style="align-items: baseline;margin-top: 10px">
123
+          <div class="lable">标签名称:</div>
124
+          <div class="opaArea">
125
+            <div v-for="(m,mIdx) in moreLable" :key="m.id" class="flex">
126
+              <el-input class="ipt_group tMar10" v-model="m.name" placeholder="请输入标签名称"></el-input>
127
+              <span v-if="moreLable&&moreLable.length>1" class="flex">
128
+                <span class="minusIptGroup" @click="moreLable.splice(mIdx,1)">-</span>
129
+                <i class="el-icon-top f18 lMar8 pointer" :class="mIdx == 0 ? 'disCss' : ''" @click="upClick(mIdx)"></i>
130
+                <i class="el-icon-bottom f18 lMar8 pointer" :class="mIdx == moreLable.length-1 ? 'disCss' : ''" @click="downClick(mIdx)"></i>
131
+              </span>
132
+            </div>
133
+            <div class="addIptGroup" @click="moreLable.push({id:moreLable.length,name:''})">+ 添加标签</div>
134
+          </div>
135
+        </div>
136
+      </div>
137
+      <div slot="footer">
138
+        <el-button size="mini" @click="lableGroup = false">取 消</el-button>
139
+        <el-button size="mini" type="primary" @click="lableGroup = false">确 定</el-button>
140
+      </div>
141
+    </el-dialog>
142
+
143
+    <el-dialog
144
+      title="个人标签"
145
+      :visible.sync="selfLableShow"
146
+      :append-to-body="true"
147
+      class="addLable_dialog"
148
+      width="30%">
149
+
150
+      <div class="groupCon">
151
+        <div class="group_item">
152
+          <div class="lable">性别:</div>
153
+          <div class="opaArea">
154
+<!--            <el-select v-model="value" placeholder="请选择">-->
155
+<!--              <el-option-->
156
+<!--                v-for="item in sexList"-->
157
+<!--                :key="item.value"-->
158
+<!--                :label="item.label"-->
159
+<!--                :value="item.value">-->
160
+<!--              </el-option>-->
161
+<!--            </el-select>-->
162
+          </div>
163
+        </div>
164
+        <div class="group_item">
165
+          <div class="lable">可见范围:</div>
166
+          <div class="opaArea">
167
+            <el-radio-group v-model="scopeVal">
168
+              <el-radio :label="0">全部员工</el-radio>
169
+              <el-radio :label="1">部门可用</el-radio>
170
+            </el-radio-group>
171
+          </div>
172
+        </div>
173
+      </div>
174
+      <div slot="footer">
175
+        <el-button size="mini" @click="selfLableShow = false">取 消</el-button>
176
+        <el-button size="mini" type="primary" @click="selfLableShow = false">确 定</el-button>
177
+      </div>
178
+    </el-dialog>
44 179
   </div>
45 180
 </template>
46 181
 
@@ -54,7 +189,21 @@ export default {
54 189
   name: "detialIndex",
55 190
   data(){
56 191
     return{
192
+      addLableVal:'',
193
+      lableArr:[
194
+        {id:0,name:'123'},
195
+        {id:1,name:'123567'},
196
+        {id:2,name:'123433'},
197
+        {id:3,name:'123778'},
198
+        {id:4,name:'12993'}
199
+      ],
200
+      lableArr_checked:[1,3],
201
+      comLableShow:false,
202
+      lableGroup:false,
203
+      selfLableShow:false,
57 204
       acIdx:0,
205
+      loading:false,
206
+      iptshow:false,
58 207
       tabList:[
59 208
         {
60 209
           id:0,
@@ -64,30 +213,181 @@ export default {
64 213
           id:1,
65 214
           name:'客户动态'
66 215
         },
67
-        {
68
-          id:2,
69
-          name:'聊天记录'
70
-        },
71
-        {
72
-          id:3,
73
-          name:'所在群聊'
74
-        },
216
+        // {
217
+        //   id:2,
218
+        //   name:'聊天记录'
219
+        // },
220
+        // {
221
+        //   id:3,
222
+        //   name:'所在群聊'
223
+        // },
75 224
         {
76 225
           id:4,
77 226
           name:'订单'
78 227
         },
228
+      ],
229
+      scopeVal:0,
230
+      groupName:'',
231
+      moreLable:[
232
+        {id:0,name:''}
79 233
       ]
80 234
     }
81 235
   },
236
+  directives:{
237
+    focus:{
238
+      inserted : function (el){
239
+        el.querySelector('input').focus()
240
+      }
241
+    }
242
+  },
82 243
   components:{
83 244
     customerProfile,
84 245
     customerStatus,
85 246
     chatGroup,
86 247
     chatRecord,
87 248
     order,
249
+  },
250
+  methods:{
251
+    changeWidth(){
252
+      this.$emit('changeDrawerSize')
253
+    },
254
+    close(){
255
+      this.$emit('closeDrawer')
256
+    },
257
+    // 上移
258
+    upClick(index) {
259
+      if(index == 0){return false}
260
+      this.moreLable = this.swapItems(this.moreLable, index, index - 1)
261
+    },
262
+    // 下移
263
+    downClick(index) {
264
+      if(index == this.moreLable.length-1){return false}
265
+      this.moreLable = this.swapItems(this.moreLable, index, index + 1)
266
+    },
267
+    swapItems(arr, index1, index2) {
268
+      arr[index1] = arr.splice(index2, 1, arr[index1])[0];
269
+      return arr;
270
+    },
271
+
272
+    iptBlur(){
273
+      this.iptshow = false
274
+      if(this.addLableVal){
275
+        this.lableArr.push({id:this.lableArr.length,name:this.addLableVal})
276
+      }
277
+    },
278
+    switchLable(id){
279
+      if(this.lableArr_checked.indexOf(id) == -1){
280
+        this.lableArr_checked.push(id)
281
+      }else{
282
+        this.lableArr_checked.forEach((i,idx)=>{
283
+          if(i == id){
284
+            this.lableArr_checked.splice(idx,1)
285
+          }
286
+        })
287
+      }
288
+
289
+    }
88 290
   }
89 291
 }
90 292
 </script>
293
+<style lang="scss">
294
+.addLable_dialog{
295
+  .addLableBox{
296
+    display: flex;
297
+    align-items: center;
298
+    flex-wrap: wrap;
299
+    .add{
300
+      padding: 4px 10px;
301
+      line-height: 20px;
302
+      text-align: center;
303
+      border: 1px solid #D2D2D2;
304
+      cursor: pointer;
305
+      margin-right: 8px;
306
+      margin-top: 10px;
307
+    }
308
+    .lableItem{
309
+      line-height: 20px;
310
+      text-align: center;
311
+      border: 1px solid #D2D2D2;
312
+      padding: 4px 10px;
313
+      background-color: #fafafa;
314
+      margin-right: 8px;
315
+      cursor: pointer;
316
+      margin-top: 10px;
317
+    }
318
+    .lableItem:hover{
319
+      //color: #00B38A;
320
+      border: 1px solid #00B38A;
321
+    }
322
+    .lableItemAc{
323
+      background-color: rgba(0,179,138,0.4);
324
+      border: 1px solid rgba(0,179,138,0.4);
325
+      color: #00B38A;
326
+    }
327
+    .ipt{
328
+      width: 120px;
329
+      margin-right: 8px;
330
+      margin-top: 10px;
331
+      .el-input__inner{
332
+        height: 30px;
333
+        line-height: 30px;
334
+      }
335
+    }
336
+  }
337
+  .dialog-footer{
338
+    display: flex;
339
+    align-items: center;
340
+    justify-content: space-between;
341
+    .addLableGroup{
342
+      font-size: 14px;
343
+      color: #00B38A;
344
+      cursor: pointer;
345
+    }
346
+  }
347
+  .groupCon{
348
+    .group_item{
349
+      display: flex;
350
+      align-items: center;
351
+      margin-top: 20px;
352
+      .lable{
353
+        width: 30%;
354
+        text-align: right;
355
+      }
356
+      .opaArea{
357
+        margin-left: 20px;
358
+        width: 50%;
359
+        .addIptGroup{
360
+          font-size: 12px;color: #00B38A;cursor: pointer;margin-top: 10px
361
+        }
362
+        .minusIptGroup{
363
+          display: inline-block;
364
+          border: 1px solid #333;
365
+          border-radius: 50%;
366
+          font-size: 18px;
367
+          width: 16px;
368
+          height: 16px;
369
+          text-align: center;
370
+          line-height: 12px;
371
+          margin-left: 10px;
372
+          color: #333;
373
+          cursor: pointer;
374
+          flex-shrink: 0;
375
+        }
376
+        .disCss{
377
+          color: rgba(0,0,0,.25)
378
+        }
379
+      }
380
+    }
381
+    .ipt_group{
382
+      .el-input__inner{
383
+        height: 36px;
384
+        line-height: 36px;
385
+      }
386
+    }
387
+  }
388
+}
389
+
390
+</style>
91 391
 
92 392
 <style lang="scss">
93 393
 .detialCon{
@@ -97,6 +397,7 @@ export default {
97 397
   .title{
98 398
     position: sticky;
99 399
     top: 0;
400
+    z-index: 2;
100 401
     background-color: #fff;
101 402
     display: flex;
102 403
     align-items: center;
@@ -104,6 +405,15 @@ export default {
104 405
     font-weight: 600;
105 406
     color: #333;
106 407
     font-size: 20px;
408
+    .el-icon-arrow-left,.el-icon-arrow-right{
409
+      width: 20px;
410
+      height: 20px;
411
+      line-height: 20px;
412
+      text-align: center;
413
+      background: #f7f8fc;
414
+      border-radius: 2px;
415
+      cursor: pointer;
416
+    }
107 417
   }
108 418
   .splitLine{
109 419
     width: 100%;
@@ -172,5 +482,6 @@ export default {
172 482
 
173 483
   }
174 484
 
485
+
175 486
 }
176 487
 </style>

+ 207 - 4
project/src/components/detials/order.vue

@@ -1,13 +1,216 @@
1 1
 <template>
2
-
2
+  <div class="con" v-loading="loading">
3
+    <div class="thead">
4
+      <div class="thead_item" v-for="(t_h,thidx) in theadList" :key="thidx">{{t_h.name}}</div>
5
+    </div>
6
+    <div class="tbody">
7
+      <div class="tbody_item" v-for="(l,lidx) in list" :key="lidx">
8
+        <div>{{l.id}}</div>
9
+        <div>{{l.date}}</div>
10
+        <div>{{l.status == 1 ? '已付款' : '未付款'}}</div>
11
+        <div class="c-00B38A fWeight600">¥{{l.amount}}</div>
12
+      </div>
13
+    </div>
14
+  </div>
3 15
 </template>
4 16
 
5 17
 <script>
6 18
 export default {
7
-  name: "order"
19
+  name: "order",
20
+  data(){
21
+    return{
22
+      loading:false,
23
+      theadList:[
24
+        {name:'订单ID'},
25
+        {name:'创建时间'},
26
+        {name:'付款状态'},
27
+        {name:'订单金额'},
28
+      ],
29
+      list:[
30
+        {
31
+          id:'12888888888888899',
32
+          date:'2022-03-18',
33
+          status:1,
34
+          amount:'34'
35
+        },
36
+       {
37
+         id:'12888888888888899',
38
+           date:'2022-03-18',
39
+         status:1,
40
+         amount:'34'
41
+       },
42
+        {
43
+          id:'12888888888888899',
44
+          date:'2022-03-18',
45
+          status:1,
46
+          amount:'34'
47
+        },
48
+        {
49
+          id:'12888888888888899',
50
+          date:'2022-03-18',
51
+          status:1,
52
+          amount:'34'
53
+        },
54
+        {
55
+          id:'12888888888888899',
56
+          date:'2022-03-18',
57
+          status:1,
58
+          amount:'34'
59
+        },
60
+        {
61
+          id:'12888888888888899',
62
+          date:'2022-03-18',
63
+          status:1,
64
+          amount:'34'
65
+        },
66
+        {
67
+          id:'12888888888888899',
68
+          date:'2022-03-18',
69
+          status:1,
70
+          amount:'34'
71
+        },
72
+        {
73
+          id:'12888888888888899',
74
+          date:'2022-03-18',
75
+          status:1,
76
+          amount:'34'
77
+        },
78
+        {
79
+          id:'12888888888888899',
80
+          date:'2022-03-18',
81
+          status:1,
82
+          amount:'34'
83
+        },
84
+        {
85
+          id:'12888888888888899',
86
+          date:'2022-03-18',
87
+          status:1,
88
+          amount:'34'
89
+        },
90
+        {
91
+          id:'12888888888888899',
92
+          date:'2022-03-18',
93
+          status:1,
94
+          amount:'34'
95
+        },
96
+        {
97
+          id:'12888888888888899',
98
+          date:'2022-03-18',
99
+          status:1,
100
+          amount:'34'
101
+        },
102
+        {
103
+          id:'12888888888888899',
104
+          date:'2022-03-18',
105
+          status:1,
106
+          amount:'34'
107
+        },
108
+        {
109
+          id:'12888888888888899',
110
+          date:'2022-03-18',
111
+          status:1,
112
+          amount:'34'
113
+        },
114
+        {
115
+          id:'12888888888888899',
116
+          date:'2022-03-18',
117
+          status:1,
118
+          amount:'34'
119
+        },
120
+        {
121
+          id:'12888888888888899',
122
+          date:'2022-03-18',
123
+          status:1,
124
+          amount:'34'
125
+        },
126
+        {
127
+          id:'12888888888888899',
128
+          date:'2022-03-18',
129
+          status:1,
130
+          amount:'34'
131
+        },
132
+        {
133
+          id:'12888888888888899',
134
+          date:'2022-03-18',
135
+          status:1,
136
+          amount:'34'
137
+        },
138
+        {
139
+          id:'12888888888888899',
140
+          date:'2022-03-18',
141
+          status:1,
142
+          amount:'34'
143
+        },
144
+        {
145
+          id:'12888888888888899',
146
+          date:'2022-03-18',
147
+          status:1,
148
+          amount:'34'
149
+        },     {
150
+          id:'12888888888888899',
151
+          date:'2022-03-18',
152
+          status:1,
153
+          amount:'34'
154
+        },
155
+        {
156
+          id:'12888888888888899',
157
+          date:'2022-03-18',
158
+          status:1,
159
+          amount:'34'
160
+        },
161
+        {
162
+          id:'12888888888888899',
163
+          date:'2022-03-18',
164
+          status:1,
165
+          amount:'34'
166
+        },
167
+        {
168
+          id:'12888888888888899',
169
+          date:'2022-03-18',
170
+          status:1,
171
+          amount:'34'
172
+        }
173
+
174
+      ]
175
+    }
176
+
177
+  }
8 178
 }
9 179
 </script>
10 180
 
11
-<style scoped>
12
-
181
+<style lang="scss" scoped>
182
+.con{
183
+  position: relative;
184
+  .thead{
185
+    background: #FBFBFB;
186
+    border: 1px solid #D2D2D2;
187
+    font-size: 14px;
188
+    color: #666;
189
+    display: flex;
190
+    align-items: center;
191
+    position: sticky;
192
+    top: 60px;
193
+    .thead_item{
194
+      width: 25%;
195
+      padding: 6px;
196
+      text-align: center;
197
+    }
198
+  }
199
+  .tbody{
200
+    .tbody_item{
201
+      margin-top: 20px;
202
+      text-align: center;
203
+      display: flex;
204
+      align-items: center;
205
+      color: #333;
206
+      font-size: 13px;
207
+      div{
208
+        width: 25%;
209
+      }
210
+      .c-00B38A{
211
+        color: #00B38A;
212
+      }
213
+    }
214
+  }
215
+}
13 216
 </style>

+ 5 - 0
project/src/style/self.scss

@@ -324,6 +324,11 @@
324 324
   align-items: center;
325 325
   justify-content: space-between;
326 326
 }
327
+.flexWrap {
328
+  display: flex;
329
+  align-items: center;
330
+  flex-wrap: wrap;
331
+}
327 332
 .flex-column{
328 333
   display: flex;
329 334
   flex-direction: column;