From f30ccbaa6b7fd1292bcb61afd6d5dd0c7b6bf410 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 16 五月 2024 18:10:42 +0800
Subject: [PATCH] ‘’
---
admin/src/views/business/reportRecord.vue | 85 +++
admin/src/views/business/page-components/ReportDetail.vue | 422 ++++++++++++++++
admin/src/assets/style/style.scss | 8
admin/src/views/business/approvalConfiguration.vue | 844 +++++++++++++++++++--------------
admin/package-lock.json | 26
admin/package.json | 1
admin/src/views/business/visitOrigin.vue | 105 ++++
7 files changed, 1,122 insertions(+), 369 deletions(-)
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 1c372e3..f4e509d 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -2855,8 +2855,7 @@
"big.js": {
"version": "5.2.2",
"resolved": "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz?cache=0&sync_timestamp=1620132748267&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbig.js%2Fdownload%2Fbig.js-5.2.2.tgz",
- "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
- "dev": true
+ "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg="
},
"binary-extensions": {
"version": "2.2.0",
@@ -4527,6 +4526,11 @@
"integrity": "sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw=",
"dev": true
},
+ "dayjs": {
+ "version": "1.11.11",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz",
+ "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
+ },
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
@@ -5057,6 +5061,15 @@
"resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz?cache=0&sync_timestamp=1612643435705&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fejs%2Fdownload%2Fejs-2.7.4.tgz",
"integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=",
"dev": true
+ },
+ "el-tree-transfer": {
+ "version": "2.4.7",
+ "resolved": "https://registry.npmjs.org/el-tree-transfer/-/el-tree-transfer-2.4.7.tgz",
+ "integrity": "sha512-wcjQyqzmiJMDhF3qHR1NcqXp27Q65Td1EsMOVkqqOo9Z2mkVC+cGJEu3V4L90x8c1XgEciQL7tMuSjCP7/8G4g==",
+ "requires": {
+ "lodash": "^4.17.20",
+ "wl-core": "^1.1.4"
+ }
},
"electron-to-chromium": {
"version": "1.3.728",
@@ -14739,6 +14752,15 @@
"resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz",
"integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng=="
},
+ "wl-core": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/wl-core/-/wl-core-1.1.9.tgz",
+ "integrity": "sha512-7L83qEnrVW3YmPVqSwnlagoWJyVq/uSXkCFzND64nwtSdDm7o1RZQWiVgQcEilZxE0qLrRQKmjuAihNT6fWCjA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "dayjs": "^1.8.25"
+ }
+ },
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz",
diff --git a/admin/package.json b/admin/package.json
index 9b74e33..27e418b 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -16,6 +16,7 @@
"axios": "^0.21.1",
"core-js": "^3.6.5",
"echarts": "^5.4.3",
+ "el-tree-transfer": "^2.4.7",
"element-tiptap": "^1.27.1",
"element-ui": "^2.3.6",
"js-cookie": "^2.2.1",
diff --git a/admin/src/assets/style/style.scss b/admin/src/assets/style/style.scss
index f7e3036..d281a72 100644
--- a/admin/src/assets/style/style.scss
+++ b/admin/src/assets/style/style.scss
@@ -210,7 +210,13 @@
.mb20 {
margin-bottom: 20px;
}
-
+.red{
+ color: red !important;
+}
+.table_btns{
+ border-bottom: 1px solid #eee;
+ padding-bottom: 10px;
+}
.ml20 {
margin-left: 20px;
}
diff --git a/admin/src/views/business/approvalConfiguration.vue b/admin/src/views/business/approvalConfiguration.vue
index 24532ad..b2de731 100644
--- a/admin/src/views/business/approvalConfiguration.vue
+++ b/admin/src/views/business/approvalConfiguration.vue
@@ -1,132 +1,201 @@
<template>
- <TableLayout>
- <template v-slot:table-wrap>
- <div class="config">
- <div class="config_list">
- <div class="config_list_head">
- <span>閰嶇疆娴佺▼</span>
- <el-button style="background: #435EBE;" type="primary">鍙戝竷</el-button>
- </div>
- <div class="config_list_list">
- <div class="item">
- <div class="item_label">鍙戣捣浜�</div>
- <div class="item_child">
- <div class="item_child_label">绋嬫槬鏋�</div>
- <div class="item_child_val">璁垮</div>
- </div>
- <div class="item_down">
- <div class="item_down_x">
- <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
- </div>
- </div>
- </div>
- <div :class="item.active ? 'item yellow active' : 'item yellow'" v-for="(item, index) in list" :key="index" @click="seleItem(index)">
- <div class="item_label">瀹℃壒浜�</div>
- <div class="item_child" style="cursor: pointer;">
- <img class="item_child_right" src="@/assets/images/ar_more@2x.png" />
- <div class="item_child_label">琚浜�</div>
- <div class="item_child_val">璁垮</div>
- </div>
- <div class="item_down">
- <img class="item_down_add" v-if="list.length - 1 === index" src="@/assets/images/peizhi_add@2x.png" @click.stop="add" />
- <div class="item_down_x">
- <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
- </div>
- </div>
- </div>
- <div class="item blue" style="height: 81px;">
- <div class="item_label">鎶勯�佷汉</div>
- <div class="item_child" style="cursor: pointer;height: 40px;">
- <img class="item_child_right" src="@/assets/images/ar_more@2x.png" />
- <div class="item_child_val" style="margin-top: 3px;">璇疯缃妱閫佷汉</div>
- </div>
- <div class="item_down">
- <div class="item_down_x">
- <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
- </div>
- </div>
- </div>
- <div class="footer">
- <span>娴佺▼缁撴潫</span>
- </div>
- </div>
+ <TableLayout>
+ <template v-slot:table-wrap>
+ <el-tabs v-model="activeName">
+ <el-tab-pane label="鏅�氳瀹�" name="first"></el-tab-pane>
+ <el-tab-pane label="鏂藉伐璁垮" name="second"></el-tab-pane>
+ </el-tabs>
+ <div class="config">
+ <div class="config_list">
+ <div class="config_list_head">
+ <span>閰嶇疆娴佺▼</span>
+ <el-button style="background: #435ebe" type="primary"
+ >鍙戝竷</el-button
+ >
+ </div>
+ <div class="config_list_list">
+ <div class="item">
+ <div class="item_label">鍙戣捣浜�</div>
+ <div class="item_child">
+ <div class="item_child_label">绋嬫槬鏋�</div>
+ <div class="item_child_val">璁垮</div>
+ </div>
+ <div class="item_down">
+ <div class="item_down_x">
+ <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
</div>
- <div class="config_data">
- <div class="config_data_item">
- <div class="config_data_item_label">
- 閫夋嫨璇ヨ妭鐐圭殑瀹℃壒浜�
- </div>
- <el-radio-group v-model="radio">
- <el-radio :label="0">琚浜�</el-radio>
- <el-radio :label="1">鎸囧畾浜哄憳</el-radio>
- <el-radio :label="2">閮ㄩ棬涓荤</el-radio>
- </el-radio-group>
- <div class="config_data_item_reviewed" v-if="radio === 1">
- <div class="config_data_item_reviewed_label">
- <span>鎸囧畾瀹℃牳浜�</span>
- <span>涓嶈秴杩�20浜�</span>
- </div>
- <div class="config_data_item_reviewed_content">
- <div class="config_data_item_reviewed_content_item">
- <span>鏍撳瓙鍝�</span>
- <i class="el-icon-close"></i>
- </div>
- <span class="add">+娣诲姞</span>
- </div>
- </div>
- <div class="config_data_item_reviewed" v-if="radio === 2">
- <div class="config_data_item_reviewed_label">
- <span>閮ㄩ棬涓荤</span>
- </div>
- <div class="config_data_item_reviewed_r">
- <span>琚浜虹殑</span>
- <el-select v-model="value" placeholder="璇烽�夋嫨" style="margin: 0 20px 0 10px;">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- <el-checkbox v-model="checked">鎵句笉鍒颁富绠℃椂锛岀敱涓婄骇涓荤浠e鏍�</el-checkbox>
- </div>
- </div>
- </div>
- <div class="config_data_item" v-if="radio !== 0">
- <div class="config_data_item_label">
- 瀹℃壒鏂瑰紡
- <span>瀹℃壒浜轰负澶氫釜鏃讹紝閲囩敤鐨勫鎵规柟寮�</span>
- </div>
- <el-radio-group v-model="radio1" style="display: flex; flex-direction: column;">
- <el-radio :label="0" style="margin-bottom: 20px;">鎴栫锛堝叾涓竴鍚嶅鎵逛汉鍚屾剰鎴栨嫆缁濆嵆鍙級</el-radio>
- <el-radio :label="1">浼氱锛堟墍鏈夊鎵逛汉閮藉悓鎰忔墠鍙�氳繃锛�</el-radio>
- </el-radio-group>
- </div>
- <div class="config_data_item" v-if="radio === 2">
- <div class="config_data_item_label">
- 瀹℃壒浜轰负绌烘椂
- </div>
- <el-checkbox-group v-model="checkList" style="display: flex; flex-direction: column;">
- <el-checkbox label="澶嶉�夋 A" style="margin-bottom: 20px;"></el-checkbox>
- <el-checkbox label="澶嶉�夋 B" style="margin-bottom: 20px;"></el-checkbox>
- <el-checkbox label="澶嶉�夋 C"></el-checkbox>
- </el-checkbox-group>
- </div>
- <div class="config_data_submit" v-if="radio !== 0">
- <el-button style="background: #435EBE;" type="primary">淇濇寔閰嶇疆椤�</el-button>
- </div>
- </div>
+ </div>
</div>
- </template>
- </TableLayout>
+ <div
+ :class="item.active ? 'item yellow active' : 'item yellow'"
+ v-for="(item, index) in list"
+ :key="index"
+ @click="seleItem(index)"
+ >
+ <div class="item_label">瀹℃壒浜�</div>
+ <div class="item_child" style="cursor: pointer">
+ <img
+ class="item_child_right"
+ src="@/assets/images/ar_more@2x.png"
+ />
+ <div class="item_child_label">琚浜�</div>
+ <div class="item_child_val">璁垮</div>
+ </div>
+ <div class="item_down">
+ <!-- <img
+ class="item_down_add"
+ v-if="list.length - 1 === index"
+ src="@/assets/images/peizhi_add@2x.png"
+ @click.stop="add"
+ /> -->
+ <div class="item_down_x">
+ <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
+ </div>
+ </div>
+ </div>
+ <div class="item blue" style="height: 81px">
+ <div class="item_label">鎶勯�佷汉</div>
+ <div class="item_child" style="cursor: pointer; height: 40px">
+ <img
+ class="item_child_right"
+ src="@/assets/images/ar_more@2x.png"
+ />
+ <div class="item_child_val" style="margin-top: 3px">
+ 璇疯缃妱閫佷汉
+ </div>
+ </div>
+ <div class="item_down">
+ <div class="item_down_x">
+ <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
+ </div>
+ </div>
+ </div>
+ <div class="footer">
+ <span>娴佺▼缁撴潫</span>
+ </div>
+ </div>
+ </div>
+ <div class="config_data">
+ <div class="config_data_item">
+ <div class="config_data_item_label">閫夋嫨璇ヨ妭鐐圭殑瀹℃壒浜�</div>
+ <el-radio-group v-model="radio">
+ <el-radio :label="0">琚浜�</el-radio>
+ <el-radio :label="1">鎸囧畾浜哄憳</el-radio>
+ <el-radio :label="2">閮ㄩ棬涓荤</el-radio>
+ </el-radio-group>
+ <div class="config_data_item_reviewed" v-if="radio === 1">
+ <div class="config_data_item_reviewed_label">
+ <span>鎸囧畾瀹℃牳浜�</span>
+ <span>涓嶈秴杩�20浜�</span>
+ </div>
+ <div class="config_data_item_reviewed_content">
+ <div class="config_data_item_reviewed_content_item">
+ <span>鏍撳瓙鍝�</span>
+ <i class="el-icon-close"></i>
+ </div>
+ <span class="add" @click="selStaff">+娣诲姞</span>
+ </div>
+ </div>
+ <div class="config_data_item_reviewed" v-if="radio === 2">
+ <div class="config_data_item_reviewed_label">
+ <span>閮ㄩ棬涓荤</span>
+ </div>
+ <div class="config_data_item_reviewed_r">
+ <span>琚浜虹殑</span>
+ <el-select
+ v-model="value"
+ placeholder="璇烽�夋嫨"
+ style="margin: 0 20px 0 10px"
+ >
+ <el-option
+ v-for="item in options"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ >
+ </el-option>
+ </el-select>
+ <el-checkbox v-model="checked"
+ >鎵句笉鍒颁富绠℃椂锛岀敱涓婄骇涓荤浠e鏍�</el-checkbox
+ >
+ </div>
+ </div>
+ </div>
+ <div class="config_data_item" v-if="radio !== 0">
+ <div class="config_data_item_label">
+ 瀹℃壒鏂瑰紡
+ <span>瀹℃壒浜轰负澶氫釜鏃讹紝閲囩敤鐨勫鎵规柟寮�</span>
+ </div>
+ <el-radio-group
+ v-model="radio1"
+ style="display: flex; flex-direction: column"
+ >
+ <el-radio :label="0" style="margin-bottom: 20px"
+ >鎴栫锛堝叾涓竴鍚嶅鎵逛汉鍚屾剰鎴栨嫆缁濆嵆鍙級</el-radio
+ >
+ <el-radio :label="1">浼氱锛堟墍鏈夊鎵逛汉閮藉悓鎰忔墠鍙�氳繃锛�</el-radio>
+ </el-radio-group>
+ </div>
+ <div class="config_data_item" v-if="radio === 2">
+ <div class="config_data_item_label">瀹℃壒浜轰负绌烘椂</div>
+ <el-checkbox-group
+ v-model="checkList"
+ style="display: flex; flex-direction: column"
+ >
+ <el-checkbox
+ label="澶嶉�夋 A"
+ style="margin-bottom: 20px"
+ ></el-checkbox>
+ <el-checkbox
+ label="澶嶉�夋 B"
+ style="margin-bottom: 20px"
+ ></el-checkbox>
+ <el-checkbox label="澶嶉�夋 C"></el-checkbox>
+ </el-checkbox-group>
+ </div>
+ <div class="config_data_submit" v-if="radio !== 0">
+ <el-button style="background: #435ebe" type="primary"
+ >淇濇寔閰嶇疆椤�</el-button
+ >
+ </div>
+ </div>
+ </div>
+ </template>
+ <!-- -->
+ <el-dialog title="閫夋嫨鍛樺伐" :visible.sync="isShowTransfer" width="800px">
+ <tree-transfer
+ v-model="param.menuIds"
+ :title="['鏈��', '宸查��']"
+ :from_data="fromData"
+ :to_data="selData"
+ :defaultProps="{ label: 'label' }"
+ mode="transfer"
+ height="500px"
+ filter
+ openAll
+ ref="treeTransfer"
+ >
+ </tree-transfer>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="isShowTransfer = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="isShowTransfer = false"
+ >纭� 瀹�</el-button
+ >
+ </span>
+ </el-dialog>
+ </TableLayout>
</template>
<script>
import TableLayout from '@/layouts/TableLayout'
+import treeTransfer from 'el-tree-transfer'
export default {
name: 'config',
- components: { TableLayout },
- data () {
+ components: {
+ TableLayout,
+ treeTransfer
+ },
+ data() {
return {
list: [
{
@@ -139,17 +208,60 @@
radio: 0,
radio1: 0,
checked: '',
- checkList: []
+ checkList: [],
+
+ param: {},
+ activeName: 'first',
+ isShowTransfer: false,
+ fromData: [
+ {
+ id: '1',
+ pid: 0,
+ label: '涓�绾� 1',
+ children: [
+ {
+ id: '1-1',
+ pid: '1',
+ label: '浜岀骇 1-1',
+ disabled: true,
+ children: []
+ },
+ {
+ id: '1-2',
+ pid: '1',
+ label: '浜岀骇 1-2',
+ children: [
+ {
+ id: '1-2-1',
+ pid: '1-2',
+ children: [],
+ label: '浜岀骇 1-2-1'
+ },
+ {
+ id: '1-2-2',
+ pid: '1-2',
+ children: [],
+ label: '浜岀骇 1-2-2'
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ selData: []
}
},
methods: {
- add () {
+ add() {
this.list.push({
name: '',
active: false
})
},
- seleItem (i) {
+ selStaff() {
+ this.isShowTransfer = true
+ },
+ seleItem(i) {
this.list.forEach((item, index) => {
item.active = index === i
})
@@ -159,254 +271,254 @@
</script>
<style lang="scss" scoped>
- .config {
- width: 100%;
- padding-bottom: 20px;
- box-sizing: border-box;
- height: calc(100vh - 140px);
+.config {
+ width: 100%;
+ padding-bottom: 20px;
+ box-sizing: border-box;
+ height: calc(100vh - 140px);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ .config_list {
+ width: 543px;
+ height: 100%;
+ flex-shrink: 0;
+ border-radius: 2px;
+ padding: 20px;
+ box-sizing: border-box;
+ border: 1px solid #eeeeee;
+ background: #f7f7f7;
+ .config_list_head {
+ width: 100%;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ span {
+ font-size: 18px;
+ font-weight: 500;
+ color: #222222;
+ }
+ }
+ .config_list_list {
+ width: 100%;
+ height: calc(100% - 40px);
+ padding-top: 45px;
+ box-sizing: border-box;
+ overflow-y: scroll;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ &::-webkit-scrollbar {
+ width: 0;
+ }
+ .active {
+ border: 2px solid #e84a08 !important;
+ }
+ .yellow {
+ background: #ee8921 !important;
+ }
+ .blue {
+ background: #435ebe !important;
+ }
+ .footer {
+ width: 106px;
+ height: 41px;
+ background: #ffffff;
+ box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1);
+ border-radius: 25px;
display: flex;
align-items: center;
+ justify-content: center;
+ span {
+ font-size: 15px;
+ font-weight: 400;
+ color: #333333;
+ }
+ }
+ .item {
+ width: 200px;
+ height: 102px;
+ background: #7999d9;
+ box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1);
+ border-radius: 4px;
+ padding: 4px;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
justify-content: space-between;
- .config_list {
- width: 543px;
- height: 100%;
- flex-shrink: 0;
- border-radius: 2px;
- padding: 20px;
- box-sizing: border-box;
- border: 1px solid #EEEEEE;
- background: #F7F7F7;
- .config_list_head {
- width: 100%;
- height: 40px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- span {
- font-size: 18px;
- font-weight: 500;
- color: #222222;
- }
- }
- .config_list_list {
- width: 100%;
- height: calc(100% - 40px);
- padding-top: 45px;
- box-sizing: border-box;
- overflow-y: scroll;
- display: flex;
- align-items: center;
- flex-direction: column;
- &::-webkit-scrollbar {
- width: 0;
- }
- .active {
- border: 2px solid #E84A08 !important;
- }
- .yellow {
- background: #EE8921 !important;
- }
- .blue {
- background: #435EBE !important;
- }
- .footer {
- width: 106px;
- height: 41px;
- background: #FFFFFF;
- box-shadow: 0px 0px 8px 0px rgba(0,0,0,0.1);
- border-radius: 25px;
- display: flex;
- align-items: center;
- justify-content: center;
- span {
- font-size: 15px;
- font-weight: 400;
- color: #333333;
- }
- }
- .item {
- width: 200px;
- height: 102px;
- background: #7999D9;
- box-shadow: 0 0 8px 0 rgba(0,0,0,0.1);
- border-radius: 4px;
- padding: 4px;
- box-sizing: border-box;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- position: relative;
- margin-bottom: 60px;
- &:last-child {
- margin: 0 !important;
- }
- .item_down {
- position: absolute;
- bottom: -60px;
- width: 100%;
- height: 60px;
- display: flex;
- align-items: center;
- justify-content: center;
- .item_down_add {
- width: 46px;
- height: 46px;
- position: absolute;
- z-index: 3;
- top: 5px;
- cursor: pointer;
- }
- .item_down_x {
- width: 1px;
- height: 60px;
- background: #B2B2B2;
- position: relative;
- img {
- position: absolute;
- bottom: 0;
- left: -4px;
- width: 9px;
- height: 9px;
- }
- }
- }
- .item_label {
- width: 100%;
- height: 30px;
- display: flex;
- align-items: center;
- font-size: 15px;
- font-weight: 400;
- color: #FFFFFF;
- }
- .item_child {
- width: 100%;
- height: 61px;
- padding: 10px;
- box-sizing: border-box;
- background: #FFFFFF;
- border-radius: 4px;
- position: relative;
- .item_child_right {
- position: absolute;
- right: 10px;
- top: 13px;
- width: 8px;
- height: 14px;
- }
- .item_child_label {
- font-size: 14px;
- font-weight: 400;
- color: #333333;
- margin-bottom: 4px;
- }
- .item_child_val {
- font-size: 12px;
- font-weight: 400;
- color: #999999;
- }
- }
- }
- }
+ position: relative;
+ margin-bottom: 60px;
+ &:last-child {
+ margin: 0 !important;
}
- .config_data {
- flex: 1;
- height: 100%;
- margin-left: 20px;
- .config_data_submit {
- margin-top: 50px;
+ .item_down {
+ position: absolute;
+ bottom: -60px;
+ width: 100%;
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ .item_down_add {
+ width: 46px;
+ height: 46px;
+ position: absolute;
+ z-index: 3;
+ top: 5px;
+ cursor: pointer;
+ }
+ .item_down_x {
+ width: 1px;
+ height: 60px;
+ background: #b2b2b2;
+ position: relative;
+ img {
+ position: absolute;
+ bottom: 0;
+ left: -4px;
+ width: 9px;
+ height: 9px;
}
- .config_data_item {
- width: 100%;
- display: flex;
- flex-direction: column;
- margin-bottom: 30px;
- &:last-child {
- margin: 0 !important;
- }
- .config_data_item_label {
- font-size: 16px;
- font-weight: 500;
- color: #222222;
- margin-bottom: 20px;
- span {
- font-size: 12px;
- font-weight: 400;
- color: #999999;
- margin-left: 10px;
- }
- }
- .config_data_item_reviewed {
- width: 100%;
- margin-top: 20px;
- .config_data_item_reviewed_r {
- margin-top: 10px;
- width: 100%;
- display: flex;
- align-items: center;
- span {
- flex-shrink: 0;
- font-size: 14px;
- font-weight: 400;
- color: #666666;
- }
- }
- .config_data_item_reviewed_label {
- display: flex;
- align-items: center;
- span {
- &:nth-child(1) {
- font-size: 14px;
- font-weight: 400;
- color: #222222;
- }
- &:nth-child(2) {
- font-size: 12px;
- font-weight: 400;
- color: #999999;
- margin-left: 8px;
- }
- }
- }
- .config_data_item_reviewed_content {
- width: 400px;
- margin-top: 10px;
- height: 110px;
- padding: 12px;
- box-sizing: border-box;
- border-radius: 2px;
- border: 1px solid #DFE2E8;
- display: flex;
- align-items: flex-start;
- flex-wrap: wrap;
- .add {
- font-size: 12px;
- font-weight: 400;
- color: #435EBE;
- cursor: pointer;
- margin-top: 3px;
- }
- .config_data_item_reviewed_content_item {
- padding: 3px 5px;
- background: #F4F7FC;
- border-radius: 2px;
- box-sizing: border-box;
- margin-right: 10px;
- margin-bottom: 10px;
- span {
- font-size: 12px;
- font-weight: 400;
- color: #333333;
- }
- i {
- color: #949BA2;
- margin-left: 10px;
- cursor: pointer;
- }
- }
- }
- }
- }
+ }
}
+ .item_label {
+ width: 100%;
+ height: 30px;
+ display: flex;
+ align-items: center;
+ font-size: 15px;
+ font-weight: 400;
+ color: #ffffff;
+ }
+ .item_child {
+ width: 100%;
+ height: 61px;
+ padding: 10px;
+ box-sizing: border-box;
+ background: #ffffff;
+ border-radius: 4px;
+ position: relative;
+ .item_child_right {
+ position: absolute;
+ right: 10px;
+ top: 13px;
+ width: 8px;
+ height: 14px;
+ }
+ .item_child_label {
+ font-size: 14px;
+ font-weight: 400;
+ color: #333333;
+ margin-bottom: 4px;
+ }
+ .item_child_val {
+ font-size: 12px;
+ font-weight: 400;
+ color: #999999;
+ }
+ }
+ }
}
+ }
+ .config_data {
+ flex: 1;
+ height: 100%;
+ margin-left: 20px;
+ .config_data_submit {
+ margin-top: 50px;
+ }
+ .config_data_item {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ margin-bottom: 30px;
+ &:last-child {
+ margin: 0 !important;
+ }
+ .config_data_item_label {
+ font-size: 16px;
+ font-weight: 500;
+ color: #222222;
+ margin-bottom: 20px;
+ span {
+ font-size: 12px;
+ font-weight: 400;
+ color: #999999;
+ margin-left: 10px;
+ }
+ }
+ .config_data_item_reviewed {
+ width: 100%;
+ margin-top: 20px;
+ .config_data_item_reviewed_r {
+ margin-top: 10px;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ span {
+ flex-shrink: 0;
+ font-size: 14px;
+ font-weight: 400;
+ color: #666666;
+ }
+ }
+ .config_data_item_reviewed_label {
+ display: flex;
+ align-items: center;
+ span {
+ &:nth-child(1) {
+ font-size: 14px;
+ font-weight: 400;
+ color: #222222;
+ }
+ &:nth-child(2) {
+ font-size: 12px;
+ font-weight: 400;
+ color: #999999;
+ margin-left: 8px;
+ }
+ }
+ }
+ .config_data_item_reviewed_content {
+ width: 400px;
+ margin-top: 10px;
+ height: 110px;
+ padding: 12px;
+ box-sizing: border-box;
+ border-radius: 2px;
+ border: 1px solid #dfe2e8;
+ display: flex;
+ align-items: flex-start;
+ flex-wrap: wrap;
+ .add {
+ font-size: 12px;
+ font-weight: 400;
+ color: #435ebe;
+ cursor: pointer;
+ margin-top: 3px;
+ }
+ .config_data_item_reviewed_content_item {
+ padding: 3px 5px;
+ background: #f4f7fc;
+ border-radius: 2px;
+ box-sizing: border-box;
+ margin-right: 10px;
+ margin-bottom: 10px;
+ span {
+ font-size: 12px;
+ font-weight: 400;
+ color: #333333;
+ }
+ i {
+ color: #949ba2;
+ margin-left: 10px;
+ cursor: pointer;
+ }
+ }
+ }
+ }
+ }
+ }
+}
</style>
diff --git a/admin/src/views/business/page-components/ReportDetail.vue b/admin/src/views/business/page-components/ReportDetail.vue
new file mode 100644
index 0000000..697baf3
--- /dev/null
+++ b/admin/src/views/business/page-components/ReportDetail.vue
@@ -0,0 +1,422 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ text="鍚屾剰"
+ backText="鎷掔粷"
+ :visible.sync="isShowModal"
+ @confirm="confirm"
+ @close="reject"
+ >
+ <div class="modal_wrap">
+ <div class="modal_content">
+ <div class="header">
+ <div class="left">
+ <div class="h1">璁垮棰勭害</div>
+ <div class="time">鎻愪氦鏃堕棿锛�</div>
+ </div>
+ <div class="right">寰呭鏍�</div>
+ </div>
+ <div class="info">
+ <div class="title">璁垮鎶ュ璇︽儏</div>
+ <div class="list">
+ <div class="item">
+ <div class="label">琚浜�</div>
+ <div class="value"></div>
+ </div>
+ <div class="item">
+ <div class="label">鎷滆鏃堕棿</div>
+ <div class="value"></div>
+ </div>
+ <div class="item">
+ <div class="label">鍏ュ洯杞﹁締</div>
+ <div class="value"></div>
+ </div>
+ <div class="item">
+ <div class="label">鏉ヨ鍗曚綅</div>
+ <div class="value"></div>
+ </div>
+ <div class="item">
+ <div class="label">鑱旂郴浜�</div>
+ <div class="value"></div>
+ </div>
+ <div class="item">
+ <div class="label">闅忚溅浜烘暟</div>
+ <div class="value"></div>
+ </div>
+ <div class="item">
+ <div class="label">鏉ヨ浜嬬敱</div>
+ <div class="value"></div>
+ </div>
+ </div>
+ </div>
+ <div class="table_info">
+ <div class="title">璁垮淇℃伅</div>
+ <el-table :data="detail.datalist" border fit>
+ <el-table-column label="濮撳悕" prop="" min-width="150">
+ <template slot-scope="{ row }">
+ <div class="name_wrap">
+ <image src="" class="avatar" mode="" />
+ <div class="content">
+ <div class="line">
+ <div class="name">鏉庝笢</div>
+ <div class="tag">鐢宠浜�</div>
+ </div>
+ <div class="line placeholder9">1888888</div>
+ </div>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎬у埆" prop="" min-width="40" />
+ <el-table-column label="璇佷欢绫诲瀷" prop="" min-width="80" />
+ <el-table-column label="璇佷欢鍙风爜" prop="" min-width="120" />
+ <el-table-column label="鍏徃鍚嶇О" prop="" min-width="120" />
+ <el-table-column label="浜鸿劯鐓х墖" prop="" min-width="80">
+ <template slot-scope="{ row }">
+ <el-image :src="row.url" :preview-src-list="[row.url]">
+ </el-image>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </div>
+ <div class="side">
+ <div class="side_title">瀹℃壒娴佺▼</div>
+ <div class="list">
+ <div class="item">
+ <div class="separate"></div>
+ <div class="info">
+ <i class="el-icon-success icon"></i>
+ <img src="" class="avatar" alt="" />
+ <div class="content">
+ <div class="line">
+ <div class="name">鍒樻煇鍒樻煇</div>
+ <div class="time">2020-02-02 12:20</div>
+ </div>
+ <div class="line">
+ <div class="company">涓浗绉诲姩鏈夐檺鍏徃</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="item">
+ <!-- <div v-if="" class="separate"></div> -->
+ <div class="info">
+ <i class="el-icon-success icon"></i>
+ <img src="" class="avatar" alt="" />
+ <div class="content">
+ <div class="line">
+ <div class="name">鍒樻煇鍒樻煇</div>
+ <div class="time">2020-02-02 12:20</div>
+ </div>
+ <div class="line">
+ <div class="company">
+ 涓浗绉诲姩鏈夐檺鍏徃( <span class="status">宸插悓鎰�</span> )
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="remark">鎻愪氦绾﹀ソ鐨�</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- -->
+ <template #btns>
+ <el-button type="primary" plain @click="handleTransfer">杞氦</el-button>
+ </template>
+ <!-- 鍚屾剰/鎷掔粷 -->
+ <el-dialog
+ append-to-body
+ :title="apprTitle"
+ :visible.sync="isShowAppr"
+ width="480px"
+ >
+ <el-input
+ type="textarea"
+ :placeholder="apprTitle + '璇存槑锛岄潪蹇呭~'"
+ :rows="4"
+ v-model="param.explain"
+ />
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="isShowAppr = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="isShowAppr = false">纭畾</el-button>
+ </span>
+ </el-dialog>
+ <!-- 闅愭偅 -->
+ <el-dialog
+ append-to-body
+ title="闅愭偅"
+ :visible.sync="isShowProblem"
+ width="480px"
+ >
+ <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
+ <el-form-item label="閫�鍥炴椂闂�">
+ <el-date-picker
+ class="w300"
+ value-format="yyyy-MM-dd"
+ type="date"
+ placeholder="閫夋嫨鏃ユ湡"
+ v-model="param.date"
+ />
+ </el-form-item>
+ <el-form-item label="鏁存敼鍓�">
+ <div class="df_ac">
+ <img src="@/assets/avatar/man.png" />
+ <el-upload
+ class="avatar-uploader"
+ action="https://jsonplaceholder.typicode.com/posts/"
+ :show-file-list="false"
+ :on-success="handleAvatarSuccess"
+ :before-upload="beforeAvatarUpload"
+ >
+ <img v-if="param.url" :src="param.url" class="avatar" />
+ <div v-else class="upload_box">
+ <el-icon class="el-icon-plus icon" />
+ <div class="text">鍥剧墖/瑙嗛</div>
+ </div>
+ </el-upload>
+ </div>
+ </el-form-item>
+ <el-form-item label="閫�鍥炶鏄�">
+ <el-input
+ type="textarea"
+ placeholder="璇峰~鍐欒鏄�"
+ :rows="4"
+ v-model="param.explain"
+ />
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="isShowProblem = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="isShowProblem = false"
+ >纭畾</el-button
+ >
+ </span>
+ </el-dialog>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+ components: { GlobalWindow },
+ data() {
+ return {
+ title: '璁垮棰勭害璇︽儏',
+ isShowModal: false,
+ detail: {
+ datalist: [{}]
+ },
+
+ isShowAppr: false,
+ apprTitle: '鍚屾剰',
+ param: {},
+
+ isShowProblem: false,
+ rules: {}
+ }
+ },
+ methods: {
+ confirm() {
+ console.log('--')
+ },
+ handleTransfer() {
+ this.isShowProblem = true
+ },
+ reject() { },
+ handleAvatarSuccess() { },
+ beforeAvatarUpload() { }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+.upload_box {
+ width: 84px;
+ height: 84px;
+ border-radius: 4px;
+ background-color: #f7f7f7;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ color: #999999;
+ border: 1px solid #e4e4e4;
+ .icon {
+ font-size: 24px;
+ }
+ .text {
+ font-size: 12px;
+ }
+}
+.modal_wrap {
+ display: flex;
+ height: 100%;
+ .modal_content {
+ flex: 1;
+ padding: 0px 30px;
+ border-radius: 8px;
+ overflow: hidden;
+ height: 100%;
+
+ .title {
+ font-weight: 600;
+ font-size: 18px;
+ color: #333333;
+ margin-bottom: 20px;
+ margin-top: 30px;
+ }
+
+ .info {
+ .list {
+ display: flex;
+ flex-wrap: wrap;
+
+ .item {
+ display: flex;
+ width: 40%;
+ margin-bottom: 20px;
+ &:nth-of-type(2n) {
+ width: 60%;
+ }
+
+ .label {
+ color: #888888;
+ width: 68px;
+ }
+
+ .value {
+ color: #111111;
+ }
+ }
+ }
+ }
+
+ .header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20px 30px;
+ margin: 0 -30px;
+ border-radius: 8px 8px 0 0;
+ background: linear-gradient(to right, #f2f6fe, #cadffa);
+
+ .h1 {
+ font-weight: 600;
+ font-size: 22px;
+ color: #111111;
+ margin-bottom: 8px;
+ }
+
+ .time {
+ font-size: 14px;
+ color: #999999;
+ }
+
+ .right {
+ height: 40px;
+ font-size: 16px;
+ color: #ffffff;
+ line-height: 40px;
+ padding: 0 20px;
+ background: #207ff7;
+ box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
+ border-radius: 16px 0px 16px 0px;
+ }
+ }
+ .table_info {
+ .name_wrap {
+ display: flex;
+ align-items: center;
+ .avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ margin-right: 12px;
+ }
+ .content {
+ .line {
+ display: flex;
+ }
+ .tag {
+ color: #b2cbf9;
+ border: 1px solid #b2cbf9;
+ padding: 0px 4px;
+ border-radius: 4px;
+ margin-left: 6px;
+ }
+ }
+ }
+ }
+ }
+
+ .side {
+ height: 100%;
+ width: 420px;
+ background: #ffffff;
+ border-left: 20px solid #f7f7f7;
+ .list {
+ .item {
+ padding: 8px 0;
+ position: relative;
+ .separate {
+ position: absolute;
+ border-left: 2px dashed #cccccc;
+ left: 51px;
+ height: calc(100% - 24px);
+ top: 46px;
+ }
+ .info {
+ display: flex;
+ align-items: center;
+ margin-left: 40px;
+ .icon {
+ position: relative;
+ z-index: 11;
+ color: #53b76f;
+ font-size: 24px;
+ }
+ .avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ margin: 0 12px 0 16px;
+ border: 1px solid;
+ }
+ .content {
+ flex: 1;
+ .line {
+ display: flex;
+ justify-content: space-between;
+ align-content: center;
+ margin-bottom: 6px;
+ .name {
+ font-weight: 600;
+ font-size: 16px;
+ color: #111111;
+ }
+ .time {
+ color: #888888;
+ }
+ .company {
+ font-size: 13px;
+ color: #888888;
+ .status {
+ color: #00ba67;
+ }
+ }
+ }
+ }
+ }
+ .remark {
+ background: #f7f7f7;
+ border-radius: 4px;
+ padding: 13px 15px;
+ color: #666666;
+ margin-left: 120px;
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/admin/src/views/business/reportRecord.vue b/admin/src/views/business/reportRecord.vue
new file mode 100644
index 0000000..348d2ef
--- /dev/null
+++ b/admin/src/views/business/reportRecord.vue
@@ -0,0 +1,85 @@
+<template>
+ <div class="main_app">
+ <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
+ <el-table v-loading="loading" :data="list" stripe row-key="id" default-expand-all>
+ <el-table-column prop="" label="鍏ュ洯杞﹁締" min-width="100" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="" label="鍏徃鍚嶇О" min-width="120" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="" label="鑱旂郴浜轰俊鎭�" min-width="100" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="" label="鎵嬫満鍙�" min-width="120" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="" label="琚浜�" min-width="120" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="" label="鎷滆鏃堕棿" min-width="120" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="" label="鎷滆浜嬬敱" min-width="80" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="" fixed="right" label="鐘舵��" min-width="100"></el-table-column>
+ <el-table-column label="鎿嶄綔" width="230" fixed="right">
+ <template slot-scope="{row}">
+ <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">鏌ョ湅璇︽儏</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
+ <ReportDetail v-if="isShowDetail" ref="DetailRef" />
+ </div>
+</template>
+
+<script>
+import Pagination from '@/components/common/Pagination'
+import QueryForm from '@/components/common/QueryForm'
+import ReportDetail from './page-components/ReportDetail.vue'
+export default {
+ components: {
+ ReportDetail,
+ QueryForm,
+ Pagination
+ },
+ data () {
+ return {
+ isShowDetail: false,
+ activeTab: '0',
+ filters: {},
+ queryFormConfig: {
+ formItems: [
+ {
+ filed: 'idCard',
+ type: 'input',
+ label: '杞︾墝鍙�'
+ },
+ {
+ filed: 'name',
+ type: 'input',
+ label: '鍏徃鍚嶇О'
+ }
+ ],
+ online: true
+ },
+ loading: false,
+ sorting: false,
+ searchForm: {
+ // type: 1
+ },
+ pagination: {
+ capacity: 10,
+ page: 1
+ },
+ list: [{}],
+ total: 0
+ }
+ },
+ methods: {
+ handleDetail () {
+ this.isShowDetail = true
+ this.$nextTick(() => {
+ this.$refs.DetailRef.isShowModal = true
+ })
+ },
+ getList (page) {},
+ clear () { },
+ handleSizeChange (capacity) {
+ this.pagination.capacity = capacity
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/admin/src/views/business/visitOrigin.vue b/admin/src/views/business/visitOrigin.vue
new file mode 100644
index 0000000..a3b5af1
--- /dev/null
+++ b/admin/src/views/business/visitOrigin.vue
@@ -0,0 +1,105 @@
+<template>
+ <div class="main_app">
+ <div class="table_btns">
+ <el-button icon="el-icon-plus" @click="handleEdit()" type="primary"
+ >鏂板缓</el-button
+ >
+ </div>
+ <el-table v-loading="loading" :data="list" stripe>
+ <el-table-column
+ prop="name"
+ label="鎷滆浜嬬敱"
+ min-width="100"
+ ></el-table-column>
+ <el-table-column
+ prop="name"
+ label="鎺掑簭鐮�"
+ min-width="80"
+ ></el-table-column>
+ <el-table-column label="鎿嶄綔" width="230" fixed="right">
+ <!-- v-permissions="['business:company:update']" -->
+ <template slot-scope="{ row }">
+ <el-button type="text" icon="el-icon-edit" @click="handleEdit(row)"
+ >缂栬緫</el-button
+ >
+ <el-button
+ type="text"
+ icon="el-icon-delete"
+ @click="handleDetail(row)"
+ class="red"
+ >鍒犻櫎</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="getList"
+ :pagination="pagination"
+ />
+ <!-- -->
+ <el-dialog title="鎷滆浜嬬敱" :visible.sync="isShowEdit" width="480px">
+ <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
+ <el-form-item label="鎷滆浜嬬敱">
+ <el-input type="text" placeholder="璇疯緭鍏�" v-model="param.explain" />
+ </el-form-item>
+ <el-form-item label="鎺掑簭鐮�">
+ <el-input
+ type="text"
+ placeholder="璇疯緭鍏�"
+ oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)"
+ v-model="param.sortNum"
+ />
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="isShowEdit = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="handleSub">纭畾</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import Pagination from '@/components/common/Pagination'
+export default {
+ components: {
+ Pagination
+ },
+ data() {
+ return {
+ loading: false,
+ pagination: {
+ capacity: 10,
+ page: 1
+ },
+ list: [{}],
+ total: 0,
+
+ isShowEdit: false,
+ param: {},
+ rules: {}
+ }
+ },
+ methods: {
+ handleSub() {
+ this.$refs.ruleForm.validate((valid) => {
+ if (valid) {
+ alert('submit!')
+ }
+ })
+ },
+ handleEdit() {
+ this.isShowEdit = true
+ },
+ getList(page) { },
+ clear() { },
+ handleSizeChange(capacity) {
+ this.pagination.capacity = capacity
+ }
+ }
+}
+</script>
+
+<style>
+</style>
--
Gitblit v1.9.3