From 624e812b40ac87bf8d7a17b83b4a3bc3bbd901fb Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期四, 03 八月 2023 18:38:58 +0800
Subject: [PATCH] 增加客户服务单(删除工单管理、消费服务单)和客户管理模块详情页
---
src/components/index.js | 3
src/views/client/followupRecords/AddFollowupRecordsDialog.vue | 86 +
src/views/sales/masterOrder/index.vue | 36
src/components/makepager/TableCommonView.vue | 37
src/views/service/orderManage/AddOrderManageDialog.vue | 458 ++++++++-
src/views/client/salesLead/index.vue | 45
src/views/sales/salesReturn/index.vue | 25
src/views/client/followupRecords/index.vue | 79 +
src/components/layout/components/appsidebar/index.vue | 4
src/views/client/contacts/DetailContacts.vue | 363 ++++++++
src/views/service/serviceContract/index.vue | 36
src/views/service/serviceFollowup/index.vue | 25
src/views/sales/contractManage/index.vue | 39
src/views/sales/salesDetails/index.vue | 36
src/components/makepager/pager/PagerView.vue | 2
src/views/client/client/index.vue | 77 +
src/views/sales/subOrder/index.vue | 36
src/components/makepager/PublicFunctionBtnView.vue | 4
src/views/client/client/DetailClientManage.vue | 528 ++++++++++++
src/components/makepager/DetailListCommonBtn.vue | 73 +
src/views/sales/refundForm/index.vue | 25
src/views/client/contacts/index.vue | 74 +
src/views/client/salesLead/DetailSalesLead.vue | 365 ++++++++
src/assets/style/index.scss | 10
src/views/service/orderManage/index.vue | 55
src/main.js | 5
src/views/sales/salesOpportunity/index.vue | 44
src/router/service/index.js | 2
src/views/sales/generatePlan/index.vue | 25
src/views/sales/quotation/index.vue | 42
30 files changed, 2,351 insertions(+), 288 deletions(-)
diff --git a/src/assets/style/index.scss b/src/assets/style/index.scss
index 555ade6..361de82 100644
--- a/src/assets/style/index.scss
+++ b/src/assets/style/index.scss
@@ -1,3 +1,13 @@
@import "element-ui/lib/theme-chalk/index.css";
@import "./variable.scss";
@import "./reset-element.scss";
+
+ul,
+ol,
+li {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ outline: 0;
+}
diff --git a/src/components/index.js b/src/components/index.js
index 57970cb..14771f4 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -3,8 +3,9 @@
import PublicFunctionBtnView from "@/components/makepager/PublicFunctionBtnView"
import PagerView from "@/components/makepager/pager/PagerView"
import TableCommonView from "@/components/makepager/TableCommonView"
+import DetailListCommonBtn from "@/components/makepager/DetailListCommonBtn"
-const components = [SearchCommonView, PublicFunctionBtnView, PagerView, TableCommonView]
+const components = [SearchCommonView, PublicFunctionBtnView, PagerView, TableCommonView, DetailListCommonBtn]
components.forEach((component) => {
Vue.component(component.name, component)
})
diff --git a/src/components/layout/components/appsidebar/index.vue b/src/components/layout/components/appsidebar/index.vue
index 57830b9..a4964d2 100644
--- a/src/components/layout/components/appsidebar/index.vue
+++ b/src/components/layout/components/appsidebar/index.vue
@@ -44,9 +44,9 @@
<span>鏈嶅姟绠$悊</span>
</template>
<el-menu-item index="/service/serviceContract">鏈嶅姟鍚堝悓</el-menu-item>
- <el-menu-item index="/service/orderManage">宸ュ崟绠$悊</el-menu-item>
+ <el-menu-item index="/service/orderManage">瀹㈡埛鏈嶅姟鍗�</el-menu-item>
<el-menu-item index="/service/serviceFollowup">鏈嶅姟鍥炶鍗�</el-menu-item>
- <el-menu-item index="/service/serviceFeeManage">鏈嶅姟鏀惰垂绠$悊</el-menu-item>
+ <!-- <el-menu-item index="/service/serviceFeeManage">鏈嶅姟鏀惰垂绠$悊</el-menu-item> -->
</el-submenu>
<!-- <el-submenu index="4">
<template slot="title">
diff --git a/src/components/makepager/DetailListCommonBtn.vue b/src/components/makepager/DetailListCommonBtn.vue
new file mode 100644
index 0000000..5e3f4c1
--- /dev/null
+++ b/src/components/makepager/DetailListCommonBtn.vue
@@ -0,0 +1,73 @@
+<template>
+ <div class="detail-list">
+ <div class="add" @click="addBtnClick">
+ <i class="el-icon-circle-plus-outline" style="font-size: 15px; margin-right: 5px"></i>
+ <span>鏂板缓</span>
+ </div>
+ <div class="query-class">
+ <div class="query-class-title">鏌ヨ鍒嗙被</div>
+ <el-select v-model="queryClassValue" placeholder="璇烽�夋嫨" class="query-class-sel" size="mini">
+ <el-option v-for="item in queryClassOptions" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "DetailListCommonBtn",
+ components: {},
+ props: {
+ queryClass: {
+ type: String,
+ default: "1"
+ },
+ queryClassOptions: {
+ type: Array,
+ default: () => []
+ }
+ },
+ data() {
+ return {
+ queryClassValue: this.queryClass
+ }
+ },
+ methods: {
+ addBtnClick() {
+ this.$parent.addBtnClick()
+ }
+ }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style lang="scss" scoped>
+.detail-list {
+ display: flex;
+ align-items: center;
+ font-size: 12px;
+ .add {
+ color: #2a304d;
+ height: 36px;
+ line-height: 36px;
+ width: 60px;
+ text-align: center;
+ margin-left: 10px;
+ cursor: pointer;
+ }
+ .query-class {
+ display: flex;
+ height: 50px;
+ line-height: 50px;
+ .query-class-title {
+ margin-left: 10px;
+ color: #666;
+ }
+ .query-class-sel {
+ width: 165px;
+ margin-left: 10px;
+ }
+ }
+}
+</style>
diff --git a/src/components/makepager/PublicFunctionBtnView.vue b/src/components/makepager/PublicFunctionBtnView.vue
index af31de2..e7d3b84 100644
--- a/src/components/makepager/PublicFunctionBtnView.vue
+++ b/src/components/makepager/PublicFunctionBtnView.vue
@@ -8,9 +8,9 @@
<!-- <el-button v-if="submitApproval" size="small" type="text" class="gray width64" @click="submitApprovalBtnClick"
>鎻愪氦瀹℃壒
</el-button> -->
- <!-- <el-button v-if="duplicateCheck" size="small" type="text" class="gray" @click="duplicateCheckBtnClick"
+ <el-button v-if="duplicateCheck" size="small" type="text" class="gray" @click="duplicateCheckBtnClick"
>鏌ラ噸</el-button
- > -->
+ >
<!-- <el-button v-if="importButton" size="small" type="text" class="gray" @click="importBtnClick">瀵煎叆</el-button>
<el-button v-if="departmentSet" size="small" type="text" class="gray" @click="departmentSetClick"
>閮ㄩ棬璁剧疆</el-button
diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue
index 129ae2b..80b1e97 100644
--- a/src/components/makepager/TableCommonView.vue
+++ b/src/components/makepager/TableCommonView.vue
@@ -1,5 +1,5 @@
<template>
- <div class="page-view">
+ <div class="table-view">
<el-table
ref="table"
border
@@ -32,9 +32,27 @@
? "--"
: dateFormat("YYYY-mm-dd HH:MM:SS", scope.row[item.prop])
}}</span>
- <span v-else-if="item.isClick" class="sel-name" @click="selNameClick(scope.row)">{{
+ <span v-else-if="item.isClick && scope.row[item.prop]" class="sel-name" @click="selNameClick(scope.row)">{{
scope.row[item.prop]
}}</span>
+ <span
+ v-else-if="item.isSalesLeadClick && scope.row[item.prop]"
+ class="sel-name"
+ @click="selSalesLeadClick(scope.row)"
+ >{{ scope.row[item.prop] }}</span
+ >
+ <span
+ v-else-if="item.isClientClick && scope.row[item.prop]"
+ class="sel-name"
+ @click="selClientClick(scope.row)"
+ >{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span
+ >
+ <span
+ v-else-if="item.isContactClick && scope.row[item.prop]"
+ class="sel-name"
+ @click="selContactsClick(scope.row)"
+ >{{ scope.row[item.prop] }}</span
+ >
<span v-else>{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span>
</template>
</el-table-column>
@@ -184,6 +202,15 @@
},
selNameClick(row) {
this.$emit("selCommonClick", row)
+ },
+ selSalesLeadClick(row) {
+ this.$emit("selSalesLeadClick", row)
+ },
+ selClientClick(row) {
+ this.$emit("selClientClick", row)
+ },
+ selContactsClick(row) {
+ this.$emit("selContactsClick", row)
}
}
}
@@ -191,10 +218,10 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
-.page-view {
- margin-top: 20px;
+.table-view {
+ // margin-top: 20px;
margin-right: 10px;
- margin-bottom: 40px;
+ // margin-bottom: 40px;
.blue {
width: 70px;
text-align: center;
diff --git a/src/components/makepager/pager/PagerView.vue b/src/components/makepager/pager/PagerView.vue
index 6160f1c..df8eae2 100644
--- a/src/components/makepager/pager/PagerView.vue
+++ b/src/components/makepager/pager/PagerView.vue
@@ -18,7 +18,7 @@
props: {
pageSizes: {
type: Array,
- default: () => [10, 20, 30, 40]
+ default: () => [5, 10, 20, 30, 40]
},
layout: {
type: String,
diff --git a/src/main.js b/src/main.js
index 6b8ee12..8acc4e8 100644
--- a/src/main.js
+++ b/src/main.js
@@ -8,6 +8,11 @@
import "@/components"
Vue.use(ElementUI)
+// 淇敼榛樿鐐瑰嚮閬僵灞備负涓嶅叧闂�
+ElementUI.MessageBox.setDefaults({
+ closeOnClickModal: false
+})
+ElementUI.Dialog.props.closeOnClickModal.default = false
Vue.config.productionTip = false
diff --git a/src/router/service/index.js b/src/router/service/index.js
index a4b6ab2..821c23a 100644
--- a/src/router/service/index.js
+++ b/src/router/service/index.js
@@ -19,7 +19,7 @@
name: "orderManage",
component: orderManage,
meta: {
- title: "宸ュ崟绠$悊"
+ title: "瀹㈡埛鏈嶅姟鍗�"
}
},
{
diff --git a/src/views/client/client/DetailClientManage.vue b/src/views/client/client/DetailClientManage.vue
new file mode 100644
index 0000000..e1c0423
--- /dev/null
+++ b/src/views/client/client/DetailClientManage.vue
@@ -0,0 +1,528 @@
+<template>
+ <div class="detail-view">
+ <el-drawer
+ :visible.sync="detailConfig.visible"
+ size="80%"
+ :before-close="handleClose"
+ :wrapperClosable="false"
+ :append-to-body="true"
+ >
+ <template slot="title">
+ <div class="header">
+ <span class="header-label">瀹㈡埛鍚嶇О</span>
+ <span class="header-title">{{ detailConfig.infomation.client_name }}</span>
+ </div>
+ </template>
+ <div class="content">
+ <div class="tab-view">
+ <el-tabs v-model="activeName" @tab-click="tabsClick">
+ <el-tab-pane label="璇︽儏" name="first"></el-tab-pane>
+ <el-tab-pane label="鑱旂郴浜�" name="contact"></el-tab-pane>
+ <el-tab-pane label="璺熻繘璁板綍" name="second">
+ <!-- <template slot="label">
+ <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
+ </template> -->
+ </el-tab-pane>
+ <el-tab-pane label="閿�鍞満浼�" name="salesOpportunity"></el-tab-pane>
+ <el-tab-pane label="鎶ヤ环鍗�" name="quotation"></el-tab-pane>
+ <el-tab-pane label="閿�鍞�诲崟" name="master"></el-tab-pane>
+ <el-tab-pane label="閿�鍞瓙鍗�" name="sub"></el-tab-pane>
+ <el-tab-pane label="閿�鍞槑缁嗗崟" name="detail"></el-tab-pane>
+ <el-tab-pane label="鏀舵鍗�" name="plan"></el-tab-pane>
+ </el-tabs>
+ </div>
+ <div v-if="activeName === 'first'" class="detail">
+ <!-- 鍩烘湰淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('basic')">
+ <i v-if="isBasicExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鍩烘湰淇℃伅</span>
+ </div>
+ <div v-show="isBasicExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in basicInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 瀹㈡埛棣栬鑱旂郴浜� -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('contact')">
+ <i v-if="isContactExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">瀹㈡埛棣栬鑱旂郴浜�</span>
+ </div>
+ <div v-show="isContactExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in contactList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 鍔ㄦ�佷俊鎭� -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('dynamic')">
+ <i v-if="isDynamicExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鍔ㄦ�佷俊鎭�</span>
+ </div>
+ <div v-show="isDynamicExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in dynamicInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 宸ュ晢淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('business')">
+ <i v-if="isBusinessExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">宸ュ晢淇℃伅</span>
+ </div>
+ <div v-show="isBusinessExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in businessInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 鍦板潃淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('address')">
+ <i v-if="isAddressExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鍦板潃淇℃伅</span>
+ </div>
+ <div v-show="isAddressExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in addressInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 澶囨敞淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('remark')">
+ <i v-if="isRemarkExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">澶囨敞淇℃伅</span>
+ </div>
+ <div v-show="isRemarkExpand" class="basic-info-content">
+ <ul>
+ <li>
+ <div class="left remark">
+ <div class="content-title">{{ "澶囨敞锛�" }}</div>
+ <div class="content-data">{{ "澶囨敞鍐呭" }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 闄勪欢淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('annex')">
+ <i v-if="isAnnexExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">闄勪欢淇℃伅</span>
+ </div>
+ <div v-show="isAnnexExpand" class="basic-info-content">
+ <ul>
+ <li>
+ <div class="left remark">
+ <div class="content-title">{{ "闄勪欢锛�" }}</div>
+ <div class="content-data">{{ "" }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div v-if="activeName === 'contact'" class="second">
+ <Contacts :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'second'" class="second">
+ <FollowupRecords :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'salesOpportunity'" class="second">
+ <SalesOpportunity :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'quotation'" class="second">
+ <Quotation :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'master'" class="second">
+ <MasterOrder :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'sub'" class="second">
+ <SubOrder :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'detail'" class="second">
+ <SalesDetails :isDetail="true" />
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import FollowupRecords from "@/views/client/followupRecords"
+import Contacts from "@/views/client/contacts"
+import SalesOpportunity from "@/views/sales/salesOpportunity"
+import Quotation from "@/views/sales/quotation"
+import MasterOrder from "@/views/sales/masterOrder"
+import SubOrder from "@/views/sales/subOrder"
+import SalesDetails from "@/views/sales/salesDetails"
+export default {
+ name: "DetailClientManage",
+ props: {
+ clientManageDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { FollowupRecords, Contacts, SalesOpportunity, Quotation, MasterOrder, SubOrder, SalesDetails },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.clientManageDetail,
+ activeName: "first",
+ isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑
+ basicInfoList: [],
+ isContactExpand: true, // 棣栬鑱旂郴浜�
+ contactList: [],
+ isDynamicExpand: true, // 鍔ㄦ�佷俊鎭�
+ dynamicInfoList: [],
+ isBusinessExpand: true, // 宸ュ晢淇℃伅
+ businessInfoList: [],
+ isAddressExpand: true, // 鍦板潃淇℃伅
+ addressInfoList: [],
+ isRemarkExpand: true, // 澶囨敞淇℃伅
+ isAnnexExpand: true // 闄勪欢淇℃伅
+ }
+ },
+ created() {
+ this.setData()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: this.detailConfig.infomation.client_name,
+ rightStr: "瀹㈡埛缂栧彿",
+ rightValue: this.detailConfig.infomation.number
+ },
+ {
+ leftStr: "瀹㈡埛鐘舵��",
+ leftValue: this.detailConfig.infomation.contact_name,
+ rightStr: "閿�鍞礋璐d汉",
+ rightValue: this.detailConfig.infomation.contact_position
+ },
+ {
+ leftStr: "瀹㈡埛绫诲瀷",
+ leftValue: this.detailConfig.infomation.contact_phone,
+ rightStr: "瀹㈡埛鏉ユ簮",
+ rightValue: "鏂板缓"
+ },
+ {
+ leftStr: "閲嶈绾у埆",
+ leftValue: this.detailConfig.infomation.sales_sources_id,
+ rightStr: "鍏捣鐘舵��",
+ rightValue: this.detailConfig.infomation.member_id
+ },
+ {
+ leftStr: "鎵�灞炲叕娴�",
+ leftValue: "",
+ rightStr: "鏈嶅姟浠h〃",
+ rightValue: ""
+ },
+ {
+ leftStr: "绛惧埌",
+ leftValue: "",
+ rightStr: "涓嬫鍥炶鏃ユ湡",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓鏃堕棿",
+ leftValue: "",
+ rightStr: "鏈�鏅氭湇鍔″埌鏈熸棩",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓浜�",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ this.contactList = [
+ {
+ leftStr: "鑱旂郴浜哄鍚�",
+ leftValue: "",
+ rightStr: "鑱旂郴浜烘墜鏈�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鑱旂郴浜鸿亴鍔�",
+ leftValue: "",
+ rightStr: "鑱旂郴浜哄井淇�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鑱旂郴浜篍mail",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ this.dynamicInfoList = [
+ {
+ leftStr: "鏈�鏂拌仈绯绘棩鏈�",
+ leftValue: "",
+ rightStr: "鏈仈绯诲ぉ鏁�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈�鏂版帹杩涙椂闂�",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ this.businessInfoList = [
+ {
+ leftStr: "鎵�灞炶涓�",
+ leftValue: "",
+ rightStr: "娉曞畾浠h〃浜�",
+ rightValue: ""
+ },
+ {
+ leftStr: "娉ㄥ唽鏃堕棿",
+ leftValue: "",
+ rightStr: "娉ㄥ唽璧勯噾",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍏徃鎬ц川",
+ leftValue: "",
+ rightStr: "瀹㈡埛瑙勬ā",
+ rightValue: ""
+ },
+ {
+ leftStr: "缁忚惀鑼冨洿",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ this.addressInfoList = [
+ {
+ leftStr: "鍥藉",
+ leftValue: "",
+ rightStr: "鐪佷唤",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍩庡競",
+ leftValue: "",
+ rightStr: "鍖哄煙",
+ rightValue: ""
+ },
+ {
+ leftStr: "璇︾粏鍦板潃",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ },
+ handleClose() {
+ this.detailConfig.visible = false
+ },
+ // tab鍒囨崲
+ tabsClick(tab, event) {
+ console.log(tab, event)
+ },
+ // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢
+ expandClick(value) {
+ console.log(value)
+ if (value === "basic") {
+ this.isBasicExpand = !this.isBasicExpand
+ } else if (value === "contact") {
+ this.isContactExpand = !this.isContactExpand
+ } else if (value === "business") {
+ this.isBusinessExpand = !this.isBusinessExpand
+ } else if (value === "dynamic") {
+ this.isDynamicExpand = !this.isDynamicExpand
+ } else if (value === "address") {
+ this.isAddressExpand = !this.isAddressExpand
+ } else if (value === "remark") {
+ this.isRemarkExpand = !this.isRemarkExpand
+ } else if (value === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ }
+ }
+ }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style lang="scss" scoped>
+::v-deep {
+ .el-drawer__header {
+ padding: 0;
+ margin-bottom: 0px;
+ .header {
+ height: 56px;
+ display: flex;
+ align-items: center;
+ padding-left: 10px;
+ .header-label {
+ padding: 5px;
+ border-radius: 4px;
+ background-color: #ff6600;
+ color: #fff;
+ font-size: 12px;
+ }
+ .header-title {
+ color: #323232;
+ font-size: 15px;
+ margin-left: 10px;
+ font-weight: inherit;
+ }
+ }
+ }
+ .el-tabs--top .el-tabs__item.is-top:nth-child(2) {
+ padding-left: 20px;
+ }
+ .el-tabs__item.is-active {
+ color: $color-primary;
+ }
+ .el-tabs__item:hover {
+ color: $color-primary;
+ }
+ .el-tabs__active-bar {
+ background-color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .tab-view {
+ background: #fff;
+ // .tab-view-pane {
+ // position: relative;
+ .item {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ }
+ // }
+ }
+ .detail {
+ .basic-info {
+ .basic-info-label {
+ padding-left: 10px;
+ height: 42px;
+ line-height: 42px;
+ background: #f4f8fe;
+ color: #333;
+ font-size: 14px;
+ }
+ .basic-info-content {
+ background: #fff;
+ ul {
+ padding-inline-start: 0;
+ }
+ li {
+ display: flex;
+ font-size: 14px;
+ font-family: PingFangSC;
+ border-bottom: 1px solid #f9f9fb;
+ .left,
+ .right {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 220px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .remark {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/client/client/index.vue b/src/views/client/client/index.vue
index 6b3fe15..c6688f2 100644
--- a/src/views/client/client/index.vue
+++ b/src/views/client/client/index.vue
@@ -18,18 +18,30 @@
</div>
</div>
</div>
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView
- :duplicate-check="true"
- :list-button="true"
- :map-button="true"
- :statistics="true"
- :operates-list="operatesList"
+ <div class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
/>
- <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <div class="btn-pager">
+ <PublicFunctionBtnView
+ :duplicate-check="true"
+ :list-button="true"
+ :map-button="true"
+ :statistics="true"
+ :operates-list="operatesList"
+ />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
- <TableCommonView ref="tableListRef" v-loading="loading" :table-list="tableList">
+ <TableCommonView
+ ref="tableListRef"
+ v-loading="loading"
+ :table-list="tableList"
+ @selClientClick="selClientClick"
+ @selContactsClick="selContactsClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="180">
<template slot-scope="scope">
@@ -43,11 +55,15 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫瀹㈡埛绠$悊 -->
<AddClientManageDialog v-if="editConfig.visible" :edit-client-manage-config="editConfig" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
+ <!-- 鑱旂郴浜鸿鎯� -->
+ <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" />
</div>
</template>
<script>
-import AddClientManageDialog from "@/views/client/client/AddClientManageDialog.vue"
+import AddClientManageDialog from "@/views/client/client/AddClientManageDialog"
import { getClientList, getDeleteClient } from "@/api/client/client"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
@@ -56,7 +72,9 @@
props: {},
mixins: [pageMixin],
components: {
- AddClientManageDialog
+ AddClientManageDialog,
+ DetailContacts: () => import("@/views/client/contacts/DetailContacts"),
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {
searchCommonHeight() {
@@ -93,6 +111,14 @@
visible: false,
title: "鏂板缓",
infomation: {}
+ },
+ contactsDeail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -105,13 +131,13 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "瀹㈡埛鍚嶇О", prop: "name", min: 100 }, // 瀹㈡埛鍚嶇О
+ { label: "瀹㈡埛鍚嶇О", prop: "name", min: 100, isClientClick: true }, // 瀹㈡埛鍚嶇О
{ label: "閿�鍞礋璐d汉", prop: "member_id" }, // 閿�鍞礋璐d汉
{ label: "閲嶈绾у埆", prop: "client_level_id" }, // 閲嶈绾у埆
{ label: "涓嬫鍥炶鏃ユ湡", prop: "next_visit_time", isTime: true, min: 90 }, // 涓嬫鍥炶鏃ユ湡
{ label: "璇︾粏鍦板潃", prop: "detail_address", min: 200 }, // 璇︾粏鍦板潃
{ label: "瀹㈡埛鐘舵��", prop: "client_status_id" }, // 瀹㈡埛鐘舵��
- { label: "鑱旂郴浜哄鍚�", prop: "contact_name" }, // 鑱旂郴浜哄鍚�
+ { label: "鑱旂郴浜哄鍚�", prop: "contact_name", isContactClick: true }, // 鑱旂郴浜哄鍚�
{ label: "鎵嬫満鍙风爜", prop: "contact_phone" } // 鎵嬫満鍙风爜
]
}
@@ -217,6 +243,18 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 瀹㈡埛鍚嶇О璇︽儏
+ selClientClick(row) {
+ console.log(row)
+ this.clientDeail.visible = true
+ this.clientDeail.infomation = { ...row, client_name: row.name }
+ },
+ // 鑱旂郴浜鸿鎯�
+ selContactsClick(row) {
+ console.log(row)
+ this.contactsDeail.visible = true
+ this.contactsDeail.infomation = { ...row }
}
}
}
@@ -245,10 +283,13 @@
}
}
}
- .btn-pager {
- display: flex;
- .page {
- margin-left: auto;
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
}
}
}
diff --git a/src/views/client/contacts/DetailContacts.vue b/src/views/client/contacts/DetailContacts.vue
new file mode 100644
index 0000000..97e078c
--- /dev/null
+++ b/src/views/client/contacts/DetailContacts.vue
@@ -0,0 +1,363 @@
+<template>
+ <div class="detail-view">
+ <el-drawer
+ :visible.sync="detailConfig.visible"
+ size="80%"
+ :before-close="handleClose"
+ :wrapperClosable="false"
+ :append-to-body="true"
+ >
+ <template slot="title">
+ <div class="header">
+ <span class="header-label">鑱旂郴浜哄鍚�</span>
+ <span class="header-title">{{ detailConfig.infomation.contact_name }}</span>
+ </div>
+ </template>
+ <div class="content">
+ <div class="tab-view">
+ <el-tabs v-model="activeName" @tab-click="tabsClick">
+ <el-tab-pane label="璇︽儏" name="first"></el-tab-pane>
+ <el-tab-pane label="璺熻繘璁板綍" name="second">
+ <!-- <template slot="label">
+ <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
+ </template> -->
+ </el-tab-pane>
+ <el-tab-pane label="閿�鍞槑缁嗗崟" name="detail"></el-tab-pane>
+ <el-tab-pane label="鏈嶅姟鍚堝悓" name="serviceContract"></el-tab-pane>
+ </el-tabs>
+ </div>
+ <div v-if="activeName === 'first'" class="detail">
+ <!-- 鍩烘湰淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('basic')">
+ <i v-if="isBasicExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鍩烘湰淇℃伅</span>
+ </div>
+ <div v-show="isBasicExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in basicInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 鍦板潃淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('address')">
+ <i v-if="isAddressExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鍦板潃淇℃伅</span>
+ </div>
+ <div v-show="isAddressExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in addressInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 澶囨敞淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('remark')">
+ <i v-if="isRemarkExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">澶囨敞淇℃伅</span>
+ </div>
+ <div v-show="isRemarkExpand" class="basic-info-content">
+ <ul>
+ <li>
+ <div class="left remark">
+ <div class="content-title">{{ "澶囨敞锛�" }}</div>
+ <div class="content-data">{{ "澶囨敞鍐呭" }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 闄勪欢淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('annex')">
+ <i v-if="isAnnexExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">闄勪欢淇℃伅</span>
+ </div>
+ <div v-show="isAnnexExpand" class="basic-info-content">
+ <ul>
+ <li>
+ <div class="left remark">
+ <div class="content-title">{{ "闄勪欢锛�" }}</div>
+ <div class="content-data">{{ "" }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div v-if="activeName === 'second'" class="second">
+ <FollowupRecords :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'detail'" class="second">
+ <SalesDetails :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'serviceContract'" class="second">
+ <ServiceContract :isDetail="true" />
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import FollowupRecords from "@/views/client/followupRecords"
+import SalesDetails from "@/views/sales/salesDetails"
+import ServiceContract from "@/views/service/serviceContract"
+export default {
+ name: "DetailContacts",
+ props: {
+ contactsDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { FollowupRecords, ServiceContract, SalesDetails },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.contactsDetail,
+ activeName: "first",
+ isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑
+ basicInfoList: [],
+ isAddressExpand: true, // 鍦板潃淇℃伅
+ addressInfoList: [],
+ isRemarkExpand: true, // 澶囨敞淇℃伅
+ isAnnexExpand: true // 闄勪欢淇℃伅
+ }
+ },
+ created() {
+ this.setData()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "鑱旂郴浜哄鍚�",
+ leftValue: "",
+ rightStr: "鑱旂郴浜虹紪鍙�",
+ rightValue: ""
+ },
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "鎵嬫満",
+ rightValue: ""
+ },
+ {
+ leftStr: "鑱屽姟",
+ leftValue: "",
+ rightStr: "閿�鍞礋璐d汉",
+ rightValue: ""
+ },
+ {
+ leftStr: "棣栬鑱旂郴浜�",
+ leftValue: "",
+ rightStr: "寰俊鍙�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鐢熸棩",
+ leftValue: "",
+ rightStr: "鑱旂郴浜篍mail",
+ rightValue: ""
+ },
+ {
+ leftStr: "绛惧埌",
+ leftValue: "",
+ rightStr: "涓嬫鍥炶鏃ユ湡",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈�鏂拌仈绯绘棩鏈�",
+ leftValue: "",
+ rightStr: "鏈仈绯诲ぉ鏁�",
+ rightValue: ""
+ }
+ ]
+ this.addressInfoList = [
+ {
+ leftStr: "鍥藉",
+ leftValue: "",
+ rightStr: "鐪佷唤",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍩庡競",
+ leftValue: "",
+ rightStr: "鍖哄煙",
+ rightValue: ""
+ },
+ {
+ leftStr: "閭紪",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ },
+ handleClose() {
+ this.detailConfig.visible = false
+ },
+ // tab鍒囨崲
+ tabsClick(tab, event) {
+ console.log(tab, event)
+ },
+ // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢
+ expandClick(value) {
+ console.log(value)
+ if (value === "basic") {
+ this.isBasicExpand = !this.isBasicExpand
+ } else if (value === "remark") {
+ this.isRemarkExpand = !this.isRemarkExpand
+ } else if (value === "address") {
+ this.isAddressExpand = !this.isAddressExpand
+ } else if (value === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ }
+ }
+ }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style lang="scss" scoped>
+::v-deep {
+ .el-drawer__header {
+ padding: 0;
+ margin-bottom: 0px;
+ .header {
+ height: 56px;
+ display: flex;
+ align-items: center;
+ padding-left: 10px;
+ .header-label {
+ padding: 5px;
+ border-radius: 4px;
+ background-color: #ff6600;
+ color: #fff;
+ font-size: 12px;
+ }
+ .header-title {
+ color: #323232;
+ font-size: 15px;
+ margin-left: 10px;
+ font-weight: inherit;
+ }
+ }
+ }
+ .el-tabs--top .el-tabs__item.is-top:nth-child(2) {
+ padding-left: 20px;
+ }
+ .el-tabs__item.is-active {
+ color: $color-primary;
+ }
+ .el-tabs__item:hover {
+ color: $color-primary;
+ }
+ .el-tabs__active-bar {
+ background-color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .tab-view {
+ background: #fff;
+ // .tab-view-pane {
+ // position: relative;
+ .item {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ }
+ // }
+ }
+ .detail {
+ .basic-info {
+ .basic-info-label {
+ padding-left: 10px;
+ height: 42px;
+ line-height: 42px;
+ background: #f4f8fe;
+ color: #333;
+ font-size: 14px;
+ }
+ .basic-info-content {
+ background: #fff;
+ ul {
+ padding-inline-start: 0;
+ }
+ li {
+ display: flex;
+ font-size: 14px;
+ font-family: PingFangSC;
+ border-bottom: 1px solid #f9f9fb;
+ .left,
+ .right {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 220px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .remark {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/client/contacts/index.vue b/src/views/client/contacts/index.vue
index 6d2325e..ec669d5 100644
--- a/src/views/client/contacts/index.vue
+++ b/src/views/client/contacts/index.vue
@@ -1,11 +1,27 @@
<template>
<div class="contacts-view">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :operates-list="operatesList" />
+ <div v-if="isDetail" class="detail-top">
+ <DetailListCommonBtn :query-class-options="queryClassOptions" />
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
- <TableCommonView ref="tableListRef" v-loading="loading" :table-list="tableList">
+ <div v-else class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :operates-list="operatesList" :allocation="false" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
+ </div>
+ <TableCommonView
+ ref="tableListRef"
+ v-loading="loading"
+ :table-list="tableList"
+ @selContactsClick="selContactsClick"
+ @selClientClick="selClientClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="120" fixed="right">
<template slot-scope="scope">
@@ -18,6 +34,10 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫鑱旂郴浜� -->
<AddContactsDialog v-if="editConfig.visible" :edit-contacts-config="editConfig" />
+ <!-- 鑱旂郴浜鸿鎯� -->
+ <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
</div>
</template>
@@ -27,10 +47,17 @@
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
export default {
name: "ContactsView",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
- AddContactsDialog
+ AddContactsDialog,
+ DetailContacts: () => import("@/views/client/contacts/DetailContacts"),
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {},
data() {
@@ -59,6 +86,14 @@
visible: false,
title: "鏂板缓",
infomation: {}
+ },
+ contactsDeail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -71,8 +106,8 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "鑱旂郴浜哄鍚�", prop: "name", min: 100 }, // 鑱旂郴浜哄鍚�
- { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 190 }, // 瀹㈡埛鍚嶇О
+ { label: "鑱旂郴浜哄鍚�", prop: "name", min: 100, isContactClick: true }, // 鑱旂郴浜哄鍚�
+ { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 190, isClientClick: true }, // 瀹㈡埛鍚嶇О
{ label: "鑱旂郴浜虹紪鍙�", prop: "number", min: 100 }, // 鑱旂郴浜虹紪鍙�
{ label: "鑱屽姟", prop: "position", min: 120 }, // 鑱屽姟
{ label: "鎵嬫満", prop: "phone", min: 100 }, // 鎵嬫満鍙风爜
@@ -156,6 +191,18 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 鑱旂郴浜鸿鎯�
+ selContactsClick(row) {
+ console.log(row)
+ this.contactsDeail.visible = true
+ this.contactsDeail.infomation = { ...row, contact_name: row.name }
+ },
+ // 瀹㈡埛鍚嶇О璇︽儏
+ selClientClick(row) {
+ console.log(row)
+ this.clientDeail.visible = true
+ this.clientDeail.infomation = { ...row, client_name: row.Client.name }
}
}
}
@@ -164,7 +211,16 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.contacts-view {
- .btn-pager {
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
+ }
+ .detail-top {
display: flex;
.page {
margin-left: auto;
diff --git a/src/views/client/followupRecords/AddFollowupRecordsDialog.vue b/src/views/client/followupRecords/AddFollowupRecordsDialog.vue
index 007f860..457eb0b 100644
--- a/src/views/client/followupRecords/AddFollowupRecordsDialog.vue
+++ b/src/views/client/followupRecords/AddFollowupRecordsDialog.vue
@@ -5,6 +5,8 @@
:visible.sync="editConfig.visible"
:width="dialogWidth"
:before-close="handleClose"
+ append-to-body
+ custom-class="iframe-dialog"
>
<el-form
ref="form"
@@ -553,54 +555,56 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
-.add-followup-records {
- .basic-info {
- .basic-info-title {
- background-color: #f4f8fe;
- padding-left: 10px;
- font-size: 15px;
- font-weight: bold;
- color: #666;
- height: 42px;
- line-height: 42px;
- }
- .basic-info-view {
- margin-top: 10px;
- padding-right: 40px;
- .custom-name,
- .common-select {
+::v-deep {
+ .iframe-dialog .el-dialog__body {
+ .basic-info {
+ .basic-info-title {
+ background-color: #f4f8fe;
+ padding-left: 10px;
+ font-size: 15px;
+ font-weight: bold;
+ color: #666;
+ height: 42px;
+ line-height: 42px;
+ }
+ .basic-info-view {
+ margin-top: 10px;
+ padding-right: 40px;
+ .custom-name,
+ .common-select {
+ display: flex;
+ .common-select-btn {
+ margin-left: 5px;
+ font-size: 18px;
+ cursor: pointer;
+ }
+ }
+ .common-select {
+ .common-select-sel {
+ width: 270px;
+ }
+ }
+ }
+ .annex-view {
display: flex;
- .common-select-btn {
- margin-left: 5px;
- font-size: 18px;
- cursor: pointer;
- }
- }
- .common-select {
- .common-select-sel {
- width: 270px;
+ color: #6166d3;
+ .setFormat {
+ margin-left: 10px;
}
}
}
- .annex-view {
+ .unflod-collapse {
display: flex;
+ height: 30px;
+ justify-content: center;
+ align-items: center;
color: #6166d3;
- .setFormat {
- margin-left: 10px;
- }
}
- }
- .unflod-collapse {
- display: flex;
- height: 30px;
- justify-content: center;
- align-items: center;
- color: #6166d3;
- }
- .dialog-footer {
- background-color: #f5f5f5;
- height: 55px;
- line-height: 55px;
+ .dialog-footer {
+ background-color: #f5f5f5;
+ height: 55px;
+ line-height: 55px;
+ }
}
}
</style>
diff --git a/src/views/client/followupRecords/index.vue b/src/views/client/followupRecords/index.vue
index 63e2a72..24a3a97 100644
--- a/src/views/client/followupRecords/index.vue
+++ b/src/views/client/followupRecords/index.vue
@@ -1,11 +1,28 @@
<template>
<div class="followup-records">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :statistics="true" :operates-list="operatesList" />
+ <div v-if="isDetail" class="detail-top">
+ <DetailListCommonBtn :query-class-options="queryClassOptions" />
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
- <TableCommonView ref="tableListRef" v-loading="loading" :table-list="tableList">
+ <div v-else class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :statistics="true" :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
+ </div>
+ <TableCommonView
+ ref="tableListRef"
+ v-loading="loading"
+ :table-list="tableList"
+ :select-box="!isDetail"
+ @selContactsClick="selContactsClick"
+ @selClientClick="selClientClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="120" fixed="right">
<template slot-scope="scope">
@@ -17,6 +34,10 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫璺熻繘璁板綍 -->
<AddFollowupRecordsDialog v-if="editConfig.visible" :edit-contacts-config="editConfig" />
+ <!-- 鑱旂郴浜鸿鎯� -->
+ <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
</div>
</template>
@@ -27,10 +48,17 @@
export default {
name: "FollowupRecords",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
- AddFollowupRecordsDialog
+ AddFollowupRecordsDialog,
+ DetailContacts: () => import("@/views/client/contacts/DetailContacts"),
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {
searchCommonHeight() {
@@ -42,6 +70,7 @@
tableList: {},
loading: false,
activeName: "second",
+ queryClassValue: "1",
queryClassOptions: [
{ value: "1", label: "鍏ㄩ儴" },
{ value: "2", label: "浠婃棩鑱旂郴" },
@@ -64,7 +93,15 @@
title: "鏂板缓",
infomation: {}
},
- saleChanceName: ""
+ saleChanceName: "",
+ contactsDeail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
+ }
}
},
created() {
@@ -77,8 +114,8 @@
tableInfomation: [],
tableColumn: [
{ label: "涓婚", prop: "topic", min: 120 }, // 涓婚
- { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 190 }, // 瀹㈡埛鍚嶇О
- { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 100 }, // 鑱旂郴浜哄鍚�
+ { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 190, isClientClick: true }, // 瀹㈡埛鍚嶇О
+ { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 100, isContactClick: true }, // 鑱旂郴浜哄鍚�
{ label: "瀹㈡埛鐘舵��", prop: "client_status_id", min: 100 }, // 瀹㈡埛鐘舵��
{ label: "鑱旂郴鏂瑰紡", prop: "phone", min: 100 }, // 鑱旂郴鏂瑰紡
{ label: "鑱旂郴浜烘棩鏈�", prop: "follow_time", isTime: true, min: 130 }, // 鑱旂郴浜烘棩鏈�
@@ -93,7 +130,6 @@
this.searchOptions.push({ value: (i + 1).toString(), label: label })
}
},
- // 璇锋眰鏁版嵁
// 璇锋眰鏁版嵁
async getData() {
this.loading = true
@@ -166,6 +202,18 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 鑱旂郴浜鸿鎯�
+ selContactsClick(row) {
+ console.log(row)
+ this.contactsDeail.visible = true
+ this.contactsDeail.infomation = { ...row }
+ },
+ // 瀹㈡埛鍚嶇О璇︽儏
+ selClientClick(row) {
+ console.log(row)
+ this.clientDeail.visible = true
+ this.clientDeail.infomation = { ...row }
}
}
}
@@ -174,7 +222,16 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.followup-records {
- .btn-pager {
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
+ }
+ .detail-top {
display: flex;
.page {
margin-left: auto;
diff --git a/src/views/client/salesLead/DetailSalesLead.vue b/src/views/client/salesLead/DetailSalesLead.vue
new file mode 100644
index 0000000..b5b4d88
--- /dev/null
+++ b/src/views/client/salesLead/DetailSalesLead.vue
@@ -0,0 +1,365 @@
+<template>
+ <div class="detail-view">
+ <el-drawer :visible.sync="detailConfig.visible" size="80%" :before-close="handleClose" :wrapperClosable="false">
+ <template slot="title">
+ <div class="header">
+ <span class="header-label">瀹㈡埛鍚嶇О</span>
+ <span class="header-title">{{ detailConfig.infomation.name }}</span>
+ </div>
+ </template>
+ <div class="content">
+ <div class="tab-view">
+ <el-tabs v-model="activeName" @tab-click="tabsClick">
+ <el-tab-pane label="璇︽儏" name="first"></el-tab-pane>
+ <el-tab-pane label="璺熻繘璁板綍" name="second">
+ <!-- <template slot="label">
+ <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
+ </template> -->
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ <div v-if="activeName === 'first'" class="detail">
+ <!-- 鍩烘湰淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('basic')">
+ <i v-if="isBasicExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鍩烘湰淇℃伅</span>
+ </div>
+ <div v-show="isBasicExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in basicInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 鍔ㄦ�佷俊鎭� -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('dynamic')">
+ <i v-if="isDynamicExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鍔ㄦ�佷俊鎭�</span>
+ </div>
+ <div v-show="isDynamicExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in dynamicInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 鍦板潃淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('address')">
+ <i v-if="isAddressExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鍦板潃淇℃伅</span>
+ </div>
+ <div v-show="isAddressExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in addressInfoList" :key="i">
+ <div class="left">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ <div class="right">
+ <div class="content-title">{{ item.rightStr }}</div>
+ <div class="content-data">{{ item.rightValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- 澶囨敞淇℃伅 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('remark')">
+ <i v-if="isRemarkExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">澶囨敞淇℃伅</span>
+ </div>
+ <div v-show="isRemarkExpand" class="basic-info-content">
+ <ul>
+ <li>
+ <div class="left remark">
+ <div class="content-title">{{ "澶囨敞锛�" }}</div>
+ <div class="content-data">{{ "澶囨敞鍐呭" }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div v-if="activeName === 'second'" class="second">
+ <FollowupRecords :isDetail="true" />
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import FollowupRecords from "@/views/client/followupRecords"
+export default {
+ name: "DetailSalesLead",
+ props: {
+ salesLeadDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { FollowupRecords },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.salesLeadDetail,
+ activeName: "first",
+ isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑
+ basicInfoList: [],
+ isDynamicExpand: true, // 鍔ㄦ�佷俊鎭�
+ dynamicInfoList: [],
+ isAddressExpand: true, // 鍦板潃淇℃伅
+ addressInfoList: [],
+ isRemarkExpand: true, // 澶囨敞淇℃伅
+ remarkInfoList: []
+ }
+ },
+ created() {
+ this.setData()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: this.detailConfig.infomation.name,
+ rightStr: "閿�鍞嚎绱㈢紪鍙�",
+ rightValue: this.detailConfig.infomation.number
+ },
+ {
+ leftStr: "鑱旂郴浜哄鍚�",
+ leftValue: this.detailConfig.infomation.contact_name,
+ rightStr: "鑱旂郴浜鸿亴鍔�",
+ rightValue: this.detailConfig.infomation.contact_position
+ },
+ {
+ leftStr: "鎵嬫満鍙风爜",
+ leftValue: this.detailConfig.infomation.contact_phone,
+ rightStr: "鍟嗘満鐘舵��",
+ rightValue: "鏂板缓"
+ },
+ {
+ leftStr: "鍟嗘満鏉ユ簮",
+ leftValue: this.detailConfig.infomation.sales_sources_id,
+ rightStr: "璐熻矗浜�",
+ rightValue: this.detailConfig.infomation.member_id
+ },
+ {
+ leftStr: "鍒嗛厤鏃ユ湡",
+ leftValue: "",
+ rightStr: "鍏捣鐘舵��",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓鏃堕棿",
+ leftValue: "",
+ rightStr: "鍒涘缓浜�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍏抽棴鍘熷洜",
+ leftValue: "",
+ rightStr: "绛惧埌",
+ rightValue: ""
+ }
+ ]
+ this.dynamicInfoList = [
+ {
+ leftStr: "鏈仈绯诲ぉ鏁�",
+ leftValue: "",
+ rightStr: "鏈�鏂版帹杩涙椂闂�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈�鏂拌繘灞�",
+ leftValue: "",
+ rightStr: "鏈�鏂拌仈绯绘棩鏈�",
+ rightValue: ""
+ }
+ ]
+ this.addressInfoList = [
+ {
+ leftStr: "鍥藉",
+ leftValue: "",
+ rightStr: "鐪佷唤",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍩庡競",
+ leftValue: "",
+ rightStr: "鍖哄煙",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍦板潃",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ },
+ handleClose() {
+ this.detailConfig.visible = false
+ },
+ // tab鍒囨崲
+ tabsClick(tab, event) {
+ console.log(tab, event)
+ },
+ // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢
+ expandClick(value) {
+ console.log(value)
+ if (value === "basic") {
+ this.isBasicExpand = !this.isBasicExpand
+ } else if (value === "dynamic") {
+ this.isDynamicExpand = !this.isDynamicExpand
+ } else if (value === "address") {
+ this.isAddressExpand = !this.isAddressExpand
+ }
+ }
+ }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style lang="scss" scoped>
+.detail-view {
+ .header {
+ height: 56px;
+ display: flex;
+ align-items: center;
+ padding-left: 10px;
+ .header-label {
+ padding: 5px;
+ border-radius: 4px;
+ background-color: #ff6600;
+ color: #fff;
+ font-size: 12px;
+ }
+ .header-title {
+ color: #323232;
+ font-size: 15px;
+ margin-left: 10px;
+ font-weight: inherit;
+ }
+ }
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .tab-view {
+ background: #fff;
+ // .tab-view-pane {
+ // position: relative;
+ .item {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ }
+ // }
+ }
+ .detail {
+ .basic-info {
+ .basic-info-label {
+ padding-left: 10px;
+ height: 42px;
+ line-height: 42px;
+ background: #f4f8fe;
+ color: #333;
+ font-size: 14px;
+ }
+ .basic-info-content {
+ background: #fff;
+ ul {
+ padding-inline-start: 0;
+ }
+ li {
+ display: flex;
+ font-size: 14px;
+ font-family: PingFangSC;
+ border-bottom: 1px solid #f9f9fb;
+ .left,
+ .right {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 220px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .remark {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+}
+::v-deep {
+ .el-drawer__header {
+ padding: 0;
+ margin-bottom: 0px;
+ }
+ .el-tabs--top .el-tabs__item.is-top:nth-child(2) {
+ padding-left: 20px;
+ }
+ .el-tabs__item.is-active {
+ color: $color-primary;
+ }
+ .el-tabs__item:hover {
+ color: $color-primary;
+ }
+ .el-tabs__active-bar {
+ background-color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+}
+</style>
diff --git a/src/views/client/salesLead/index.vue b/src/views/client/salesLead/index.vue
index 0602878..565eae5 100644
--- a/src/views/client/salesLead/index.vue
+++ b/src/views/client/salesLead/index.vue
@@ -1,11 +1,17 @@
<template>
<div class="sales-lead">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :operates-list="operatesList" />
- <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <div class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
- <TableCommonView ref="tableListRef" :table-list="tableList">
+ <TableCommonView ref="tableListRef" :table-list="tableList" @selSalesLeadClick="selSalesLeadClick">
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="160">
<template slot-scope="scope">
@@ -21,6 +27,8 @@
<AddSalesLeadDialog v-if="editSalesLeadConfig.visible" :edit-sales-lead-config="editSalesLeadConfig" />
<!-- 瀵煎叆鏂囦欢 -->
<ImportFileDialog v-if="importConfig.visible" :import-file-config="importConfig" />
+ <!-- 璇︽儏 -->
+ <DetailSalesLead v-if="salesLeadDeail.visible" :sales-lead-detail="salesLeadDeail" />
</div>
</template>
@@ -29,13 +37,15 @@
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
import ImportFileDialog from "@/views/other/commonDialog/ImportFileDialog"
import { getSalesLeadsList, getDeleteSalesLeads } from "@/api/client/salesLead"
+import DetailSalesLead from "@/views/client/salesLead/DetailSalesLead"
export default {
name: "SalesLead",
props: {},
components: {
AddSalesLeadDialog,
- ImportFileDialog
+ ImportFileDialog,
+ DetailSalesLead
},
mixins: [pageMixin],
computed: {},
@@ -68,6 +78,10 @@
visible: false,
title: "鏂板缓",
infomation: {}
+ },
+ salesLeadDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -80,7 +94,7 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "瀹㈡埛鍚嶇О", prop: "name", min: 190 }, // 瀹㈡埛鍚嶇О
+ { label: "瀹㈡埛鍚嶇О", prop: "name", min: 190, isSalesLeadClick: true }, // 瀹㈡埛鍚嶇О
{ label: "閿�鍞嚎绱㈢紪鍙�", prop: "number", min: 130 }, // 閿�鍞嚎绱㈢紪鍙�
{ label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 130 }, // 鑱旂郴浜哄鍚�
{ label: "鎵嬫満鍙风爜", prop: "contact_phone", min: 130 }, // 鎵嬫満鍙风爜
@@ -158,6 +172,12 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 璇︽儏
+ selSalesLeadClick(row) {
+ console.log(row)
+ this.salesLeadDeail.visible = true
+ this.salesLeadDeail.infomation = { ...row }
}
}
}
@@ -166,10 +186,13 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.sales-lead {
- .btn-pager {
- display: flex;
- .page {
- margin-left: auto;
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
}
}
}
diff --git a/src/views/sales/contractManage/index.vue b/src/views/sales/contractManage/index.vue
index cf408b5..ff11738 100644
--- a/src/views/sales/contractManage/index.vue
+++ b/src/views/sales/contractManage/index.vue
@@ -1,19 +1,21 @@
<template>
<div class="contract-manage">
- <SearchCommonView
- ref="searchCommonView"
- :label-search="true"
- :query-class-options="queryClassOptions"
- :search-options="searchOptions"
- />
- <div class="btn-pager">
- <PublicFunctionBtnView
- :receive="false"
- :submit-approval="true"
- ::statistics="true"
- :operates-list="operatesList"
+ <div class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :label-search="true"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
/>
- <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <div class="btn-pager">
+ <PublicFunctionBtnView
+ :receive="false"
+ :submit-approval="true"
+ ::statistics="true"
+ :operates-list="operatesList"
+ />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
<TableCommonView ref="tableListRef" :table-list="tableList">
<template slot="tableButton">
@@ -174,10 +176,13 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.contract-manage {
- .btn-pager {
- display: flex;
- .page {
- margin-left: auto;
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
}
}
}
diff --git a/src/views/sales/generatePlan/index.vue b/src/views/sales/generatePlan/index.vue
index 7357f52..abf5576 100644
--- a/src/views/sales/generatePlan/index.vue
+++ b/src/views/sales/generatePlan/index.vue
@@ -1,9 +1,15 @@
<template>
<div class="generate-plan">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :operates-list="operatesList" />
- <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <div class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
<TableCommonView ref="tableListRef" :table-list="tableList">
<template slot="tableButton">
@@ -164,10 +170,13 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.generate-plan {
- .btn-pager {
- display: flex;
- .page {
- margin-left: auto;
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
}
}
}
diff --git a/src/views/sales/masterOrder/index.vue b/src/views/sales/masterOrder/index.vue
index 510d1bb..7c748bf 100644
--- a/src/views/sales/masterOrder/index.vue
+++ b/src/views/sales/masterOrder/index.vue
@@ -1,11 +1,21 @@
<template>
<div class="master-order">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :operates-list="operatesList" />
+ <div v-if="isDetail" class="detail-top">
+ <DetailListCommonBtn :query-class-options="queryClassOptions" />
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
- <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList">
+ <div v-else class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
+ </div>
+ <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail">
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -27,7 +37,12 @@
export default {
name: "MasterOrder",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
AddMasterOrderDialog
@@ -168,7 +183,16 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.master-order {
- .btn-pager {
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
+ }
+ .detail-top {
display: flex;
.page {
margin-left: auto;
diff --git a/src/views/sales/quotation/index.vue b/src/views/sales/quotation/index.vue
index f583aa4..3a4d5a4 100644
--- a/src/views/sales/quotation/index.vue
+++ b/src/views/sales/quotation/index.vue
@@ -1,16 +1,22 @@
<template>
<div class="quotation">
- <SearchCommonView
- ref="searchCommonView"
- :label-search="true"
- :query-class-options="queryClassOptions"
- :search-options="searchOptions"
- />
- <div class="btn-pager">
- <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" />
+ <div v-if="isDetail" class="detail-top">
+ <DetailListCommonBtn :query-class-options="queryClassOptions" />
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
- <TableCommonView ref="tableListRef" :table-list="tableList">
+ <div v-else class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :label-search="true"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
+ </div>
+ <TableCommonView ref="tableListRef" :table-list="tableList" :select-box="!isDetail">
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -32,7 +38,12 @@
export default {
name: "QuotationView",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
AddQuotationDialog
@@ -174,7 +185,16 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.quotation {
- .btn-pager {
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
+ }
+ .detail-top {
display: flex;
.page {
margin-left: auto;
diff --git a/src/views/sales/refundForm/index.vue b/src/views/sales/refundForm/index.vue
index bff2637..01da30f 100644
--- a/src/views/sales/refundForm/index.vue
+++ b/src/views/sales/refundForm/index.vue
@@ -1,9 +1,15 @@
<template>
<div class="refund-form">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :receive="false" :submit-approval="true" :operates-list="operatesList" />
- <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <div class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :receive="false" :submit-approval="true" :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
<TableCommonView ref="tableListRef" :table-list="tableList">
<template slot="tableButton">
@@ -166,10 +172,13 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.refund-form {
- .btn-pager {
- display: flex;
- .page {
- margin-left: auto;
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
}
}
}
diff --git a/src/views/sales/salesDetails/index.vue b/src/views/sales/salesDetails/index.vue
index 5cb8aab..52c6d40 100644
--- a/src/views/sales/salesDetails/index.vue
+++ b/src/views/sales/salesDetails/index.vue
@@ -1,11 +1,21 @@
<template>
<div class="sales-details">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" />
+ <div v-if="isDetail" class="detail-top">
+ <DetailListCommonBtn :query-class-options="queryClassOptions" />
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
- <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList">
+ <div v-else class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
+ </div>
+ <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail">
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -27,7 +37,12 @@
export default {
name: "SalesDetails",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
AddSalesDetailsDialog
@@ -188,7 +203,16 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.sales-details {
- .btn-pager {
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
+ }
+ .detail-top {
display: flex;
.page {
margin-left: auto;
diff --git a/src/views/sales/salesOpportunity/index.vue b/src/views/sales/salesOpportunity/index.vue
index e3bb315..7885fd1 100644
--- a/src/views/sales/salesOpportunity/index.vue
+++ b/src/views/sales/salesOpportunity/index.vue
@@ -1,14 +1,24 @@
<template>
<div class="sales-opportunity">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView
- :duplicate-check="true"
- :statistics="true"
- :custom-funnel="true"
- :operates-list="operatesList"
- />
+ <div v-if="isDetail" class="detail-top">
+ <DetailListCommonBtn :query-class-options="queryClassOptions" />
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
+ <div v-else class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView
+ :duplicate-check="true"
+ :statistics="true"
+ :custom-funnel="true"
+ :operates-list="operatesList"
+ />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
<TableCommonView ref="tableListRef" :table-list="tableList">
<template slot="tableButton">
@@ -33,7 +43,12 @@
export default {
name: "SalesOpportunity",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
AddSalesOpportunityDialog
@@ -184,7 +199,16 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.sales-opportunity {
- .btn-pager {
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
+ }
+ .detail-top {
display: flex;
.page {
margin-left: auto;
diff --git a/src/views/sales/salesReturn/index.vue b/src/views/sales/salesReturn/index.vue
index 09c24fa..87060d6 100644
--- a/src/views/sales/salesReturn/index.vue
+++ b/src/views/sales/salesReturn/index.vue
@@ -1,9 +1,15 @@
<template>
<div class="sales-return">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :receive="false" :import-button="false" receive:operates-list="operatesList" />
- <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <div class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :receive="false" :import-button="false" receive:operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
<TableCommonView ref="tableListRef" :table-list="tableList">
<template slot="tableButton">
@@ -167,10 +173,13 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.sales-return {
- .btn-pager {
- display: flex;
- .page {
- margin-left: auto;
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
}
}
}
diff --git a/src/views/sales/subOrder/index.vue b/src/views/sales/subOrder/index.vue
index 886cb82..54c3e39 100644
--- a/src/views/sales/subOrder/index.vue
+++ b/src/views/sales/subOrder/index.vue
@@ -1,11 +1,21 @@
<template>
<div class="sub-order">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :operates-list="operatesList" />
+ <div v-if="isDetail" class="detail-top">
+ <DetailListCommonBtn :query-class-options="queryClassOptions" />
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
- <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList">
+ <div v-else class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
+ </div>
+ <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail">
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -27,7 +37,12 @@
export default {
name: "SubOrder",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
AddSubOrderDialog
@@ -172,7 +187,16 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.sub-order {
- .btn-pager {
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
+ }
+ .detail-top {
display: flex;
.page {
margin-left: auto;
diff --git a/src/views/service/orderManage/AddOrderManageDialog.vue b/src/views/service/orderManage/AddOrderManageDialog.vue
index 27c15f6..685e1d5 100644
--- a/src/views/service/orderManage/AddOrderManageDialog.vue
+++ b/src/views/service/orderManage/AddOrderManageDialog.vue
@@ -1,7 +1,7 @@
<template>
<div class="order-manage">
<el-dialog
- :title="editCommonConfig.title + '宸ュ崟绠$悊'"
+ :title="editCommonConfig.title + '瀹㈡埛鏈嶅姟鍗�'"
:visible.sync="editConfig.visible"
:width="dialogWidth"
:before-close="handleClose"
@@ -40,17 +40,30 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="宸ュ崟缂栧彿" prop="number">
+ <el-form-item label="鏈嶅姟鍗曠紪鍙�" prop="number">
<el-input v-model="editConfig.infomation.number"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="宸ュ崟鍚嶇О" prop="name">
- <el-input v-model="editConfig.infomation.name"></el-input>
+ <el-form-item label="鏈嶅姟鍚堝悓" prop="name">
+ <div class="custom-name">
+ <el-autocomplete
+ v-model="editConfig.infomation.client_name"
+ :fetch-suggestions="querySearchAsync"
+ value-key="name"
+ @select="handleSelectClient"
+ ></el-autocomplete>
+ <div class="common-select-btn" @click="selClientClick">
+ <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
+ </div>
+ <div class="common-select-btn" @click="clearupClient">
+ <i class="el-icon-edit-outline" title="娓呴櫎"></i>
+ </div>
+ </div>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="宸ュ崟绫诲瀷" prop="orderType">
+ <el-form-item label="鏁呴殰绫诲埆" prop="orderType">
<div class="common-select">
<el-select
v-model="editConfig.infomation.orderType"
@@ -66,16 +79,113 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鑱旂郴浜哄鍚�" prop="contactId">
+ <el-form-item label="涓婚" prop="contactId">
+ <el-input v-model="editConfig.infomation.contactId"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍚堝悓璁㈠崟" prop="name">
<div class="custom-name">
- <el-input v-model="editConfig.infomation.contactId"></el-input>
- <div class="common-select-btn"><i class="el-icon-circle-plus-outline" title="閫夋嫨"></i></div>
- <div class="common-select-btn"><i class="el-icon-edit" title="缂栬緫"></i></div>
+ <el-autocomplete
+ v-model="editConfig.infomation.client_name"
+ :fetch-suggestions="querySearchAsync"
+ value-key="name"
+ @select="handleSelectClient"
+ ></el-autocomplete>
+ <div class="common-select-btn" @click="selClientClick">
+ <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
+ </div>
+ <div class="common-select-btn" @click="clearupClient">
+ <i class="el-icon-edit-outline" title="娓呴櫎"></i>
+ </div>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鎶ヤ慨鏉ユ簮" prop="reportSourceId">
+ <el-form-item label="浜у搧绫诲埆" prop="orderType">
+ <div class="common-select">
+ <el-select
+ v-model="editConfig.infomation.orderType"
+ placeholder="璇烽�夋嫨"
+ class="common-select-sel"
+ size="mini"
+ >
+ <el-option v-for="item in orderTypeOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ <div class="common-select-btn"><i class="el-icon-setting"></i></div>
+ </div>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浜у搧鍚嶇О" prop="name">
+ <div class="custom-name">
+ <el-autocomplete
+ v-model="editConfig.infomation.client_name"
+ :fetch-suggestions="querySearchAsync"
+ value-key="name"
+ @select="handleSelectClient"
+ ></el-autocomplete>
+ <div class="common-select-btn" @click="selClientClick">
+ <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
+ </div>
+ <div class="common-select-btn" @click="clearupClient">
+ <i class="el-icon-edit-outline" title="娓呴櫎"></i>
+ </div>
+ </div>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈嶅姟鏂瑰紡" prop="orderType">
+ <div class="common-select">
+ <el-select
+ v-model="editConfig.infomation.orderType"
+ placeholder="璇烽�夋嫨"
+ class="common-select-sel"
+ size="mini"
+ >
+ <el-option v-for="item in orderTypeOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ <div class="common-select-btn"><i class="el-icon-setting"></i></div>
+ </div>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈嶅姟浜哄憳" prop="orderType">
+ <div class="common-select">
+ <el-select
+ v-model="editConfig.infomation.orderType"
+ placeholder="璇烽�夋嫨"
+ class="common-select-sel"
+ size="mini"
+ >
+ <el-option v-for="item in orderTypeOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </div>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑱旂郴浜哄鍚�" prop="client_name">
+ <div class="custom-name">
+ <el-autocomplete
+ v-model="editConfig.infomation.client_name"
+ :fetch-suggestions="querySearchAsync"
+ value-key="name"
+ @select="handleSelectClient"
+ ></el-autocomplete>
+ <div class="common-select-btn" @click="selClientClick">
+ <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
+ </div>
+ <div class="common-select-btn" @click="clearupClient">
+ <i class="el-icon-edit-outline" title="娓呴櫎"></i>
+ </div>
+ </div>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓ラ噸绋嬪害" prop="reportSourceId">
<div class="common-select">
<el-select
v-model="editConfig.infomation.reportSourceId"
@@ -90,27 +200,192 @@
</div>
</el-form-item>
</el-col>
- <!-- <el-col :span="12">
- <el-form-item label="閫夋嫨婧愬崟" prop="sourceSheet">
- <el-select v-model="editConfig.infomation.sourceSheet" size="mini">
- <el-option
- v-for="item in sourceSheetOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
+ <el-col :span="24">
+ <el-form-item label="涓婇棬鍦板潃" prop="problemDescription">
+ <el-input
+ type="textarea"
+ :autosize="{ minRows: 2, maxRows: 4 }"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ v-model="editConfig.infomation.problemDescription"
+ ></el-input>
</el-form-item>
- </el-col> -->
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浼樺厛绾у埆" prop="reportSourceId">
+ <div class="common-select">
+ <el-select
+ v-model="editConfig.infomation.reportSourceId"
+ placeholder="璇烽�夋嫨"
+ class="common-select-sel"
+ size="mini"
+ >
+ <el-option v-for="item in reportSourceOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ <div class="common-select-btn"><i class="el-icon-setting"></i></div>
+ </div>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="棰勭害涓婇棬鏃堕棿" prop="startTime">
+ <el-date-picker v-model="editConfig.infomation.startTime" type="datetime" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閿�鍞満浼�" prop="client_name">
+ <div class="custom-name">
+ <el-autocomplete
+ v-model="editConfig.infomation.client_name"
+ :fetch-suggestions="querySearchAsync"
+ value-key="name"
+ @select="handleSelectClient"
+ ></el-autocomplete>
+ <div class="common-select-btn" @click="selClientClick">
+ <i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
+ </div>
+ <div class="common-select-btn" @click="clearupClient">
+ <i class="el-icon-edit-outline" title="娓呴櫎"></i>
+ </div>
+ </div>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 鍔ㄦ�佷俊鎭� -->
+ <div class="basic-info-title">鍔ㄦ�佷俊鎭�</div>
+ <div class="basic-info-view">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="甯屾湜澶勭悊鏃堕棿" prop="startTime">
+ <el-date-picker v-model="editConfig.infomation.startTime" type="datetime" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹為檯澶勭悊鏃堕棿" prop="startTime">
+ <el-date-picker v-model="editConfig.infomation.startTime" type="datetime" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浜ら�氳垂" prop="reportSourceId">
+ <el-input v-model="editConfig.infomation.problemDescription"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏀惰垂閲戦" prop="reportSourceId">
+ <el-input v-model="editConfig.infomation.problemDescription"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鑺辫垂鏃堕棿" prop="reportSourceId">
+ <div class="common-select">
+ <el-select
+ v-model="editConfig.infomation.reportSourceId"
+ placeholder="璇烽�夋嫨"
+ class="common-select-sel"
+ size="mini"
+ >
+ <el-option v-for="item in reportSourceOptions" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ <div class="common-select-btn"><i class="el-icon-setting"></i></div>
+ </div>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 鏃堕棿/閲戦 -->
+ <div class="basic-info-title">鏃堕棿/閲戦</div>
+ <div class="basic-info-view">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="甯歌闂" prop="problemDescription">
+ <el-input v-model="editConfig.infomation.problemDescription"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="闂鎻忚堪" prop="problemDescription">
+ <el-input
+ type="textarea"
+ :autosize="{ minRows: 2, maxRows: 4 }"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ v-model="editConfig.infomation.problemDescription"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 瀹氫綅鍦板潃 -->
+ <div class="basic-info-title">瀹氫綅鍦板潃</div>
+ <div class="basic-info-view">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="瀹氫綅" prop="position">
+ <el-input v-model="editConfig.infomation.position"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鍦板浘" prop="map">
+ <div style="height: 100px"></div>
+ </el-form-item>
+ </el-col>
</el-row>
</div>
<!-- 闂鎻忚堪 -->
<div class="basic-info-title">闂鎻忚堪</div>
<div class="basic-info-view">
<el-row>
+ <el-col :span="12">
+ <el-form-item label="甯歌闂" prop="problemDescription">
+ <el-input v-model="editConfig.infomation.problemDescription"></el-input>
+ </el-form-item>
+ </el-col>
<el-col :span="24">
<el-form-item label="闂鎻忚堪" prop="problemDescription">
+ <el-input
+ type="textarea"
+ :autosize="{ minRows: 2, maxRows: 4 }"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ v-model="editConfig.infomation.problemDescription"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 瑙e喅鏂规硶 -->
+ <div class="basic-info-title">瑙e喅鏂规硶</div>
+ <div class="basic-info-view">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="瑙e喅鏂规硶" prop="problemDescription">
+ <el-input
+ type="textarea"
+ :autosize="{ minRows: 2, maxRows: 4 }"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ v-model="editConfig.infomation.problemDescription"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鍐呴儴澶囨敞" prop="problemDescription">
+ <el-input
+ type="textarea"
+ :autosize="{ minRows: 2, maxRows: 4 }"
+ placeholder="璇疯緭鍏ュ唴瀹�"
+ v-model="editConfig.infomation.problemDescription"
+ ></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 澶囨敞 -->
+ <div class="basic-info-title">澶囨敞</div>
+ <div class="basic-info-view">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞" prop="problemDescription">
<el-input
type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }"
@@ -148,46 +423,40 @@
</el-col>
</el-row>
</div>
- <!-- 閫夋嫨瀹℃壒娴佺▼ -->
- <!-- <div class="basic-info-title">閫夋嫨瀹℃壒娴佺▼</div>
- <div class="basic-info-view">
- <el-row>
- <el-col :span="20">
- <el-form-item label="瀹℃壒娴佺▼" prop="approvalWorkflow">
- <el-select
- v-model="editConfig.infomation.approvalWorkflow"
- placeholder="璇烽�夋嫨"
- size="mini"
- style="width: 100%"
- >
- <el-option
- v-for="item in approvalWorkflowOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="20">
- <el-form-item label="瀹℃壒姝ラ" prop="approvalSteps">
- <el-input v-model="editConfig.infomation.approvalSteps"></el-input>
- </el-form-item>
- </el-col>
- \
- <el-col :span="20">
- <el-form-item label="瀹℃壒浜�" prop="approvalPerson">
- <el-input v-model="editConfig.infomation.approvalPerson"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="20">
- <el-form-item label="瀹℃壒鎰忚" prop="approvalOpinion">
- <el-input v-model="editConfig.infomation.approvalOpinion" type="textarea" :rows="2"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- </div> -->
+ <!-- 瀹㈡埛鏈嶅姟鍗曞巻鍙茶褰� -->
+ <div v-if="editConfig.title === '缂栬緫'" class="basic-info">
+ <div class="basic-info-label" @click="expandClick('record')">
+ <i v-if="isRecordExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">瀹㈡埛鏈嶅姟鍗曞巻鍙茶褰�</span>
+ </div>
+ <div v-show="isRecordExpand" class="basic-info-content">
+ <div class="list" v-if="recordTableList.length > 0">
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <TableCommonView
+ ref="recordTableListRef"
+ :select-box="false"
+ :table-list="recordTableList"
+ ></TableCommonView>
+ </div>
+ <div class="no-data" v-else>娌℃湁鎵惧埌浠讳綍璁板綍</div>
+ </div>
+ </div>
+ <!-- 鏈嶅姟鍚堝悓淇℃伅 -->
+ <div v-if="editConfig.title === '缂栬緫'" class="basic-info">
+ <div class="basic-info-label" @click="expandClick('contract')">
+ <i v-if="isConttractExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">鏈嶅姟鍚堝悓淇℃伅</span>
+ </div>
+ <div v-show="isConttractExpand" class="basic-info-content">
+ <div class="list" v-if="recordTableList.length > 0">
+ <PagerView class="page" :pager-options="pagerOptions1" v-on="pagerEvents" />
+ <TableCommonView ref="tableListRef" :select-box="false" :table-list="tableList"></TableCommonView>
+ </div>
+ <div class="no-data" v-else>娌℃湁鎵惧埌浠讳綍璁板綍</div>
+ </div>
+ </div>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -209,8 +478,10 @@
import { getAllData } from "@/api/client/client"
import { getAddOrderManage, getUpdateOrderManage } from "@/api/serviceManage/orderManage"
import SelectClientDialog from "@/views/other/commonDialog/SelectClientDialog"
+import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
export default {
name: "AddOrderManageDialog",
+ mixins: [pageMixin],
props: {
editCommonConfig: {
type: Object,
@@ -253,14 +524,43 @@
editVisible: false,
title: "",
infomation: {}
+ },
+ isRecordExpand: true,
+ recordTableList: {},
+ pagerOptions: {
+ currPage: 1,
+ pageSize: 5,
+ totalCount: 0
+ },
+ isConttractExpand: true,
+ tableList: {},
+ pagerOptions1: {
+ currPage: 1,
+ pageSize: 5,
+ totalCount: 0
}
}
},
created() {
this.$store.dispatch("geClient")
this.getCommonData()
+ this.setTable()
},
methods: {
+ setTable() {
+ this.recordTableList = {
+ tableInfomation: [],
+ tableColumn: [
+ { label: "鏈嶅姟鍗曠紪鍙�", prop: "number", min: 100 },
+ { label: "涓婚", prop: "name" },
+ { label: "鏈嶅姟浜哄憳", prop: "clientId", min: 130 },
+ { label: "鏈嶅姟鏂瑰紡", prop: "contactName" },
+ { label: "浜у搧绫诲埆", prop: "name" },
+ { label: "浜у搧鍚嶇О", prop: "orderType" },
+ { label: "淇敼鏃堕棿", prop: "reportSourceId" }
+ ]
+ }
+ },
getCommonData() {
getAllData()
.then((res) => {
@@ -367,7 +667,16 @@
// 娣诲姞闄勪欢
addAnnexClick() {},
// 璁剧疆鍏佽涓婁紶鏂囦欢鏍煎紡
- setFormatClick() {}
+ setFormatClick() {},
+ // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢
+ expandClick(value) {
+ console.log(value)
+ if (value === "record") {
+ this.isRecordExpand = !this.isRecordExpand
+ } else if (value === "contract") {
+ this.isConttractExpand = !this.isConttractExpand
+ }
+ }
}
}
</script>
@@ -408,6 +717,29 @@
margin-left: 10px;
}
}
+ .basic-info {
+ .basic-info-label {
+ padding-left: 10px;
+ height: 42px;
+ line-height: 42px;
+ background: #f4f8fe;
+ color: #333;
+ font-size: 14px;
+ }
+ .basic-info-content {
+ .list {
+ .page {
+ text-align: right;
+ margin-bottom: 5px;
+ }
+ }
+ .no-data {
+ height: 40px;
+ line-height: 40px;
+ margin-left: 10px;
+ }
+ }
+ }
}
.dialog-footer {
background-color: #f5f5f5;
diff --git a/src/views/service/orderManage/index.vue b/src/views/service/orderManage/index.vue
index e76d7f3..c1f2eac 100644
--- a/src/views/service/orderManage/index.vue
+++ b/src/views/service/orderManage/index.vue
@@ -1,18 +1,17 @@
<template>
<div class="sales-lead">
- <div class="tab-view">
- <el-tabs v-model="activeName" @tab-click="tabsClick">
- <el-tab-pane label="鍏ㄩ儴" name="first"></el-tab-pane>
- <el-tab-pane label="寰呭垎閰�" name="second"></el-tab-pane>
- <el-tab-pane label="宸插偓鍗�" name="third"></el-tab-pane>
- <el-tab-pane label="澶勭悊涓�" name="fourth"></el-tab-pane>
- <el-tab-pane label="宸茬粨鍗�" name="aaa"></el-tab-pane>
- </el-tabs>
- </div>
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :receive="true" :submit-approval="true" :operates-list="operatesList" />
- <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <!-- <div class="detail-top">
+ </div> -->
+ <div class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :receive="true" :submit-approval="true" :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
<TableCommonView ref="tableListRef" :table-list="tableList">
<template slot="tableButton">
@@ -50,13 +49,7 @@
return {
activeName: "first",
tableList: {},
- queryClassOptions: [
- { value: "1", label: "鍏ㄩ儴" },
- { value: "2", label: "灏忕▼搴忔姤淇�" },
- { value: "3", label: "闈㈣鎶ヤ慨" },
- { value: "4", label: "浠婃棩鍐呭垱寤�" },
- { value: "5", label: "涓夊ぉ鍐呭垱寤�" }
- ],
+ queryClassOptions: [{ value: "1", label: "鏈湀涓婇棬" }],
searchOptions: [],
operatesList: [
{ id: "1", name: "鍏变韩" },
@@ -84,13 +77,14 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "宸ュ崟缂栧彿", prop: "number", min: 100 }, // 宸ュ崟缂栧彿
+ { label: "鏈嶅姟鍗曠紪鍙�", prop: "number", min: 100 }, // 鏈嶅姟鍗曠紪鍙�
+ { label: "涓婚", prop: "name" }, // 涓婚
{ label: "瀹㈡埛鍚嶇О", prop: "clientId", min: 130 }, // 瀹㈡埛鍚嶇О
- { label: "鑱旂郴浜哄鍚�", prop: "contactName" }, // 鑱旂郴浜哄鍚�
+ { label: "瀹為檯澶勭悊鏃堕棿", prop: "contactName" }, // 瀹為檯澶勭悊鏃堕棿
{ label: "鏈嶅姟浜哄憳", prop: "name" }, // 鏈嶅姟浜哄憳
- { label: "宸ュ崟鐘舵��", prop: "orderType" }, // 宸ュ崟鐘舵��
- { label: "鎶ヤ慨鏉ユ簮", prop: "reportSourceId" }, // 鎶ヤ慨鏉ユ簮
- { label: "宸ュ崟绫诲瀷", prop: "orderType" } // 宸ュ崟绫诲瀷
+ { label: "鏈嶅姟鏂瑰紡", prop: "orderType" }, // 鏈嶅姟鏂瑰紡
+ { label: "浜у搧绫诲埆", prop: "reportSourceId" }, // 浜у搧绫诲埆
+ { label: "鏁呴殰绫诲埆", prop: "orderType" } // 鏁呴殰绫诲埆
]
}
this.searchOptions = []
@@ -179,10 +173,13 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.sales-lead {
- .btn-pager {
- display: flex;
- .page {
- margin-left: auto;
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
}
}
}
diff --git a/src/views/service/serviceContract/index.vue b/src/views/service/serviceContract/index.vue
index 0655c35..bd59092 100644
--- a/src/views/service/serviceContract/index.vue
+++ b/src/views/service/serviceContract/index.vue
@@ -1,11 +1,21 @@
<template>
<div class="service-contract">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" />
+ <div v-if="isDetail" class="detail-top">
+ <DetailListCommonBtn :query-class-options="queryClassOptions" />
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
- <TableCommonView ref="tableListRef" :table-list="tableList">
+ <div v-else class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
+ </div>
+ <TableCommonView ref="tableListRef" :table-list="tableList" :select-box="!isDetail">
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -27,7 +37,12 @@
export default {
name: "ServiceContract",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
AddServiceContractDialog
@@ -169,7 +184,16 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.service-contract {
- .btn-pager {
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
+ }
+ .detail-top {
display: flex;
.page {
margin-left: auto;
diff --git a/src/views/service/serviceFollowup/index.vue b/src/views/service/serviceFollowup/index.vue
index 767f241..b406a5d 100644
--- a/src/views/service/serviceFollowup/index.vue
+++ b/src/views/service/serviceFollowup/index.vue
@@ -1,9 +1,15 @@
<template>
<div class="sales-lead">
- <SearchCommonView ref="searchCommonView" :query-class-options="queryClassOptions" :search-options="searchOptions" />
- <div class="btn-pager">
- <PublicFunctionBtnView :import-button="false" :operates-list="operatesList" />
- <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ <div class="top">
+ <SearchCommonView
+ ref="searchCommonView"
+ :query-class-options="queryClassOptions"
+ :search-options="searchOptions"
+ />
+ <div class="btn-pager">
+ <PublicFunctionBtnView :import-button="false" :operates-list="operatesList" />
+ <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
+ </div>
</div>
<TableCommonView ref="tableListRef" :table-list="tableList">
<template slot="tableButton">
@@ -159,10 +165,13 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
.sales-lead {
- .btn-pager {
- display: flex;
- .page {
- margin-left: auto;
+ .top {
+ margin-bottom: 20px;
+ .btn-pager {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
}
}
}
--
Gitblit v1.8.0