From d8e493052309db7180c3ee5d3ec9e01b78e12bdc Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 20 十二月 2023 09:33:17 +0800
Subject: [PATCH] Mr.Shi
---
admin/src/components/business/OperaDeviceRoleFWindow.vue | 49
admin/src/components/business/OperaVisitsDesWindow.vue | 217 +++
admin/src/views/business/laborSource.vue | 66
admin/src/views/business/empower.vue | 116 +
admin/src/views/business/visits.vue | 132 +
admin/src/views/business/retention.vue | 101 +
admin/package-lock.json | 31
admin/vue.config.js | 6
admin/src/api/business/category.js | 32
admin/src/components/business/OperaDeviceRoleWindow.vue | 64
admin/src/api/business/deviceRole.js | 32
admin/src/api/business/block.js | 23
admin/src/api/business/member.js | 48
admin/src/views/business/blackmailPersonnel.vue | 116 +
admin/src/views/business/freezePersonnel.vue | 112 +
admin/src/components/common/Tree.vue | 158 ++
admin/src/api/business/visits.js | 45
admin/src/api/business/empower.js | 40
admin/package.json | 1
admin/src/components/business/OperaDeviceWindow.vue | 45
admin/src/views/business/category.vue | 93 +
admin/src/views/business/visitorManagement.vue | 112 +
admin/src/views/index.vue | 367 ++++
admin/src/views/business/problemLog.vue | 80 +
admin/src/views/business/visitorSources.vue | 66
admin/src/views/business/internalCompany.vue | 93 +
admin/src/api/business/visitEvent.js | 8
admin/src/api/business/company.js | 42
admin/src/components/common/Menu.vue | 3
admin/src/layouts/TableLayout1.vue | 167 ++
admin/src/views/business/strandedPersonnel.vue | 115 +
admin/src/views/business/deviceRole_f.vue | 85 +
admin/src/api/business/cars.js | 32
admin/src/views/business/parks.vue | 75 +
admin/src/api/business/problems.js | 23
admin/src/api/business/problemLog.js | 16
admin/src/api/business/deviceEvent.js | 16
admin/src/components/business/OperaCompanyWindow.vue | 64
admin/src/views/business/company.vue | 114 +
admin/src/views/business/visitEvent.vue | 114 +
admin/src/components/business/OperaProblemsWindow.vue | 107 +
admin/src/layouts/AppLayout.vue | 2
admin/src/views/business/carEvent.vue | 118 +
admin/src/views/business/problems.vue | 97 +
admin/src/api/business/parks.js | 8
admin/src/components/business/OperaInternalCompanyWindow.vue | 42
admin/src/views/business/deviceRole.vue | 91 +
admin/src/components/business/OperaCategoryWindow.vue | 59
admin/src/views/business/cars.vue | 100 +
admin/src/views/business/device.vue | 95 +
admin/src/api/business/retention.js | 40
admin/src/api/business/carEvent.js | 8
admin/src/api/business/device.js | 13
admin/src/views/business/internalMember.vue | 167 ++
admin/src/components/business/OperaCarsWindow.vue | 75 +
admin/src/views/business/deviceEvent.vue | 111 +
56 files changed, 4,180 insertions(+), 72 deletions(-)
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 26079ad..0a07be0 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -4859,6 +4859,22 @@
"safer-buffer": "^2.1.0"
}
},
+ "echarts": {
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz",
+ "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
+ "requires": {
+ "tslib": "2.3.0",
+ "zrender": "5.4.4"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ }
+ }
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
@@ -14275,6 +14291,21 @@
"dev": true
}
}
+ },
+ "zrender": {
+ "version": "5.4.4",
+ "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz",
+ "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
+ "requires": {
+ "tslib": "2.3.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ }
+ }
}
}
}
diff --git a/admin/package.json b/admin/package.json
index 04c08ba..44d0bfe 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -13,6 +13,7 @@
"@riophae/vue-treeselect": "^0.4.0",
"axios": "^0.21.1",
"core-js": "^3.6.5",
+ "echarts": "^5.4.3",
"element-ui": "^2.3.6",
"js-cookie": "^2.2.1",
"js-file-download": "^0.4.12",
diff --git a/admin/src/api/business/block.js b/admin/src/api/business/block.js
new file mode 100644
index 0000000..dd3c45d
--- /dev/null
+++ b/admin/src/api/business/block.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/member/findUnusualPage', data, {
+ trim: true
+ })
+}
+
+// 浜哄憳绉婚櫎-瑙e喕
+export function updateRemoveStatusById (data) {
+ return request.post('/business/member/updateRemoveStatusById', data, {
+ trim: true
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/member/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
diff --git a/admin/src/api/business/carEvent.js b/admin/src/api/business/carEvent.js
new file mode 100644
index 0000000..51c51db
--- /dev/null
+++ b/admin/src/api/business/carEvent.js
@@ -0,0 +1,8 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/carEvent/page', data, {
+ trim: true
+ })
+}
diff --git a/admin/src/api/business/cars.js b/admin/src/api/business/cars.js
new file mode 100644
index 0000000..6aba135
--- /dev/null
+++ b/admin/src/api/business/cars.js
@@ -0,0 +1,32 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/cars/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/cars/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/cars/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/cars/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/cars/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/api/business/category.js b/admin/src/api/business/category.js
new file mode 100644
index 0000000..d44f859
--- /dev/null
+++ b/admin/src/api/business/category.js
@@ -0,0 +1,32 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/category/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/category/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/category/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/category/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/category/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/api/business/company.js b/admin/src/api/business/company.js
new file mode 100644
index 0000000..edaec75
--- /dev/null
+++ b/admin/src/api/business/company.js
@@ -0,0 +1,42 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/company/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/company/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/company/updateById', data)
+}
+
+// 閮ㄩ棬淇℃伅鍚屾
+export function companySync (data) {
+ return request.post('/business/company/sync', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/company/delete/${id}`)
+}
+
+// 鏍规嵁绫诲瀷鏌ヨ缁勭粐淇℃伅
+export function findCompanyTreePage (type) {
+ return request.get(`/business/company/findCompanyTreePage?type=${type}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/company/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/api/business/device.js b/admin/src/api/business/device.js
new file mode 100644
index 0000000..4f85769
--- /dev/null
+++ b/admin/src/api/business/device.js
@@ -0,0 +1,13 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/device/page', data, {
+ trim: true
+ })
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/device/updateById', data)
+}
diff --git a/admin/src/api/business/deviceEvent.js b/admin/src/api/business/deviceEvent.js
new file mode 100644
index 0000000..06bcc8b
--- /dev/null
+++ b/admin/src/api/business/deviceEvent.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/deviceEvent/page', data, {
+ trim: true
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/deviceEvent/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
diff --git a/admin/src/api/business/deviceRole.js b/admin/src/api/business/deviceRole.js
new file mode 100644
index 0000000..420d6bc
--- /dev/null
+++ b/admin/src/api/business/deviceRole.js
@@ -0,0 +1,32 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/deviceRole/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/deviceRole/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/deviceRole/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/deviceRole/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/deviceRole/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/api/business/empower.js b/admin/src/api/business/empower.js
new file mode 100644
index 0000000..0b24879
--- /dev/null
+++ b/admin/src/api/business/empower.js
@@ -0,0 +1,40 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/empower/page', data, {
+ trim: true
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/empower/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/empower/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/empower/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/empower/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/empower/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/api/business/member.js b/admin/src/api/business/member.js
new file mode 100644
index 0000000..0d97137
--- /dev/null
+++ b/admin/src/api/business/member.js
@@ -0,0 +1,48 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ // return request.post('/business/member/page', data, {
+ // trim: true
+ // })
+ return request.post('/business/member/findMemberInfoPage', data, {
+ trim: true
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/member/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/member/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/member/updateById', data)
+}
+
+// 鎵归噺鎷夐粦
+export function batchBlock (ids) {
+ return request.get(`/business/member/batchBlock?ids=${ids}`)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/member/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/member/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/api/business/parks.js b/admin/src/api/business/parks.js
new file mode 100644
index 0000000..d104bc2
--- /dev/null
+++ b/admin/src/api/business/parks.js
@@ -0,0 +1,8 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/parks/page', data, {
+ trim: true
+ })
+}
diff --git a/admin/src/api/business/problemLog.js b/admin/src/api/business/problemLog.js
new file mode 100644
index 0000000..fffc379
--- /dev/null
+++ b/admin/src/api/business/problemLog.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/problemLog/page', data, {
+ trim: true
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/problemLog/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
diff --git a/admin/src/api/business/problems.js b/admin/src/api/business/problems.js
new file mode 100644
index 0000000..c37c60d
--- /dev/null
+++ b/admin/src/api/business/problems.js
@@ -0,0 +1,23 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/problems/page', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/problems/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/problems/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/problems/delete/${id}`)
+}
diff --git a/admin/src/api/business/retention.js b/admin/src/api/business/retention.js
new file mode 100644
index 0000000..043ed5d
--- /dev/null
+++ b/admin/src/api/business/retention.js
@@ -0,0 +1,40 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/retention/page', data, {
+ trim: true
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/retention/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/retention/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/retention/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/retention/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/retention/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/api/business/visitEvent.js b/admin/src/api/business/visitEvent.js
new file mode 100644
index 0000000..2d5ab68
--- /dev/null
+++ b/admin/src/api/business/visitEvent.js
@@ -0,0 +1,8 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/visitEvent/page', data, {
+ trim: true
+ })
+}
diff --git a/admin/src/api/business/visits.js b/admin/src/api/business/visits.js
new file mode 100644
index 0000000..4fb1516
--- /dev/null
+++ b/admin/src/api/business/visits.js
@@ -0,0 +1,45 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/visits/page', data, {
+ trim: true
+ })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/visits/exportExcel', data, {
+ trim: true,
+ download: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/visits/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/visits/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/visits/delete/${id}`)
+}
+
+// 鏍规嵁ID鏌ヨ
+export function queryById (id) {
+ return request.get(`/business/visits/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/visits/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/components/business/OperaCarsWindow.vue b/admin/src/components/business/OperaCarsWindow.vue
new file mode 100644
index 0000000..1f7b996
--- /dev/null
+++ b/admin/src/components/business/OperaCarsWindow.vue
@@ -0,0 +1,75 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="500px"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="杞︾墝鍙�" prop="code">
+ <el-input v-model="form.code" placeholder="璇疯緭鍏ヨ溅鐗屽彿" v-trim/>
+ </el-form-item>
+ <el-form-item label="鐢ㄦ埛绫诲瀷" prop="code">
+ <el-radio-group v-model="form.code">
+ <el-radio label="鍐呴儴鍛樺伐"></el-radio>
+ <el-radio label="鍔冲姟浜哄憳"></el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="閫夋嫨鐢ㄦ埛" prop="code">
+ <el-select v-model="form.code" filterable placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鎺堟潈鏈夋晥鏈�" prop="code">
+ <el-date-picker
+ v-model="form.code"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鎺堟潈鍋滆溅鍦�" prop="code">
+ <el-radio-group v-model="form.code">
+ <el-radio label="鍏ㄩ儴鍋滆溅鍦�"></el-radio>
+ <el-radio label="閮ㄥ垎鍋滆溅鍦�"></el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaCarsWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ code: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/cars',
+ 'field.id': 'id'
+ })
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaCategoryWindow.vue b/admin/src/components/business/OperaCategoryWindow.vue
new file mode 100644
index 0000000..e074136
--- /dev/null
+++ b/admin/src/components/business/OperaCategoryWindow.vue
@@ -0,0 +1,59 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="鍏徃绫诲瀷" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ュ叕鍙哥被鍨�" v-trim/>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select v-model="form.status" placeholder="璇烽�夋嫨">
+ <el-option label="鍚敤" value="0"></el-option>
+ <el-option label="绂佺敤" value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="澶囨敞" prop="remark">
+ <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaCategoryWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ name: '',
+ remark: '',
+ status: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ name: [
+ { required: true, message: '璇疯緭鍏ュ叕鍙哥被鍨�', trigger: 'blur' }
+ ],
+ status: [
+ { required: true, message: '璇烽�夋嫨鏄惁鍚敤', trigger: 'change' }
+ ]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/category',
+ 'field.id': 'id'
+ })
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaCompanyWindow.vue b/admin/src/components/business/OperaCompanyWindow.vue
new file mode 100644
index 0000000..698a395
--- /dev/null
+++ b/admin/src/components/business/OperaCompanyWindow.vue
@@ -0,0 +1,64 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+ </el-form-item>
+ <el-form-item label="鍏徃缂栫爜" prop="code">
+ <el-input v-model="form.code" placeholder="璇疯緭鍏ュ叕鍙哥紪鐮�" v-trim/>
+ </el-form-item>
+ <el-form-item label="鍏徃绫诲瀷" prop="type">
+ <el-select v-model="form.type" placeholder="璇烽�夋嫨">
+ <el-option label="鍔冲姟鍏徃" :value="0"></el-option>
+ <el-option label="鍐呴儴缁勭粐" :value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鑱旂郴浜�" prop="linkName">
+ <el-input v-model="form.linkName" placeholder="璇疯緭鍏ヨ仈绯讳汉" v-trim/>
+ </el-form-item>
+ <el-form-item label="鎵嬫満鍙�" prop="linkPhone">
+ <el-input type="number" v-model="form.linkPhone" maxlength="11" placeholder="璇疯緭鍏ユ墜鏈哄彿" v-trim/>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaCompanyWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ name: '',
+ type: '',
+ code: '',
+ linkName: '',
+ linkPhone: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ name: [
+ { required: true, message: '璇疯緭鍏ュ叕鍙稿悕绉�', trigger: 'blur' }
+ ]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/company',
+ 'field.id': 'id'
+ })
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaDeviceRoleFWindow.vue b/admin/src/components/business/OperaDeviceRoleFWindow.vue
new file mode 100644
index 0000000..9b5e912
--- /dev/null
+++ b/admin/src/components/business/OperaDeviceRoleFWindow.vue
@@ -0,0 +1,49 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="闂ㄧ缁勫悕绉�" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ラ棬绂佺粍鍚嶇О" v-trim/>
+ </el-form-item>
+ <el-form-item label="鎺堟潈闂ㄧ" prop="doorIds">
+ <el-radio-group v-model="form.doorIds">
+ <el-radio :label="3">璁垮</el-radio>
+ <el-radio :label="6">鍔冲姟浜哄憳</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaDeviceRoleWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ name: '',
+ doorIds: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/deviceRole',
+ 'field.id': 'id'
+ })
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaDeviceRoleWindow.vue b/admin/src/components/business/OperaDeviceRoleWindow.vue
new file mode 100644
index 0000000..76ddcfb
--- /dev/null
+++ b/admin/src/components/business/OperaDeviceRoleWindow.vue
@@ -0,0 +1,64 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+ </el-form-item>
+ <el-form-item label="鏄惁榛樿" prop="isDefault">
+ <el-switch
+ v-model="form.isDefault"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="1"
+ :inactive-value="0">
+ </el-switch>
+ </el-form-item>
+ <el-form-item label="鎺堟潈闂ㄧ" prop="doorIds">
+ <el-radio-group v-model="form.doorIds">
+ <el-radio :label="3">鍏ㄩ儴闂ㄧ</el-radio>
+ <el-radio :label="6">閮ㄥ垎闂ㄧ</el-radio>
+ </el-radio-group>
+ <el-checkbox-group v-model="form.doorIds">
+ <el-checkbox label="闂ㄧA"></el-checkbox>
+ <el-checkbox label="闂ㄧB"></el-checkbox>
+ <el-checkbox label="闂ㄧC"></el-checkbox>
+ </el-checkbox-group>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaDeviceRoleWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ name: '',
+ isDefault: '',
+ doorIds: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/deviceRole',
+ 'field.id': 'id'
+ })
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaDeviceWindow.vue b/admin/src/components/business/OperaDeviceWindow.vue
new file mode 100644
index 0000000..28967d6
--- /dev/null
+++ b/admin/src/components/business/OperaDeviceWindow.vue
@@ -0,0 +1,45 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="闂ㄧ鍚嶇О" prop="title">
+ <el-input v-model="form.title" placeholder="璇疯緭鍏ラ棬绂佸悕绉�" v-trim/>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaDeviceWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ title: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ title: [
+ { required: true, message: '璇疯緭鍏ラ棬绂佸悕绉�' }
+ ]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/device',
+ 'field.id': 'id'
+ })
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaInternalCompanyWindow.vue b/admin/src/components/business/OperaInternalCompanyWindow.vue
new file mode 100644
index 0000000..5d0b5fd
--- /dev/null
+++ b/admin/src/components/business/OperaInternalCompanyWindow.vue
@@ -0,0 +1,42 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaInternalCompanyWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ name: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/company',
+ 'field.id': 'id'
+ })
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaProblemsWindow.vue b/admin/src/components/business/OperaProblemsWindow.vue
new file mode 100644
index 0000000..5fb5b7c
--- /dev/null
+++ b/admin/src/components/business/OperaProblemsWindow.vue
@@ -0,0 +1,107 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="棰樼洰" prop="title">
+ <el-input v-model="form.title" placeholder="璇疯緭鍏ラ鐩�" v-trim/>
+ </el-form-item>
+ <el-form-item label="棰樼洰绫诲瀷" prop="type">
+ <el-select v-model="form.type" placeholder="璇烽�夋嫨">
+ <el-option label="鍒ゆ柇" value="0"></el-option>
+ <el-option label="鍗曢��" value="1"></el-option>
+ <el-option label="澶氶��" value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="閫傜敤鐢ㄦ埛" prop="useType">
+ <el-radio-group v-model="form.useType">
+ <el-radio :label="0">鍔冲姟浜哄憳</el-radio>
+ <el-radio :label="1">鏅�氳瀹�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="棰樼洰椤哄簭(鍗囧簭)" prop="sortnu">
+ <el-input v-model="form.sortnu" placeholder="璇疯緭鍏�" v-trim/>
+ </el-form-item>
+ <el-form-item label="閫夐」闆嗗悎" prop="options" v-if="form.type === '1' || form.type === '2'">
+ <el-button type="primary" style="width: 120px; margin-bottom: 15px;" @click="add" icon="el-icon-plus">娣诲姞閫夐」</el-button>
+ <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab">
+ <el-tab-pane
+ v-for="item in problems"
+ :key="item.name"
+ :label="item.name"
+ :name="item.id"
+ >
+ <el-input v-model="item.val" placeholder="璇疯緭鍏�" v-trim/>
+ </el-tab-pane>
+ </el-tabs>
+ </el-form-item>
+ <el-form-item label="姝g‘绛旀" prop="answer">
+ <el-select v-model="form.answer" multiple placeholder="璇烽�夋嫨姝g‘绛旀">
+ <el-option
+ v-for="item in problems"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ name: 'OperaProblemsWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ title: '',
+ options: '',
+ answer: '',
+ sortnu: '',
+ type: '',
+ useType: ''
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ },
+ editableTabsValue: '0',
+ problems: [
+ { name: '閫夋嫨A', val: '', id: '0' }
+ ],
+ arr: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/problems',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ removeTab (e) {
+ this.problems.splice(e, 1)
+ if (e === this.editableTabsValue) {
+ this.editableTabsValue = '0'
+ }
+ this.problems.forEach((item, index) => {
+ item.name = '閫夐」' + this.arr[index]
+ item.id = index.toString()
+ })
+ },
+ add () {
+ const name = '閫夐」' + this.arr[this.problems.length]
+ this.problems.push({ name, val: '', id: this.problems.length.toString() })
+ }
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaVisitsDesWindow.vue b/admin/src/components/business/OperaVisitsDesWindow.vue
new file mode 100644
index 0000000..9cf9b28
--- /dev/null
+++ b/admin/src/components/business/OperaVisitsDesWindow.vue
@@ -0,0 +1,217 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="60%"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <div class="list">
+ <div class="list_item">
+ <div class="list_item_label">鎷滆淇℃伅</div>
+ <div class="list_item_val" v-if="info">
+ <div class="list_item_val_item">鎷滆瀵规柟锛歿{info.receptMemberName}} - {{info.receptMemberDepartment}}</div>
+ <div class="list_item_val_item">鎷滆鏃堕棿锛歿{info.starttime}} 鑷� {{info.endtime}}</div>
+ <div class="list_item_val_item">鎷滆浜嬬敱锛歿{info.reason}}</div>
+ <div class="list_item_val_item">鐢宠浜哄憳锛歿{info.name}} {{info.companyName}}</div>
+ <div class="list_item_val_item">鐢宠闂ㄧ锛歿{info.deviceList ? info.deviceList.map(item => item.name).join(',') : ''}}</div>
+ <div class="list_item_val_item">鍒涘缓鏃堕棿锛歿{info.createDate}}</div>
+ </div>
+ </div>
+ <div class="list_item">
+ <div class="list_item_label">璁垮淇℃伅</div>
+ <div class="list_item_info" v-if="info">闅忚杞﹁締锛歿{info.carNos}}</div>
+ <div class="list_item_table" v-if="info">
+ <el-table
+ :data="info.lwWithUserList ? info.lwWithUserList : []"
+ border
+ :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}"
+ style="width: 100%">
+ <el-table-column
+ prop="name"
+ label="濮撳悕">
+ </el-table-column>
+ <el-table-column
+ label="鎬у埆">
+ <template slot-scope="{row}">
+ <span v-if="row.sex === 1">鐢�</span>
+ <span v-if="row.sex === 2">濂�</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="birthday"
+ label="骞撮緞">
+ </el-table-column>
+ <el-table-column
+ prop="phone"
+ label="鎵嬫満鍙�">
+ </el-table-column>
+ <el-table-column
+ label="璇佷欢绫诲瀷">
+ <template slot-scope="{row}">
+ <span v-if="row.idcardType === 0">韬唤璇�</span>
+ <span v-if="row.idcardType === 1">娓境璇佷欢</span>
+ <span v-if="row.idcardType === 2">鎶ょ収</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="idcardNo"
+ label="韬唤璇佸彿鐮�">
+ </el-table-column>
+ <el-table-column
+ prop="companyName"
+ label="鍏徃">
+ </el-table-column>
+ <el-table-column
+ prop="faceImg"
+ label="浜鸿劯鐓х墖">
+ </el-table-column>
+ <el-table-column
+ prop="imgurl"
+ label="鍋ュ悍璇�">
+ </el-table-column>
+ </el-table>
+ </div>
+ </div>
+<!-- <div class="list_item">-->
+<!-- <div class="list_item_label">瀹℃壒娴佺▼</div>-->
+<!-- <div class="list_item_status">-->
+<!-- <div class="list_item_status_item" v-for="(item, index) in 3" :key="index">-->
+<!-- <div class="dian"></div>-->
+<!-- <div class="xian"></div>-->
+<!-- <div class="status_info">-->
+<!-- <span class="status_info_a">寮犱笁鎻愪氦鐨勫姵鍔″叆鍘傜敵璇�</span>-->
+<!-- <span class="status_info_b">鐜嬬粡鐞嗭紙宸插悓鎰忥級</span>-->
+<!-- <div class="status_info_c">鏉ヨ鍙傝宸ュ巶锛屾湜棰嗗鎵瑰噯</div>-->
+<!-- </div>-->
+<!-- </div>-->
+<!-- </div>-->
+<!-- </div>-->
+ </div>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { queryById } from '@/api/business/visits'
+export default {
+ name: 'OperaVisitsWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ list: [],
+ info: null
+ }
+ },
+ methods: {
+ open (title, id) {
+ this.title = title
+ this.visible = true
+ queryById(id)
+ .then(res => {
+ console.log(res)
+ this.info = res
+ })
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+ .list {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ .list_item {
+ width: 100%;
+ margin-bottom: 30px;
+ &:last-child {
+ margin-bottom: 0 !important;
+ }
+ .list_item_label {
+ font-size: 18px;
+ font-weight: 600;
+ color: #000000;
+ margin-bottom: 15px;
+ }
+ .list_item_info {
+ font-size: 14px;
+ color: #222222;
+ margin-bottom: 10px;
+ }
+ .list_item_status {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ .list_item_status_item {
+ width: 100%;
+ max-height: 100px;
+ position: relative;
+ margin-bottom: 30px;
+ .dian {
+ width: 15px;
+ height: 15px;
+ border-radius: 50%;
+ background: #ffb447;
+ position: absolute;
+ left: 0;
+ top: 50%;
+ transform: translate(0, -50%);
+ }
+ .xian {
+ width: 1px;
+ height: calc(100% + 30px);
+ background: #ffb447;
+ position: absolute;
+ top: 50%;
+ left: 7px;
+ transform: translate(-50%, 0);
+ }
+ .status_info {
+ /*width: 100%;*/
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ margin-left: 30px;
+ box-sizing: border-box;
+ .status_info_a {
+ font-size: 16px;
+ color: black;
+ margin-bottom: 10px;
+ }
+ .status_info_b {
+ font-size: 13px;
+ color: #666666;
+ margin-bottom: 10px;
+ }
+ .status_info_c {
+ padding: 5px 10px;
+ background: #ececec;
+ font-size: 13px;
+ color: black;
+ border-radius: 5px;
+ box-sizing: border-box;
+ }
+ }
+ }
+ }
+ .list_item_val {
+ width: 100%;
+ margin-bottom: 15px;
+ &:last-child {
+ margin-bottom: 0 !important;
+ }
+ .list_item_val_item {
+ font-size: 14px;
+ color: #222222;
+ margin-bottom: 5px;
+ &:last-child {
+ margin-bottom: 0 !important;
+ }
+ }
+ }
+ }
+ }
+</style>
diff --git a/admin/src/components/common/Menu.vue b/admin/src/components/common/Menu.vue
index 9cdad55..d11fb80 100644
--- a/admin/src/components/common/Menu.vue
+++ b/admin/src/components/common/Menu.vue
@@ -5,13 +5,14 @@
<h1 :class="{hidden: menuData.collapse}">璞嗙背璺宠烦</h1>
</div>
<scrollbar>
+<!-- :default-openeds="defaultOpeneds"-->
<el-menu
ref="menu"
+ :unique-opened="true"
:default-active="activeIndex"
text-color="#fff"
active-text-color="#fff"
:collapse="menuData.collapse"
- :default-openeds="defaultOpeneds"
:collapse-transition="false"
@select="handleSelect"
>
diff --git a/admin/src/components/common/Tree.vue b/admin/src/components/common/Tree.vue
new file mode 100644
index 0000000..47b7e6a
--- /dev/null
+++ b/admin/src/components/common/Tree.vue
@@ -0,0 +1,158 @@
+<template>
+<!-- <div class="tree">-->
+<!-- <div v-for="(item, index) of list" :key="index" @click.stop="clickIten(item)">-->
+<!-- <div class="tree_item">-->
+<!-- <i class="el-icon-caret-bottom" :class="{ 'activeColor': item[defaultProps.status] }" v-show="item[defaultProps.status] && item[defaultProps.children]"></i>-->
+<!-- <i class="el-icon-caret-right color" v-show="item[defaultProps.children] && !item[defaultProps.status]"></i>-->
+<!-- <div class="tree_item_label long-title-style" :title="item[defaultProps.name]" :class="{ 'activeColor': item[defaultProps.status] && !item[defaultProps.children] }">{{ item[defaultProps.name] }}</div>-->
+<!-- </div>-->
+<!-- <div class="tree_childern" v-show="item[defaultProps.status]">-->
+<!-- <tree-->
+<!-- :list="item[defaultProps.children]"-->
+<!-- :defaultProps="defaultProps"-->
+<!-- @callback="callback"-->
+<!-- />-->
+<!-- </div>-->
+<!-- </div>-->
+<!-- </div>-->
+ <div class="tree">
+ <div v-for="(item, index) in list" :key="index" @click.stop="clickIten(item)">
+ <div class="tree_item">
+ <i class="el-icon-caret-bottom" :class="{ 'activeColor': item.status }" v-show="item.status === 1 && item.companyDTOList.length > 0"></i>
+ <i class="el-icon-caret-right color" v-show="item.companyDTOList.length > 0 && item.status === 0"></i>
+ <div class="tree_item_label long-title-style" :title="item.name" :class="{ 'activeColor': item.status === 1 && item.companyDTOList.length === 0 }">{{ item.name }}</div>
+ </div>
+ <div class="tree_childern" v-show="item.status === 1">
+ <tree
+ :list="item.companyDTOList"
+ :defaultProps="defaultProps"
+ @callback="callback"
+ />
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+// import Bus from '@/utils/eventBus'
+export default {
+ name: 'tree',
+ props: {
+ list: {
+ type: Array,
+ required: false,
+ default: () => []
+ },
+ defaultProps: {
+ type: Object,
+ require: false,
+ default: () => {
+ return {
+ name: 'name',
+ status: 'status',
+ children: 'children',
+ id: 'id'
+ }
+ }
+ }
+ },
+ data () {
+ return {
+ tempItem: {
+ id: null,
+ name: null
+ }
+ }
+ },
+ methods: {
+ // 鐐瑰嚮褰撳墠椤�
+ clickIten (item) {
+ this.recursion(this.list)
+ item.status === 0 ? item.status = 1 : item.status = 0
+ // item[this.defaultProps.status] = !item[this.defaultProps.status]
+ // this.list.forEach(subItem => {
+ // if ((subItem[this.defaultProps.id] !== item[this.defaultProps.id] && subItem[this.defaultProps.status]) || (this.list.length === 1 && subItem[this.defaultProps.status] === false)) {
+ // subItem[this.defaultProps.status] = false
+ // if (subItem[this.defaultProps.children]) {
+ // this.recursion(subItem[this.defaultProps.children])
+ // }
+ // }
+ // })
+ // if (this.tempItem.id === item[this.defaultProps.id]) {
+ // this.tempItem = {
+ // id: null,
+ // name: null
+ // }
+ // } else {
+ // this.tempItem.id = item[this.defaultProps.id]
+ // this.tempItem.name = item[this.defaultProps.name]
+ // }
+
+ this.$emit('callback', item)
+ },
+ // 閫掑綊鏂规硶
+ recursion (children) {
+ // children.forEach(item => {
+ // item[this.defaultProps.status] = false
+ // if (item[this.defaultProps.children]) {
+ // this.recursion(item[this.defaultProps.children])
+ // }
+ // })
+ children.forEach(item => {
+ item.status = 0
+ if (item.companyDTOList.length > 0) {
+ this.recursion(item.companyDTOList)
+ }
+ })
+ },
+ callback (data, item) {
+ if (this.tempItem.id === data.id) {
+ this.tempItem = {}
+ } else {
+ this.tempItem.id = data.id
+ this.tempItem.name = data.name
+ }
+ this.$emit('callback', this.tempItem, item)
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+.tree {
+ /*width: 100%;*/
+ /*height: auto;*/
+ /*border-radius: 5px;*/
+ /*overflow: hidden;*/
+ /*border: 1px solid #eeeeee;*/
+ /*box-sizing: border-box;*/
+ .tree_childern {
+ margin-left: 20px;
+ }
+ .activeItem {
+ background: #F4F7FC;
+ }
+ .tree_item {
+ display: flex;
+ align-items: center;
+ height: 48px;
+ cursor: pointer;
+ padding-left: 10px;
+ .tree_item_label {
+ font-size: 14px;
+ font-weight: 400;
+ color: #333333;
+ white-space: nowrap;
+ }
+ i {
+ margin-right: 5px;
+ }
+ .color {
+ color: #999999 !important;
+ }
+ .activeColor {
+ color: #305ED5 !important;
+ }
+ }
+}
+</style>
diff --git a/admin/src/layouts/AppLayout.vue b/admin/src/layouts/AppLayout.vue
index 476998f..dc75809 100644
--- a/admin/src/layouts/AppLayout.vue
+++ b/admin/src/layouts/AppLayout.vue
@@ -38,7 +38,7 @@
overflow: hidden;
// 宸﹁竟鑿滃崟
.el-aside {
- width: $menu-width !important;
+ width: 250px !important;
flex-shrink: 0;
height: 100%;
overflow-y: auto;
diff --git a/admin/src/layouts/TableLayout1.vue b/admin/src/layouts/TableLayout1.vue
new file mode 100644
index 0000000..934c5d5
--- /dev/null
+++ b/admin/src/layouts/TableLayout1.vue
@@ -0,0 +1,167 @@
+<template>
+ <div class="table-layout">
+ <!-- 澶撮儴 -->
+ <div v-if="withBreadcrumb" class="table-header">
+ <el-breadcrumb separator="/">
+ <el-breadcrumb-item v-for="path in paths" :key="path">{{path}}</el-breadcrumb-item>
+ </el-breadcrumb>
+ </div>
+ <Profile :roles="roles" :permissions="permissions">
+ <div style="width: 100%; height: 100%; padding: 0 16px; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between;">
+ <div style="width: 300px; height: 100%; flex-shrink: 0; background: #ffffff;">
+ <slot name="menu"></slot>
+ </div>
+ <div style="width: calc(100% - 310px); height: 100%">
+ <!-- 鎼滅储琛ㄥ崟閮ㄥ垎 -->
+ <div class="table-search-form" style="padding: 0 !important;">
+ <div class="form-wrap">
+ <slot name="search-form"></slot>
+ </div>
+ </div>
+ <slot name="space"></slot>
+ <!-- 鍒楄〃鍜屽垎椤甸儴鍒� -->
+ <div class="table-content" style="padding: 0 !important;">
+ <div class="table-wrap">
+ <slot name="table-wrap"></slot>
+ </div>
+ </div>
+ </div>
+ </div>
+ </Profile>
+ </div>
+</template>
+
+<script>
+import Profile from '../components/common/Profile'
+export default {
+ name: 'TableLayout1',
+ components: { Profile },
+ props: {
+ // 瑙掕壊
+ roles: {
+ type: Array
+ },
+ // 鏉冮檺
+ permissions: {
+ type: Array
+ },
+ // 鏄惁灞曠ず澶撮儴闈㈠寘灞�
+ withBreadcrumb: {
+ type: Boolean,
+ default: true
+ }
+ },
+ computed: {
+ paths () {
+ return this.$route.meta.paths
+ }
+ }
+}
+</script>
+
+<style lang="scss">
+ @import "@/assets/style/variables.scss";
+ .table-layout {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ .not-allow-wrap {
+ padding-top: 0;
+ }
+ }
+ // 澶撮儴
+ .table-header {
+ overflow: hidden;
+ padding: 12px 16px;
+ flex-shrink: 0;
+ // 椤甸潰璺緞
+ .el-breadcrumb {
+ .el-breadcrumb__item {
+ .el-breadcrumb__inner {
+ color: #ABB2BE;
+ font-size: 12px;
+ }
+ &:last-of-type .el-breadcrumb__inner {
+ color: #606263;
+ font-size: 14px;
+ }
+ }
+ }
+ }
+ // 鎼滅储
+ .table-search-form {
+ display: flex;
+ flex-wrap: wrap;
+ /*padding: 0 16px;*/
+ /*box-sizing: border-box;*/
+ .form-wrap {
+ padding: 16px 16px 0 16px;
+ width: 100%;
+ background: #fff;
+ &:empty {
+ padding: 0;
+ }
+ }
+ section {
+ display: inline-block;
+ margin-left: 16px;
+ margin-bottom: 18px;
+ }
+ }
+ // 鍒楄〃鍜屽垎椤�
+ .table-content {
+ margin-top: 10px;
+ /*padding: 0 16px;*/
+ .table-wrap {
+ padding: 16px 16px 0 16px;
+ background: #fff;
+ // 宸ュ叿鏍�
+ .toolbar {
+ border-bottom: 1px solid #eee;
+ padding-bottom: 10px;
+ li {
+ display: inline-block;
+ margin-right: 6px;
+ }
+ }
+ // 琛ㄦ牸
+ .el-table {
+ th {
+ .cell {
+ color: #666;
+ }
+ }
+ // 澶嶉�夋鍒�
+ .el-table-column--selection {
+ .cell {
+ text-align: center !important;
+ }
+ }
+ // 澶氬�煎瓧娈�
+ .table-column-strings {
+ ul {
+ li {
+ display: inline-block;
+ background: #eee;
+ border-radius: 3px;
+ padding: 0 3px;
+ margin-right: 3px;
+ margin-bottom: 3px;
+ }
+ }
+ }
+ // 鏍戣瑙夎皟鏁�
+ [class*=el-table__row--level] .el-table__expand-icon {
+ position: relative;
+ left: -6px;
+ margin-right: 0;
+ }
+ }
+ // 鍒嗛〉
+ .table-pagination {
+ padding: 16px 0;
+ text-align: left;
+ }
+ }
+ }
+</style>
diff --git a/admin/src/views/business/blackmailPersonnel.vue b/admin/src/views/business/blackmailPersonnel.vue
new file mode 100644
index 0000000..8d52eb5
--- /dev/null
+++ b/admin/src/views/business/blackmailPersonnel.vue
@@ -0,0 +1,116 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヨ瀹㈠悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵嬫満鍙�" prop="code">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃鍚嶇О" prop="code">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎿嶄綔浜哄憳" prop="code">
+ <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="浜哄憳绫诲瀷" prop="companyId">
+ <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
+ <li><el-button type="primary" v-permissions="['business:member:create']">绉诲嚭</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="idcard_id" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
+ <el-table-column label="浜哄憳绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.type === 0">鍔冲姟璁垮</span>
+ <span v-if="row.type === 1">鏅�氳瀹�</span>
+ <span v-if="row.type === 2">鍐呴儴浜哄憳</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="company_id" label="鍏徃" min-width="100px"></el-table-column>
+ <el-table-column prop="edit_date" label="鎿嶄綔鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="editor" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:member:update', 'business:member:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']">绉诲嚭</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'blackmailPersonnel',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ companyId: '',
+ name: '',
+ code: '',
+ status: 2,
+ type: 1
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '浜哄憳淇℃伅琛�',
+ api: '/business/member',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/carEvent.vue b/admin/src/views/business/carEvent.vue
new file mode 100644
index 0000000..5644f65
--- /dev/null
+++ b/admin/src/views/business/carEvent.vue
@@ -0,0 +1,118 @@
+<template>
+ <TableLayout :permissions="['business:category:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="杞︾墝鍙�" prop="plateNos">
+ <el-input v-model="searchForm.plateNos" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="plateNos">
+ <el-input v-model="searchForm.plateNos" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃/閮ㄩ棬鍚嶇О" prop="plateNos">
+ <el-input v-model="searchForm.plateNos" placeholder="璇疯緭鍏ュ叕鍙�/閮ㄩ棬鍚嶇О" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="浜哄憳绫诲瀷" prop="plateNos">
+ <el-select v-model="searchForm.plateNos" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="浜嬩欢绫诲瀷" prop="eventType">
+ <el-select v-model="searchForm.eventType" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="璧峰鏃堕棿" prop="eventType">
+ <el-date-picker
+ v-model="searchForm.eventType"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-radio-group v-model="searchForm.eventType" size="small">
+ <el-radio-button label="褰撳ぉ"></el-radio-button>
+ <el-radio-button label="杩�7澶�"></el-radio-button>
+ <el-radio-button label="杩�30澶�"></el-radio-button>
+ </el-radio-group>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
+ <li><el-button type="primary" v-permissions="['business:member:create']">瀵煎嚭</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="plateNos" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="plateNos" label="褰掑睘鐢ㄦ埛绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="plateNos" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="plateNos" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="plateNos" label="鍏徃/閮ㄩ棬" min-width="100px"></el-table-column>
+ <el-table-column prop="parkName" label="鍋滆溅搴撳悕绉�" min-width="100px"></el-table-column>
+ <el-table-column prop="gateName" label="鍑哄叆鍙e悕绉�" min-width="100px"></el-table-column>
+ <el-table-column prop="eventType" label="浜嬩欢绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="inoutType" label="鍑哄叆绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.inoutType === 0">杩涘満</span>
+ <span v-if="row.inoutType === 1">鍑哄満</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="vehiclePicUrl" label="鎶撴媿鍥剧墖" min-width="100px"></el-table-column>
+ <el-table-column prop="happenTime" label="浜嬩欢鏃堕棿" min-width="100px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'CarEvent',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ eventType: '',
+ plateNos: ''
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃',
+ api: '/business/carEvent',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/cars.vue b/admin/src/views/business/cars.vue
new file mode 100644
index 0000000..f135dec
--- /dev/null
+++ b/admin/src/views/business/cars.vue
@@ -0,0 +1,100 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="120px" inline>
+ <el-form-item label="杞︾墝鍙�" prop="code">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍛樺伐濮撳悕/鎵嬫満鍙�" prop="code">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ憳宸ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="閮ㄩ棬" prop="code">
+ <el-select v-model="value" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
+ <li><el-button type="primary" @click="$refs.operaCarsWindow.open('鏂板缓杞﹁締淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:member:create']">鏂板缓</el-button></li>
+ <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="code" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="code" label="鍋滆溅鍦�" min-width="100px"></el-table-column>
+ <el-table-column prop="remark" label="鐢ㄦ埛绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="remark" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="remark" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="remark" label="閮ㄩ棬/鍏徃" min-width="100px"></el-table-column>
+ <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
+ <el-table-column prop="remark" label="鏈夋晥鏈�" min-width="100px"></el-table-column>
+ <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:member:update', 'business:member:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.operaCarsWindow.open('缂栬緫杞﹁締淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:member:update']">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaCarsWindow ref="operaCarsWindow" @success="handlePageChange"/>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaCarsWindow from '@/components/business/OperaCarsWindow'
+export default {
+ name: 'Cars',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaCarsWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ code: ''
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '杞﹁締淇℃伅琛�',
+ api: '/business/cars',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/category.vue b/admin/src/views/business/category.vue
new file mode 100644
index 0000000..910134b
--- /dev/null
+++ b/admin/src/views/business/category.vue
@@ -0,0 +1,93 @@
+<template>
+ <TableLayout :permissions="['business:category:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
+ <el-option label="鍚敤" value="0"></el-option>
+ <el-option label="绂佺敤" value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:category:create', 'business:category:delete']">
+ <li><el-button type="primary" @click="$refs.operaCategoryWindow.open('鏂板缓鍒嗙被淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:category:create']">鏂板缓</el-button></li>
+ <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:category:delete']">鍒犻櫎</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="鍏徃绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
+ <el-table-column prop="status" label="鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.status === 0">鍚敤</span>
+ <span v-if="row.status === 1">绂佺敤</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:category:update', 'business:category:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.operaCategoryWindow.open('缂栬緫鍒嗙被淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:category:update']">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:category:delete']">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaCategoryWindow ref="operaCategoryWindow" @success="handlePageChange"/>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaCategoryWindow from '@/components/business/OperaCategoryWindow'
+export default {
+ name: 'Category',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaCategoryWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ status: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '鍒嗙被淇℃伅琛�',
+ api: '/business/category',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/company.vue b/admin/src/views/business/company.vue
new file mode 100644
index 0000000..ec0c4fb
--- /dev/null
+++ b/admin/src/views/business/company.vue
@@ -0,0 +1,114 @@
+<template>
+ <TableLayout :permissions="['business:company:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍏徃鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃绫诲瀷" prop="type" @keypress.enter.native="search">
+ <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨">
+ <el-option label="鍔冲姟鍏徃" value="0"></el-option>
+ <el-option label="鍐呴儴缁勭粐" value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鑱旂郴浜哄鍚�" prop="linkName">
+ <el-input v-model="searchForm.linkName" placeholder="璇疯緭鍏ヨ仈绯讳汉濮撳悕" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鑱旂郴鐢佃瘽" prop="linkPhone">
+ <el-input v-model="searchForm.linkPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:company:create', 'business:company:delete']">
+ <li><el-button type="primary" @click="$refs.operaCompanyWindow.open('鏂板')" icon="el-icon-plus" v-permissions="['business:company:create']">鏂板缓</el-button></li>
+<!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:company:delete']">鍒犻櫎</el-button></li>-->
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="鍏徃" min-width="100px"></el-table-column>
+ <el-table-column prop="type" label="鍏徃绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.type === 0">鍔冲姟鍏徃</span>
+ <span v-if="row.type === 1">鍐呴儴缁勭粐</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="code" label="鍏徃缂栫爜" min-width="100px"></el-table-column>
+ <el-table-column prop="num" label="鍔冲姟浜烘暟" min-width="100px"></el-table-column>
+ <el-table-column prop="linkName" label="璐熻矗浜�" min-width="100px"></el-table-column>
+ <el-table-column prop="linkPhone" label="鑱旂郴鐢佃瘽" min-width="100px"></el-table-column>
+ <el-table-column prop="status" label="鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <el-switch
+ v-model="row.status"
+ active-color="#13ce66"
+ inactive-color="#ff4949">
+ </el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="creator" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:company:update', 'business:company:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.operaCompanyWindow.open('缂栬緫', row)" icon="el-icon-edit" v-permissions="['business:company:update']">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:company:delete']">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaCompanyWindow ref="operaCompanyWindow" @success="handlePageChange"/>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaCompanyWindow from '@/components/business/OperaCompanyWindow'
+export default {
+ name: 'Company',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaCompanyWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ type: '',
+ linkName: '',
+ linkPhone: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '浼佷笟淇℃伅琛�',
+ api: '/business/company',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/device.vue b/admin/src/views/business/device.vue
new file mode 100644
index 0000000..d93229a
--- /dev/null
+++ b/admin/src/views/business/device.vue
@@ -0,0 +1,95 @@
+<template>
+ <TableLayout :permissions="['business:company:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="闂ㄧ鍚嶇О" prop="title">
+ <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ラ棬绂佸悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="闂ㄧ绛夌骇" prop="level">
+ <el-select v-model="searchForm.level" placeholder="璇烽�夋嫨闂ㄧ绛夌骇" @keypress.enter.native="search">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar">
+ <li><el-button type="primary">鍚屾</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="manufature" label="鍘傚晢" min-width="100px"></el-table-column>
+ <el-table-column prop="no" label="璁惧缂栧彿" min-width="100px"></el-table-column>
+ <el-table-column prop="title" label="闂ㄧ鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="level" label="闂ㄧ绛夌骇" min-width="100px"></el-table-column>
+ <el-table-column prop="status" label="璁惧鐘舵�� 0绂佺敤 1鍚敤" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.status === 0">绂佺敤</span>
+ <span v-if="row.status === 1">鍚敤</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:company:update'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.operaDeviceWindow.open('缂栬緫璁惧淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:company:update']">缂栬緫</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaDeviceWindow ref="operaDeviceWindow" @success="handlePageChange"/>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDeviceWindow from '@/components/business/OperaDeviceWindow'
+export default {
+ name: 'Device',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaDeviceWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ title: '',
+ level: ''
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '璁惧淇℃伅琛�',
+ api: '/business/device',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/deviceEvent.vue b/admin/src/views/business/deviceEvent.vue
new file mode 100644
index 0000000..c5be976
--- /dev/null
+++ b/admin/src/views/business/deviceEvent.vue
@@ -0,0 +1,111 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="eventType">
+ <el-input v-model="searchForm.eventType" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃/缁勭粐鍚嶇О" prop="eventType">
+ <el-input v-model="searchForm.eventType" placeholder="璇疯緭鍏ュ叕鍙�/缁勭粐鍚嶇О" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="浜哄憳绫诲瀷" prop="userType">
+ <el-select v-model="searchForm.userType" placeholder="璇烽�夋嫨">
+ <el-option label="鏈煡" value="0"></el-option>
+ <el-option label="鏅��" value="1"></el-option>
+ <el-option label="鏉ュ" value="2"></el-option>
+ <el-option label="榛戝悕鍗�" value="3"></el-option>
+ <el-option label="绠$悊鍛�" value="4"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="浜嬩欢绫诲瀷" prop="eventType">
+ <el-select v-model="searchForm.eventType" placeholder="璇烽�夋嫨">
+ <el-option label="鏈煡" value="0"></el-option>
+ <el-option label="鏅��" value="1"></el-option>
+ <el-option label="鏉ュ" value="2"></el-option>
+ <el-option label="榛戝悕鍗�" value="3"></el-option>
+ <el-option label="绠$悊鍛�" value="4"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="璧峰鏃堕棿" prop="eventType">
+ <el-date-picker
+ v-model="searchForm.eventType"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-radio-group v-model="searchForm.eventType" size="small">
+ <el-radio-button label="褰撳ぉ"></el-radio-button>
+ <el-radio-button label="杩�7澶�"></el-radio-button>
+ <el-radio-button label="杩�30澶�"></el-radio-button>
+ </el-radio-group>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button type="primary" :loading="isWorking.export" v-permissions="['business:member:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="userType" label="浜哄憳绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.userType === 0">鍔冲姟璁垮</span>
+ <span v-if="row.userType === 1">鏅�氳瀹�</span>
+ <span v-if="row.userType === 2">鍐呴儴浜哄憳</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="idcard" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
+ <el-table-column prop="company" label="鍏徃/缁勭粐" min-width="100px"></el-table-column>
+ <el-table-column prop="srcName" label="闂ㄧ鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="srcName" label="闂ㄧ鐐�" min-width="100px"></el-table-column>
+ <el-table-column prop="eventType" label="浜嬩欢绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="eventType" label="鍑哄叆绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="extEventPictureURL" label="鎶撴媿鐓х墖" min-width="100px"></el-table-column>
+ <el-table-column prop="happenTime" label="浜嬩欢鏃堕棿" min-width="100px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'DeviceEvent',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ eventType: '',
+ userType: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃',
+ api: '/business/deviceEvent',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/deviceRole.vue b/admin/src/views/business/deviceRole.vue
new file mode 100644
index 0000000..2b69060
--- /dev/null
+++ b/admin/src/views/business/deviceRole.vue
@@ -0,0 +1,91 @@
+<template>
+ <TableLayout :permissions="['business:company:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="闂ㄧ缁勫悕绉�" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ラ棬绂佺粍鍚嶇О" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:company:create', 'business:company:delete']">
+ <li><el-button type="primary" @click="$refs.operaDeviceRoleWindow.open('鏂板缓闂ㄧ瑙掕壊淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:company:create']">鏂板缓</el-button></li>
+ <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:company:delete']">鍒犻櫎</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="闂ㄧ缁勫悕绉�" min-width="100px"></el-table-column>
+ <el-table-column prop="name" label="浣跨敤浜烘暟" min-width="100px"></el-table-column>
+ <el-table-column prop="isDefault" label="鏄惁榛樿" min-width="100px">
+ <template slot-scope="{row}">
+ <el-switch
+ v-model="row.isDefault"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="1"
+ :inactive-value="0">
+ </el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:company:update', 'business:company:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.operaDeviceRoleWindow.open('缂栬緫闂ㄧ瑙掕壊淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:company:update']">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:company:delete']">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaDeviceRoleWindow ref="operaDeviceRoleWindow" @success="handlePageChange"/>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDeviceRoleWindow from '@/components/business/OperaDeviceRoleWindow'
+export default {
+ name: 'DeviceRole',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaDeviceRoleWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ type: '2'
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '闂ㄧ瑙掕壊淇℃伅琛�',
+ api: '/business/deviceRole',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/deviceRole_f.vue b/admin/src/views/business/deviceRole_f.vue
new file mode 100644
index 0000000..f1c14f0
--- /dev/null
+++ b/admin/src/views/business/deviceRole_f.vue
@@ -0,0 +1,85 @@
+<template>
+ <TableLayout :permissions="['business:company:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="闂ㄧ缁勫悕绉�" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ラ棬绂佺粍鍚嶇О" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar">
+ <li><el-button type="primary">鍚屾</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="闂ㄧ缁勫悕绉�" min-width="100px"></el-table-column>
+ <el-table-column prop="name" label="閫傜敤鐢ㄦ埛绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="name" label="浣跨敤浜烘暟" min-width="100px"></el-table-column>
+ <el-table-column prop="isDefault" label="鏄惁榛樿" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.isDefault === 1">鏄�</span>
+ <span v-if="row.isDefault === 0">鍚�</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:company:update', 'business:company:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.operaDeviceRoleWindow.open('缂栬緫闂ㄧ瑙掕壊淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:company:update']">缂栬緫</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaDeviceRoleWindow ref="operaDeviceRoleWindow" @success="handlePageChange"/>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDeviceRoleWindow from '@/components/business/OperaDeviceRoleFWindow'
+export default {
+ name: 'DeviceRole',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaDeviceRoleWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ type: '1'
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '闂ㄧ瑙掕壊淇℃伅琛�',
+ api: '/business/deviceRole',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/empower.vue b/admin/src/views/business/empower.vue
new file mode 100644
index 0000000..a6373f5
--- /dev/null
+++ b/admin/src/views/business/empower.vue
@@ -0,0 +1,116 @@
+<template>
+ <TableLayout :permissions="['business:empower:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕鎵嬫満鍙�" prop="startTime">
+ <el-input v-model="searchForm.startTime" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="涓嬪彂鐘舵��" prop="sendStatus">
+ <el-select v-model="searchForm.sendStatus" placeholder="璇烽�夋嫨">
+ <el-option label="寰呬笅鍙�" value="0"></el-option>
+ <el-option label="宸蹭笅鍙�" value="1"></el-option>
+ <el-option label="宸插彇娑�" value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍏徃" prop="sendStatus">
+ <el-select v-model="searchForm.sendStatus" placeholder="璇烽�夋嫨鍏徃">
+ <el-option label="寰呬笅鍙�" value="0"></el-option>
+ <el-option label="宸蹭笅鍙�" value="1"></el-option>
+ <el-option label="宸插彇娑�" value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="涓嬪彂璧峰鏃堕棿" prop="startTime">
+ <el-input v-model="searchForm.startTime" placeholder="璇疯緭鍏ラ棬绂佹湁鏁堟湡寮�濮�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-radio-group v-model="searchForm.eventType" size="small">
+ <el-radio-button label="褰撳ぉ"></el-radio-button>
+ <el-radio-button label="杩�7澶�"></el-radio-button>
+ <el-radio-button label="杩�30澶�"></el-radio-button>
+ </el-radio-group>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+<!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:member:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>-->
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:empower:create', 'business:empower:delete']">
+ <li><el-button type="primary" v-permissions="['business:empower:create']">瀵煎嚭</el-button></li>
+ <li><el-button type="primary" v-permissions="['business:empower:create']">绔嬪嵆涓嬪彂</el-button></li>
+ <li><el-button type="primary" v-permissions="['business:empower:create']">鍙栨秷涓嬪彂</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵�灞炲叕鍙�" min-width="100px"></el-table-column>
+ <el-table-column label="闂ㄧ鏈夋晥鏈�" min-width="100px">
+ <template slot-scope="{row}">
+ <span>璧凤細{{row.startTime}}</span>
+ <span>姝細{{row.endTime}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="sendDate" label="瀵煎叆鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="sendUserId" label="鎿嶄綔浜哄憳" min-width="100px"></el-table-column>
+ <el-table-column label="涓嬪彂鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.sendStatus === 0">寰呬笅鍙�</span>
+ <span v-if="row.sendStatus === 1">宸蹭笅鍙�</span>
+ <span v-if="row.sendStatus === 2">宸插彇娑�</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="sendType" label="涓嬪彂绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.sendType === 0">瀹炴椂</span>
+ <span v-if="row.sendType === 1">瀹氭椂</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="sendDate" label="涓嬪彂鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="sendInfo" label="涓嬪彂澶辫触鍘熷洜" min-width="100px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'Empower',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ startTime: '',
+ endTime: '',
+ sendStatus: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '浜哄憳鎺堟潈瀵煎叆璁板綍',
+ api: '/business/empower',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/freezePersonnel.vue b/admin/src/views/business/freezePersonnel.vue
new file mode 100644
index 0000000..9bbe5f7
--- /dev/null
+++ b/admin/src/views/business/freezePersonnel.vue
@@ -0,0 +1,112 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヨ瀹㈠悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="宸ュ彿" prop="code">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="閮ㄩ棬" prop="companyId">
+ <el-cascader
+ :options="options"
+ v-model="searchForm.companyId"
+ @change="changeCompanyId"
+ :show-all-levels="false"
+ @keypress.enter.native="search"
+ :props="{ checkStrictly: true, value: 'id', label: 'name', children: 'companyDTOList' }"
+ ></el-cascader>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
+ <li><el-button type="primary" v-permissions="['business:member:create']">瑙e喕</el-button></li>
+ <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:member:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="companyId" label="閮ㄩ棬" min-width="100px"></el-table-column>
+ <el-table-column prop="code" label="宸ュ彿" min-width="100px"></el-table-column>
+ <el-table-column prop="visitsLastDate" label="鏈�鍚庝竴娆¢棬绂佹椂闂�" min-width="100px"></el-table-column>
+ <el-table-column prop="userActionType1" label="鍐荤粨鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:member:update', 'business:member:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']">瑙e喕</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import { findCompanyTreePage } from '@/api/business/company'
+import { updateRemoveStatusById } from '@/api/business/block'
+export default {
+ name: 'freezePersonnel',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ companyId: '',
+ name: '',
+ code: '',
+ type: 2
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '浜哄憳淇℃伅琛�',
+ api: '/business/block',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ this.getfindCompanyTreePage()
+ },
+ methods: {
+ changeCompanyId (e) {
+ this.searchForm.companyId = e[e.length - 1]
+ },
+ // 鑾峰彇缁勭粐鏍�
+ getfindCompanyTreePage () {
+ findCompanyTreePage(1)
+ .then(res => {
+ console.log(res)
+ this.options = res
+ // this.search()
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/internalCompany.vue b/admin/src/views/business/internalCompany.vue
new file mode 100644
index 0000000..2cba996
--- /dev/null
+++ b/admin/src/views/business/internalCompany.vue
@@ -0,0 +1,93 @@
+<template>
+ <TableLayout :permissions="['business:company:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="缁勭粐鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ョ粍缁囧悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵�灞炰笂绾х粍缁�" prop="parentName">
+ <el-input v-model="searchForm.parentName" placeholder="璇疯緭鍏ユ墍灞炰笂绾х粍缁�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:company:create', 'business:company:delete']">
+ <li><el-button type="primary" v-permissions="['business:company:create']" @click="synchronous()">鍚屾</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="缁勭粐鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="parentName" label="涓婄骇缁勭粐" min-width="100px"></el-table-column>
+ <el-table-column prop="editDate" label="鏈�鍚庢洿鏂版椂闂�" min-width="100px"></el-table-column>
+<!-- <el-table-column-->
+<!-- v-if="containPermissions(['business:company:update', 'business:company:delete'])"-->
+<!-- label="鎿嶄綔"-->
+<!-- min-width="80"-->
+<!-- fixed="right"-->
+<!-- >-->
+<!-- <template slot-scope="{row}">-->
+<!-- <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('缂栬緫浼佷笟淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:company:update']">缂栬緫</el-button>-->
+<!-- <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:company:delete']">鍒犻櫎</el-button>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+<!-- <OperaInternalCompanyWindow ref="OperaInternalCompanyWindow" @success="handlePageChange"/>-->
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import { companySync } from '@/api/business/company'
+// import OperaInternalCompanyWindow from '@/components/business/OperaInternalCompanyWindow'
+export default {
+ name: 'internalCompany',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ parentName: '',
+ type: 1
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '浼佷笟淇℃伅琛�',
+ api: '/business/company',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ // 鍚屾淇℃伅
+ async synchronous () {
+ const message = await companySync({})
+ this.$message.success(message)
+ this.search()
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/internalMember.vue b/admin/src/views/business/internalMember.vue
new file mode 100644
index 0000000..309695a
--- /dev/null
+++ b/admin/src/views/business/internalMember.vue
@@ -0,0 +1,167 @@
+<template>
+ <TableLayout1 :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="" prop="keyword">
+ <el-input v-model="searchForm.keyword" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�/宸ュ彿" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="" prop="status">
+ <el-select v-model="searchForm.status" @keypress.enter.native="search" placeholder="鏄惁鏈変汉鑴�">
+ <el-option label="鏃�" value="0"></el-option>
+ <el-option label="鏈�" value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="" prop="canVisit">
+ <el-select v-model="searchForm.canVisit" @keypress.enter.native="search" placeholder="鍙嫓璁�">
+ <el-option label="鏄�" value="1"></el-option>
+ <el-option label="鍚�" value="0"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="" prop="status">
+ <el-select v-model="searchForm.status" @keypress.enter.native="search" placeholder="鐘舵��">
+ <el-option label="姝e父" value="0"></el-option>
+ <el-option label="绂佺敤" value="1"></el-option>
+ <el-option label="鎷夐粦/鍐荤粨" value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <template v-slot:menu>
+ <div style="width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px;">浼佷笟缁勭粐鏋舵瀯</div>
+ <Tree :list="companyTree" :defaultProps="{name: 'name', status: 'status', children: 'companyDTOList', id: 'id'}" @callback="callback" />
+ </template>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:delete']">
+ <li><el-button type="primary">闂ㄧ鎺堟潈</el-button></li>
+ <li><el-button type="primary">鍚屾</el-button></li>
+ <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="sex" label="鎬у埆" min-width="100px"></el-table-column>
+ <el-table-column prop="status" label="鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.status === 0">姝e父</span>
+ <span v-if="row.status === 1">绂佺敤</span>
+ <span v-if="row.status === 2">鎷夐粦/鍐荤粨</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="code" label="宸ュ彿" min-width="100px"></el-table-column>
+ <el-table-column prop="code" label="閮ㄩ棬" min-width="100px"></el-table-column>
+ <el-table-column prop="code" label="鍙嫓璁�" min-width="100px"></el-table-column>
+ <el-table-column prop="roleId" label="闂ㄧ瑙掕壊" min-width="100px"></el-table-column>
+ <el-table-column fixed="right" prop="faceImg" label="浜鸿劯淇℃伅" min-width="100px"></el-table-column>
+ <el-table-column fixed="right" prop="faceImg" label="鍗$墖淇℃伅" min-width="100px"></el-table-column>
+<!-- <el-table-column-->
+<!-- v-if="containPermissions(['business:member:update', 'business:member:delete'])"-->
+<!-- label="鎿嶄綔"-->
+<!-- min-width="120"-->
+<!-- fixed="right"-->
+<!-- >-->
+<!-- <template slot-scope="{row}">-->
+<!-- <el-button type="text" @click="$refs.operaMemberWindow.open('缂栬緫浜哄憳淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:member:update']">缂栬緫</el-button>-->
+<!-- <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout1>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout1 from '@/layouts/TableLayout1'
+import Pagination from '@/components/common/Pagination'
+import Tree from '@/components/common/Tree'
+import { findCompanyTreePage } from '@/api/business/company'
+export default {
+ name: 'internalMember',
+ extends: BaseTable,
+ components: { TableLayout1, Pagination, Tree },
+ data () {
+ return {
+ TreeList: [
+ {
+ name: '鍗庢櫒',
+ status: '',
+ id: 1,
+ children: [
+ { name: '琛屾斂閮�', status: '', id: 2 },
+ { name: '淇℃伅閮�', status: '', id: 3 },
+ { name: '椤圭洰閮�', status: '', id: 4 }
+ ]
+ }
+ ],
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ status: '',
+ canVisit: '',
+ companyId: '',
+ keyword: '',
+ type: 2
+ },
+ companyTree: []
+ }
+ },
+ created () {
+ this.config({
+ module: '浜哄憳淇℃伅琛�',
+ api: '/business/member',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ // this.search()
+ this.getfindCompanyTreePage()
+ },
+ methods: {
+ // 鑾峰彇缁勭粐鏍�
+ getfindCompanyTreePage () {
+ findCompanyTreePage(1)
+ .then(res => {
+ this.companyTree = res
+ this.searchForm.companyId = res[0].id
+ this.search()
+ })
+ },
+ callback (row) {
+ this.searchForm.companyId = row.id
+ this.search()
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+ .box {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ .box_menu {
+ width: 100px;
+ height: 100%;
+ flex-shrink: 0;
+ }
+ .box_tab {
+ flex: 1;
+ height: 100%;
+ }
+ }
+</style>
diff --git a/admin/src/views/business/laborSource.vue b/admin/src/views/business/laborSource.vue
new file mode 100644
index 0000000..d78362e
--- /dev/null
+++ b/admin/src/views/business/laborSource.vue
@@ -0,0 +1,66 @@
+<template>
+ <div class="box">
+ <el-form :model="form" ref="form" label-width="140px">
+ <el-form-item label="鏉ヨ棰勭害鏂瑰紡:" prop="doorIds">
+ <el-radio-group v-model="form.doorIds">
+ <el-radio :label="3">棰勭害鍏嶇櫥璁�</el-radio>
+ <el-radio :label="6">棰勭害鍚庣櫥璁�(闇�瑕侀厤澶囪瀹㈡満)</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="琚浜烘牎楠屾柟寮�:" prop="doorIds">
+ <el-radio-group v-model="form.doorIds">
+ <el-radio :label="3">浠呮墜鏈哄彿</el-radio>
+ <el-radio :label="6">鎵嬫満鍙�&濮撳悕</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="鍋ュ悍璇佹槸鍚﹀繀濉�:" prop="doorIds">
+ <el-radio-group v-model="form.doorIds">
+ <el-radio :label="3">鍚�</el-radio>
+ <el-radio :label="6">鏄�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="璁垮鏄惁绛旈:" prop="doorIds">
+ <el-switch
+ v-model="form.doorIds"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="1"
+ :inactive-value="0">
+ </el-switch>
+ </el-form-item>
+ <el-form-item label="璁垮绛旈涓婚:" prop="doorIds">
+ <el-input style="width: 50%;" v-model="form.doorIds" placeholder="璇疯緭鍏ョ瓟棰樻爣棰�" v-trim/>
+ </el-form-item>
+ <el-form-item label="璁垮绛旈璇存槑:" prop="doorIds">
+ <el-input style="width: 50%;" type="textarea" v-model="form.doorIds" placeholder="璇疯緭鍏�" v-trim/>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary">淇濆瓨閰嶇疆椤�</el-button>
+ </el-form-item>
+ </el-form>
+ </div>
+</template>
+
+<script>
+ export default {
+ name: 'visitorSources',
+
+ data() {
+ return {
+ form: {
+ doorIds: ''
+ }
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .box {
+ width: 100%;
+ height: 100%;
+ padding: 30px;
+ box-sizing: border-box;
+ background: #ffffff;
+ }
+</style>
diff --git a/admin/src/views/business/parks.vue b/admin/src/views/business/parks.vue
new file mode 100644
index 0000000..9817b0b
--- /dev/null
+++ b/admin/src/views/business/parks.vue
@@ -0,0 +1,75 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鍋滆溅搴撳悕绉�" prop="title">
+ <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ュ仠杞﹀簱鍚嶇О" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵�灞炲仠杞﹀簱" prop="title">
+ <el-select v-model="searchForm.title" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar">
+ <li><el-button type="primary">鍚屾</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="createDate" label="鍋滆溅搴撳悕绉�" min-width="100px"></el-table-column>
+ <el-table-column prop="createDate" label="鎵�灞炲仠杞﹀簱" min-width="100px"></el-table-column>
+ <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'Parks',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ title: ''
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '鍋滆溅搴撲俊鎭〃',
+ api: '/business/parks',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/problemLog.vue b/admin/src/views/business/problemLog.vue
new file mode 100644
index 0000000..546d7f4
--- /dev/null
+++ b/admin/src/views/business/problemLog.vue
@@ -0,0 +1,80 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="绛旈浜�" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃鍚嶇О" prop="companyName">
+ <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="浜哄憳绫诲瀷" prop="companyId">
+ <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar">
+ <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:member:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="name" label="绛旈浜�" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鑱旂郴鐢佃瘽" min-width="100px"></el-table-column>
+ <el-table-column prop="companyName" label="鍏徃鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鐢ㄦ埛绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="createDate" label="绛旈鏃堕棿" min-width="100px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'ProblemLog',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ companyName: ''
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '璁垮绛旈璁板綍琛�',
+ api: '/business/problemLog',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/problems.vue b/admin/src/views/business/problems.vue
new file mode 100644
index 0000000..b701349
--- /dev/null
+++ b/admin/src/views/business/problems.vue
@@ -0,0 +1,97 @@
+<template>
+ <TableLayout :permissions="['business:company:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="棰樼洰鍚嶇О" prop="title">
+ <el-input v-model="searchForm.title" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="浜哄憳绫诲瀷" prop="useType">
+ <el-select v-model="searchForm.useType" placeholder="璇烽�夋嫨" @keypress.enter.native="search">
+ <el-option label="鍔冲姟浜哄憳" value="0"></el-option>
+ <el-option label="鏅�氳瀹�" value="1"></el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:company:create']">
+ <li><el-button type="primary" @click="$refs.operaProblemsWindow.open('鏂板缓璇曢淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:company:create']">鏂板缓</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="title" label="棰樼洰鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="useType" label="閫傜敤浜哄憳绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.useType === 0">鍔冲姟浜哄憳</span>
+ <span v-if="row.useType === 1">鏅�氳瀹�</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="type" label="棰樼洰绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.useType === 0">鍗曢��</span>
+ <span v-if="row.useType === 1">澶氶��</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="sortnu" label="棰樼洰椤哄簭(鍗囧簭)" min-width="100px"></el-table-column>
+ <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="creator" label="鍒涘缓浜虹紪鐮�" min-width="100px"></el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:company:update', 'business:company:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.operaProblemsWindow.open('缂栬緫璇曢淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:company:update']">缂栬緫</el-button>
+ <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:company:delete']">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaProblemsWindow ref="operaProblemsWindow" @success="handlePageChange"/>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaProblemsWindow from '@/components/business/OperaProblemsWindow'
+export default {
+ name: 'Problems',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaProblemsWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ title: '',
+ useType: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '璇曢淇℃伅琛�',
+ api: '/business/problems',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/retention.vue b/admin/src/views/business/retention.vue
new file mode 100644
index 0000000..3609c9b
--- /dev/null
+++ b/admin/src/views/business/retention.vue
@@ -0,0 +1,101 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ鍚�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵嬫満鍙�" prop="phone">
+ <el-input v-model="searchForm.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃/閮ㄩ棬鍚嶇О" prop="companyId">
+ <el-input v-model="searchForm.companyId" placeholder="璇疯緭鍏ュ叕鍙�/閮ㄩ棬鍚嶇О" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="浜哄憳绫诲瀷" prop="type">
+ <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨">
+ <el-option label="鍔冲姟璁垮" value="0"></el-option>
+ <el-option label="鏅�氳瀹�" value="1"></el-option>
+ <el-option label="鍐呴儴鍛樺伐" value="2"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="璧峰鏃堕棿" prop="companyId">
+ <el-date-picker
+ v-model="searchForm.companyId"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
+ <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:member:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="companyId" label="鍏徃/缁勭粐" min-width="100px"></el-table-column>
+ <el-table-column prop="type" label="浜哄憳绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.type === 0">鍔冲姟璁垮</span>
+ <span v-if="row.type === 1">鏅�氳瀹�</span>
+ <span v-if="row.type === 2">鍐呴儴鍛樺伐</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="idcardNo" label="韬唤璇佸彿" min-width="100px"></el-table-column>
+ <el-table-column prop="eventDate" label="杩涘満闂ㄧ" min-width="100px"></el-table-column>
+ <el-table-column prop="eventDate" label="杩涘満鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="faceImg" label="杩涘満鎶撴媿鐓х墖" min-width="100px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'Retention',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ companyId: '',
+ type: '',
+ name: '',
+ phone: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '鍦ㄥ巶浜哄憳淇℃伅 琛紙婊炵暀锛�',
+ api: '/business/retention',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/strandedPersonnel.vue b/admin/src/views/business/strandedPersonnel.vue
new file mode 100644
index 0000000..0ea6dd6
--- /dev/null
+++ b/admin/src/views/business/strandedPersonnel.vue
@@ -0,0 +1,115 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヨ瀹㈠悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃鍚嶇О" prop="code">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎿嶄綔浜哄憳" prop="code">
+ <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鐢ㄦ埛绫诲瀷" prop="companyId">
+ <el-select v-model="searchForm.code" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
+ <li><el-button type="primary" v-permissions="['business:member:create']">绂诲満</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="company_id" label="鍏徃" min-width="100px"></el-table-column>
+ <el-table-column label="鐢ㄦ埛绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.type === 0">鍔冲姟璁垮</span>
+ <span v-if="row.type === 1">鏅�氳瀹�</span>
+ <span v-if="row.type === 2">鍐呴儴浜哄憳</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="idcard_id" label="鍏ュ満鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="edit_date" label="鎺堟潈鍒版湡鏃堕棿" min-width="100px"></el-table-column>
+ <el-table-column prop="idcard_id" label="瓒呮椂鏃堕暱" min-width="100px"></el-table-column>
+ <el-table-column prop="idcard_id" label="鐘舵��" min-width="100px"></el-table-column>
+ <el-table-column prop="editor" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:member:update', 'business:member:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']">绂诲巶</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'strandedPersonnel',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ companyId: '',
+ name: '',
+ code: '',
+ status: 2,
+ type: 1
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '浜哄憳淇℃伅琛�',
+ api: '/business/member',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/visitEvent.vue b/admin/src/views/business/visitEvent.vue
new file mode 100644
index 0000000..b26d310
--- /dev/null
+++ b/admin/src/views/business/visitEvent.vue
@@ -0,0 +1,114 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕" prop="personName">
+ <el-input v-model="searchForm.personName" placeholder="璇疯緭鍏ュ鍚�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵嬫満鍙风爜" prop="endTime">
+ <el-input v-model="searchForm.endTime" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="杞︾墝鍙�" prop="carNo">
+ <el-input v-model="searchForm.carNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃鍚嶇О" prop="endTime">
+ <el-input v-model="searchForm.endTime" placeholder="璇疯緭鍏ュ叕鍙稿悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="璁惧绫诲瀷" prop="carNo">
+ <el-select v-model="searchForm.carNo" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍑哄叆绫诲瀷" prop="carNo">
+ <el-select v-model="searchForm.carNo" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="璧峰鏃堕棿" prop="carNo">
+ <el-date-picker
+ v-model="searchForm.carNo"
+ type="daterange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-radio-group v-model="searchForm.eventType" size="small">
+ <el-radio-button label="褰撳ぉ"></el-radio-button>
+ <el-radio-button label="杩�7澶�"></el-radio-button>
+ <el-radio-button label="杩�30澶�"></el-radio-button>
+ </el-radio-group>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ >
+ <el-table-column prop="personName" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="endTime" label="鎵嬫満鍙风爜" min-width="100px"></el-table-column>
+ <el-table-column prop="idNo" label="韬唤璇佸彿鐮�" min-width="100px"></el-table-column>
+ <el-table-column prop="idNo" label="鍏徃" min-width="100px"></el-table-column>
+ <el-table-column prop="carNo" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="carNo" label="璁惧绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="carNo" label="璁惧鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="carNo" label="鍑哄叆绫诲瀷" min-width="100px"></el-table-column>
+ <el-table-column prop="captureUrl" label="鎶撴媿鍥緐ri" min-width="100px"></el-table-column>
+ <el-table-column prop="happenTime" label="鎶撴媿鐓х墖" min-width="100px"></el-table-column>
+ <el-table-column prop="captureUrl" label="浜嬩欢鏃堕棿" min-width="100px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+ name: 'VisitEvent',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ personName: '',
+ endTime: '',
+ carNo: ''
+ },
+ options: []
+ }
+ },
+ created () {
+ this.config({
+ module: '璁垮浜嬩欢鎺ㄩ�佽褰曡〃',
+ api: '/business/visitEvent',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/business/visitorManagement.vue b/admin/src/views/business/visitorManagement.vue
new file mode 100644
index 0000000..9ae6170
--- /dev/null
+++ b/admin/src/views/business/visitorManagement.vue
@@ -0,0 +1,112 @@
+<template>
+ <TableLayout :permissions="['business:member:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ鍚�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵嬫満鍙�" prop="phone">
+ <el-input v-model="searchForm.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃鍚嶇О" prop="companyName">
+ <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ュ叕鍙稿悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="韬唤璇佸彿" prop="idcardNo">
+ <el-input v-model="searchForm.idcardNo" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">
+ <li><el-button type="primary" v-permissions="['business:member:create']" @click="block">鎷夐粦</el-button></li>
+ <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">鍒犻櫎</el-button></li>
+ </ul>
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎬у埆" min-width="100px"></el-table-column>
+ <el-table-column label="璇佷欢绫诲瀷" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.idcardType === 0">韬唤璇�</span>
+ <span v-if="row.idcardType === 1">娓境璇佷欢</span>
+ <span v-if="row.idcardType === 2">鎶ょ収</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="idcardNo" label="韬唤璇佸彿" min-width="100px"></el-table-column>
+ <el-table-column prop="companyName" label="鍏徃" min-width="100px"></el-table-column>
+ <el-table-column prop="visitTimes" label="鎷滆娆℃暟" min-width="100px"></el-table-column>
+ <el-table-column prop="lastVisitDate" label="鏈�鍚庢嫓璁挎椂闂�" min-width="100px"></el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import { batchBlock } from '@/api/business/member'
+export default {
+ name: 'visitorManagement',
+ extends: BaseTable,
+ components: { TableLayout, Pagination },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ companyName: '',
+ name: '',
+ phone: '',
+ idcardNo: '',
+ type: 1
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '浜哄憳淇℃伅琛�',
+ api: '/business/member',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ },
+ methods: {
+ block () {
+ if (this.tableData.selectedRows.length === 0) {
+ this.$message.warning('璇烽�夋嫨浜哄憳')
+ return
+ }
+ this.$confirm('纭畾瑕佹媺榛戝悧?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ batchBlock(this.tableData.selectedRows.map(item => item.id).join(','))
+ .then(res => {
+ this.$message.success('鎷夐粦鎴愬姛')
+ this.search()
+ })
+ }).catch(() => {
+
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/visitorSources.vue b/admin/src/views/business/visitorSources.vue
new file mode 100644
index 0000000..129b678
--- /dev/null
+++ b/admin/src/views/business/visitorSources.vue
@@ -0,0 +1,66 @@
+<template>
+ <div class="box">
+ <el-form :model="form" ref="form" label-width="140px">
+ <el-form-item label="鏉ヨ棰勭害鏂瑰紡:" prop="doorIds">
+ <el-radio-group v-model="form.doorIds">
+ <el-radio :label="3">棰勭害鍏嶇櫥璁�</el-radio>
+ <el-radio :label="6">棰勭害鍚庣櫥璁�(闇�瑕侀厤澶囪瀹㈡満)</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="琚浜烘牎楠屾柟寮�:" prop="doorIds">
+ <el-radio-group v-model="form.doorIds">
+ <el-radio :label="3">浠呮墜鏈哄彿</el-radio>
+ <el-radio :label="6">鎵嬫満鍙�&濮撳悕</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="鍋ュ悍璇佹槸鍚﹀繀濉�:" prop="doorIds">
+ <el-radio-group v-model="form.doorIds">
+ <el-radio :label="3">鍚�</el-radio>
+ <el-radio :label="6">鏄�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="璁垮鏄惁绛旈:" prop="doorIds">
+ <el-switch
+ v-model="form.doorIds"
+ active-color="#13ce66"
+ inactive-color="#ff4949"
+ :active-value="1"
+ :inactive-value="0">
+ </el-switch>
+ </el-form-item>
+ <el-form-item label="璁垮绛旈涓婚:" prop="doorIds">
+ <el-input style="width: 50%;" v-model="form.doorIds" placeholder="璇疯緭鍏ョ瓟棰樻爣棰�" v-trim/>
+ </el-form-item>
+ <el-form-item label="璁垮绛旈璇存槑:" prop="doorIds">
+ <el-input style="width: 50%;" type="textarea" v-model="form.doorIds" placeholder="璇疯緭鍏�" v-trim/>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary">淇濆瓨閰嶇疆椤�</el-button>
+ </el-form-item>
+ </el-form>
+ </div>
+</template>
+
+<script>
+export default {
+ name: 'visitorSources',
+
+ data() {
+ return {
+ form: {
+ doorIds: ''
+ }
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+ .box {
+ width: 100%;
+ height: 100%;
+ padding: 30px;
+ box-sizing: border-box;
+ background: #ffffff;
+ }
+</style>
diff --git a/admin/src/views/business/visits.vue b/admin/src/views/business/visits.vue
new file mode 100644
index 0000000..239a1ab
--- /dev/null
+++ b/admin/src/views/business/visits.vue
@@ -0,0 +1,132 @@
+<template>
+ <TableLayout :permissions="['business:visits:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="韬唤璇佸彿" prop="idcardNo">
+ <el-input v-model="searchForm.idcardNo" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏徃鍚嶇О" prop="companyName">
+ <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ュ叕鍙稿悕绉�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="瀹℃壒鐘舵��" prop="status">
+ <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
+ <el-option label="寰呭鏍�" value="0"></el-option>
+ <el-option label="宸叉彁浜RP瀹℃壒" value="1"></el-option>
+ <el-option label="瀹℃牳閫氳繃" value="2"></el-option>
+ <el-option label="瀹℃牳涓嶉�氳繃" value="3"></el-option>
+ <el-option label="鍙栨秷" value="4"></el-option>
+ <el-option label="涓嬪彂鎴愬姛" value="5"></el-option>
+ <el-option label="涓嬪彂澶辫触" value="6"></el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+<!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:visits:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>-->
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+<!-- <ul class="toolbar" v-permissions="['business:visits:create', 'business:visits:delete']">-->
+<!-- <li><el-button type="primary" @click="$refs.operaVisitsWindow.open('鏂板缓璁垮鐢宠淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:visits:create']">鏂板缓</el-button></li>-->
+<!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:visits:delete']">鍒犻櫎</el-button></li>-->
+<!-- </ul>-->
+ <el-table
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="璁垮濮撳悕" min-width="100px"></el-table-column>
+ <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+ <el-table-column prop="companyName" label="鍏徃鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="receptMemberName" label="琚浜�" min-width="100px"></el-table-column>
+ <el-table-column prop="reason" label="鎷滆浜嬬敱" min-width="100px"></el-table-column>
+ <el-table-column label="鎷滆鏃堕棿" min-width="170px">
+ <template slot-scope="{row}">
+ <span>璧凤細{{row.starttime}}</span>
+ <span>姝細{{row.endtime}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="闅忚浜哄憳" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.visitsList && row.visitsList.length > 0">{{row.visitsList.length}}</span>
+ <span>0</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="闅忚杞﹁締" min-width="100px">
+ <template slot-scope="{row}">
+ <span v-if="row.carNos">{{row.carNos.split(',').length}}</span>
+ <span>0</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="status" fixed="right" label="鐘舵��" min-width="100px">
+ <template slot-scope="{row}">
+ <span style="color: rgba(245, 154, 35, 0.996);" v-if="row.status === 0">寰呭鏍�</span>
+ <span v-if="row.status === 1">宸叉彁浜RP瀹℃壒</span>
+ <span v-if="row.status === 2">瀹℃牳閫氳繃</span>
+ <span style="color: red;" v-if="row.status === 3">瀹℃牳涓嶉�氳繃</span>
+ <span v-if="row.status === 4">鍙栨秷</span>
+ <span v-if="row.status === 5">涓嬪彂鎴愬姛</span>
+ <span v-if="row.status === 6">涓嬪彂澶辫触</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:visits:update', 'business:visits:delete'])"
+ label="鎿嶄綔"
+ min-width="190"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('璇︽儏', row.id)" v-permissions="['business:visits:update']">鏌ョ湅璇︽儏</el-button>
+ <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:visits:delete']">鏌ヨ瀹℃壒缁撴灉</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ <!-- 璇︽儏 -->
+ <OperaVisitsDesWindow ref="OperaVisitsDesWindow" />
+ </template>
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
+export default {
+ name: 'Visits',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaVisitsDesWindow },
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ companyName: '',
+ idcardNo: '',
+ status: ''
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '璁垮鐢宠淇℃伅琛�',
+ api: '/business/visits',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ }
+}
+</script>
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 5bb54a6..c7438de 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -1,33 +1,207 @@
<template>
<div class="home">
- <div class="wrap">
- <h2>娆㈣繋浣跨敤浼婂▋鏋侀�熷紑鍙戞鏋�</h2>
- <p>鎮ㄤ娇鐢ㄧ殑姝ゅ寮�婧愭鏋舵病鏈変换浣曠増鏉冮棶棰橈紝鍙涔犲彲鍟嗙敤锛岃鏀惧績浣跨敤锛�</p>
- <p>浼婂▋鑷村姏浜庢墦閫犵畝娲併�佸悎鐞嗐�侀珮鏁堢殑寮�鍙戜綋楠岋紝涓烘鎴戜滑灏嗕笉鏂崌绾э紝鎰熻阿鎮ㄧ殑鏀寔锛�</p>
- <p style="margin-top: 12px;">
- <a href="https://gitee.com/coderd-repos/eva" target="_blank">GITEE</a>
- <a href="https://github.com/coderd-repos/eva" target="_blank">GITHUB</a>
- </p>
- <div class="guide">
- <a href="http://eva.adjustrd.com" target="_blank">鍓嶅線瀹樼綉</a>
- <a href="http://coderd.adjustrd.com/template/308/default" target="_blank">鍓嶅線CodeRd</a>
+ <div class="home_total">
+ <div class="home_total_head">鍦ㄥ巶浜哄憳鎬昏</div>
+ <div class="home_total_list">
+ <div class="home_total_list_item a">
+ <span>352</span>
+ <span>鍐呴儴鍛樺伐</span>
+ </div>
+ <div class="home_total_list_item b">
+ <span>352</span>
+ <span>璁垮</span>
+ </div>
+ <div class="home_total_list_item c">
+ <span>352</span>
+ <span>鍔冲姟浜哄憳</span>
+ </div>
+ <div class="home_total_list_item d">
+ <span>352</span>
+ <span>鍦ㄥ満杞﹁締</span>
+ </div>
+ <div class="home_total_list_item e">
+ <span>352</span>
+ <span>璁垮杞﹁締</span>
+ </div>
+ <div class="home_total_list_item f">
+ <span>352</span>
+ <span>鍔冲姟杞﹁締</span>
+ </div>
+ <div class="home_total_list_item g">
+ <span>352</span>
+ <span>渚涘簲鍟�</span>
+ </div>
</div>
- <img src="@/assets/images/qq.png">
- <p>浣犲彲浠ユ壂鐮佸姞鍏ョ兢鑱婁互鑾峰緱鎶�鏈敮鎸�</p>
- <div class="award">
- <h4>婵�鍔变綔鑰呭仛寰楁洿濂�</h4>
- <img src="@/assets/images/alipay.jpeg">
- <img src="@/assets/images/wxpay.jpeg">
+ </div>
+ <div class="home_charts">
+ <div class="home_charts_item">
+ <div class="home_charts_item_label">鍦ㄥ巶浜哄憳鍗犳瘮</div>
+ <div class="home_charts_item_charts" id="chart1"></div>
+ </div>
+ <div class="home_charts_item">
+ <div class="home_charts_item_label">鍔冲姟浜哄憳鍒嗗竷鎬昏</div>
+ <div class="home_charts_item_charts" id="chart2"></div>
+ </div>
+ </div>
+ <div class="home_table">
+ <div class="home_table_head">瓒呮椂棰勮浜哄憳(3)</div>
+ <div class="home_table_box">
+ <el-table
+ :data="list"
+ :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}"
+ border
+ style="width: 100%">
+ <el-table-column
+ prop="date"
+ label="璁垮濮撳悕">
+ </el-table-column>
+ <el-table-column
+ prop="name"
+ label="璁垮鐢佃瘽">
+ </el-table-column>
+ <el-table-column
+ prop="address"
+ label="璁垮鍏徃">
+ </el-table-column>
+ <el-table-column
+ prop="address"
+ label="鍏徃绫诲瀷">
+ </el-table-column>
+ <el-table-column
+ prop="address"
+ label="鎺堟潈鍒版湡鏃堕棿">
+ </el-table-column>
+ <el-table-column
+ prop="address"
+ label="鐘舵��">
+ </el-table-column>
+ <el-table-column
+ prop="address"
+ label="澶勭悊"
+ width="80">
+ <template slot-scope="scope">
+ <el-button type="text">绂诲満</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination
+ style="margin-top: 20px;"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ :current-page="page"
+ :page-sizes="[100, 200, 300, 400]"
+ :page-size="100"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="400">
+ </el-pagination>
</div>
</div>
</div>
</template>
<script>
+import * as echarts from 'echarts'
export default {
name: 'Index',
data () {
- return {}
+ return {
+ list: [],
+ page: 1
+ }
+ },
+ mounted () {
+ this.getcharts1()
+ this.getcharts2()
+ },
+ methods: {
+ handleSizeChange () {
+
+ },
+ handleCurrentChange () {
+
+ },
+ getcharts1 () {
+ const myChart = echarts.init(document.getElementById('chart1'))
+ // 缁樺埗鍥捐〃
+ myChart.setOption({
+ tooltip: {
+ trigger: 'item'
+ },
+ grid: {
+ bottom: '5%',
+ top: '5%'
+ },
+ legend: {
+ bottom: '0%',
+ left: 'center',
+ icon: 'circle'
+ },
+ series: [
+ {
+ type: 'pie',
+ radius: ['40%', '70%'],
+ label: {
+ formatter: '{b} {d}%'
+ },
+ data: [
+ { value: 1048, name: '鍔冲姟浜哄憳' },
+ { value: 735, name: '鍐呴儴鍛樺伐' },
+ { value: 580, name: '璁垮' }
+ ],
+ itemStyle: {
+ normal: {
+ color: function (colors) {
+ var colorList = [
+ '#fc8251',
+ '#5470c6',
+ '#91cd77'
+ ]
+ return colorList[colors.dataIndex]
+ }
+ }
+ },
+ emphasis: {
+ itemStyle: {
+ shadowBlur: 10,
+ shadowOffsetX: 0,
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
+ }
+ }
+ }
+ ]
+ })
+ },
+ getcharts2 () {
+ const myChart = echarts.init(document.getElementById('chart2'))
+ myChart.setOption({
+ tooltip: {
+ trigger: 'item'
+ },
+ grid: {
+ bottom: '5%',
+ top: '5%'
+ },
+ xAxis: {
+ max: 'dataMax'
+ },
+ yAxis: {
+ type: 'category',
+ data: ['娴峰悍濞佽', '鍐滀笟鏈夐檺鍏徃', '瀛楀箷涔熸湁闄愬叕鍙�', '涓囪揪鑲′唤鏈夐檺鍏徃', '闃块噷宸村反闆嗗洟鏈夐檺鍏徃', '鑵捐闆嗗洟鏈夐檺鍏徃']
+ },
+ series: [
+ {
+ realtimeSort: true,
+ type: 'bar',
+ data: [1, 2, 3, 4, 5, 6],
+ itemStyle: {
+ normal: {
+ color: '#fc8251'
+ }
+ }
+ }
+ ]
+ })
+ }
}
}
</script>
@@ -35,63 +209,118 @@
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
.home {
- text-align: center;
- color: #777;
- .wrap {
- margin-top: 80px;
- img {
- width: 240px;
+ width: 100%;
+ .home_table {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #ffffff;
+ margin-top: 20px;
+ .home_table_head {
+ font-size: 16px;
+ font-weight: 600;
+ color: black;
+ }
+ .home_table_box {
+ width: 100%;
+ margin-top: 15px;
}
}
- h2 {
- font-size: 32px;
- color: #555;
- margin-bottom: 20px;
- }
- p {
- line-height: 24px;
- margin: 0;
- }
- .start-up {
- margin-top: 8px;
- }
- .guide {
- margin: 30px 0 40px 0;
+ .home_charts {
+ width: 100%;
+ margin-top: 20px;
display: flex;
- justify-content: center;
- a {
- margin-right: 12px;
- padding: 12px 40px;
- border-radius: 30px;
- background: $primary-color;
- color: #fff;
- text-decoration: none;
+ align-items: center;
+ justify-content: space-between;
+ .home_charts_item {
+ padding: 20px;
+ box-sizing: border-box;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ margin-right: 20px;
+ background: #ffffff;
+ .home_charts_item_label {
+ font-size: 16px;
+ font-weight: 600;
+ color: black;
+ }
+ .home_charts_item_charts {
+ width: 100%;
+ height: 300px;
+ }
+ &:last-child {
+ margin: 0 !important;
+ }
}
}
- em,a {
- font-style: normal;
- font-weight: bold;
- margin: 0 3px;
- color: $primary-color;
- }
- .award {
- position: absolute;
- right: 20px;
- bottom: 60px;
- display: flex;
- flex-direction: column;
- text-align: left;
- padding: 12px;
- border: 1px solid #eee;
- box-shadow: -1px 1px 10px #ccc;
- h4 {
- font-weight: bold;
- margin-bottom: 8px;
+ .home_total {
+ width: 100%;
+ background: #ffffff;
+ margin-top: 20px;
+ .home_total_head {
+ width: 100%;
+ font-size: 16px;
+ font-weight: 600;
+ color: black;
+ padding: 10px 20px;
+ box-sizing: border-box;
+ border-bottom: 1px solid #ececec;
}
- img {
- width: 160px;
- margin-bottom: 20px;
- transition: opacity ease .3s;
+ .home_total_list {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ .a {
+ border-left: 5px solid rgba(129, 211, 248, 1) !important;
+ }
+ .b {
+ border-left: 5px solid rgba(236, 128, 141, 1) !important;
+ }
+ .c {
+ border-left: 5px solid rgba(250, 205, 145, 1) !important;
+ }
+ .d {
+ border-left: 5px solid rgba(245, 154, 35, 1) !important;
+ }
+ .e {
+ border-left: 5px solid rgba(128, 128, 255, 1) !important;
+ }
+ .f {
+ border-left: 5px solid rgba(202, 249, 130, 1) !important;
+ }
+ .g {
+ border-left: 5px solid rgba(194, 128, 255, 1) !important;
+ }
+ .home_total_list_item {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ justify-content: center;
+ height: 80px;
+ border-radius: 5px;
+ border: 1px solid #ececec;
+ margin-right: 15px;
+ &:last-child {
+ margin: 0 !important;
+ }
+ span {
+ &:first-child {
+ font-weight: 500;
+ font-size: 24px;
+ color: black;
+ }
+ &:last-child {
+ font-weight: 400;
+ font-size: 14px;
+ color: #666666;
+ margin-top: 2px;
+ }
+ }
+ }
}
}
}
diff --git a/admin/vue.config.js b/admin/vue.config.js
index d2a40a6..66f1a74 100644
--- a/admin/vue.config.js
+++ b/admin/vue.config.js
@@ -10,7 +10,11 @@
port: 10012,
proxy: {
[process.env.VUE_APP_API_PREFIX]: {
- target: 'http://192.168.0.197:10013',
+ // http://192.168.0.130:10013
+ // 192.168.0.110:10013 192.168.0.110:10013
+ // http://192.168.0.101:10013
+ // http://192.168.0.132:10013
+ target: 'http://192.168.0.108:10013',
changeOrigin: true,
pathRewrite: {
[`^${[process.env.VUE_APP_API_PREFIX]}`]: ''
--
Gitblit v1.9.3