From ba814d605ad50da217a3dd422bcc7db5360b092f Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期六, 05 八月 2023 17:51:50 +0800
Subject: [PATCH] 销售模块详情页
---
src/views/sales/subOrder/index.vue | 58
src/views/sales/refundForm/DetailRefundForm.vue | 419 +++++
src/views/client/client/DetailClientManage.vue | 2
src/components/makepager/CommonFormTableView.vue | 45
src/views/sales/masterOrder/DetailMasterOrder.vue | 351 ++++
src/views/sales/masterOrder/index.vue | 42
src/views/sales/contractManage/DetailContractManage.vue | 459 +++++
src/views/sales/refundForm/index.vue | 60
src/common/const/salesFixedStatus.js | 18
src/components/makepager/TableCommonView.vue | 24
src/views/sales/salesOpportunity/DetailAdvanceDialog.vue | 107 +
src/views/sales/salesOpportunity/DetailOpportunity.vue | 683 ++++++++
src/views/sales/salesDetails/DetailSpecification.vue | 638 ++++++++
src/views/sales/salesReturn/index.vue | 60
src/views/sales/quotation/AddQuotationDialog.vue | 4
src/views/sales/quotation/DetailQuotation.vue | 593 +++++++
src/views/sales/salesOpportunity/index.vue | 56
src/views/sales/salesReturn/DetailReturn.vue | 460 +++++
src/views/sales/subOrder/DetailSubOrder.vue | 414 +++++
src/views/client/contacts/DetailContacts.vue | 2
src/views/sales/contractManage/index.vue | 20
src/views/sales/quotation/index.vue | 57
src/views/sales/salesDetails/index.vue | 42
23 files changed, 4,553 insertions(+), 61 deletions(-)
diff --git a/src/common/const/salesFixedStatus.js b/src/common/const/salesFixedStatus.js
new file mode 100644
index 0000000..420d5f0
--- /dev/null
+++ b/src/common/const/salesFixedStatus.js
@@ -0,0 +1,18 @@
+const status = {
+ termsConditions: [
+ "1銆佷互涓婃姤浠峰惈17%鐨勫鍊肩◣绁�",
+ "2銆佽川閲忔爣鍑嗭細鎸夎涓氭爣鍑嗘墽琛�",
+ "3銆佷緵璐ф柟瀵硅川閲忚礋璐g殑鏉′欢鍙婃湡闄愶細浜у搧鍏嶈垂淇濅慨1骞达紙浜轰负鍥犵礌闄ゅ锛夛紝鑷揣鍒颁箣鏃ョ畻璧�",
+ "4銆佸寘瑁呮爣鍑嗐�佸寘瑁呯墿鐨勪緵搴斾笌鍥炴敹锛氭爣鍑嗗寘瑁咃紝鍖呰鐗╀笉鍥炴敹",
+ "5銆佸悎鐞嗘崯鑰楀強璁$畻鏂规硶锛氭棤",
+ "6銆佽喘鐗╂墍鏈夋潈鑷揣娆句袱娓呮椂杞Щ锛屼絾璐揣鏂规湭灞ヨ鏀粯浠锋涔夊姟鐨勶紝璐殑鐗╁睘浜庝緵璐ф柟鎵�鏈�",
+ "7銆佺粨绠楁柟寮忓強鏈熼檺锛氶浠�30%锛屾彁渚涘墠浠樻竻鍏ㄦ",
+ "8銆佷氦璐ф湡闄愶細鍙崗鍟�",
+ "9銆佹媴淇濇柟寮忥紙涔熷彲鍙︾珛鎷呬繚鍚堝悓锛夛細鏃�",
+ "10銆佽繚绾﹁矗浠伙細鎸夊悎鍚屾硶鎵ц",
+ "11銆佽В鍐冲悎鍚岀籂绾风殑鏂瑰紡锛氭墽琛屾湰鍚堝悓鍙戠敓浜夎锛岀敱褰撲簨浜哄弻鏂瑰崗鍟嗚В鍐炽�傚崗鍟嗕笉鎴愶紝鍙屾柟鍚屾剰鎻愪氦鏈夊叧浠茶濮斿憳浼氫徊瑁侊紝鍙屾柟浜嬪悗娌℃湁杈炬垚浠茶鍗忚鐨勶紝鍙悜浜烘皯娉曢櫌璧疯瘔",
+ "12銆佹湰鎶ヤ环鑷弻鏂圭瀛楃洊绔犺捣鐢熸晥銆傦紙浼犵湡浠舵湁鏁堬級",
+ "13銆佸叾浠栫害瀹氫簨椤癸細鏈敖浜嬪疁锛屽弻鏂瑰弸濂藉崗鍟嗚В鍐�"
+ ]
+}
+export default status
diff --git a/src/components/makepager/CommonFormTableView.vue b/src/components/makepager/CommonFormTableView.vue
index ad95fc2..01f734a 100644
--- a/src/components/makepager/CommonFormTableView.vue
+++ b/src/components/makepager/CommonFormTableView.vue
@@ -24,30 +24,33 @@
</template>
<!-- column鏍峰紡 -->
<template slot-scope="scope">
- <el-form-item
- v-if="item.input"
- label=" "
- :prop="'tableData.' + scope.$index + '.' + item.prop"
- :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
- >
- <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini" disabled></el-input>
- </el-form-item>
- <el-form-item
- v-else-if="item.date"
- label=" "
- :prop="'tableData.' + scope.$index + '.' + item.prop"
- :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
- >
- <!-- <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini"></el-input> -->
- <el-date-picker v-model="scope.row[item.prop]" type="date" size="mini" style="width: 110px" disabled>
- </el-date-picker>
- </el-form-item>
+ <template v-if="!detailEnter">
+ <el-form-item
+ v-if="item.input"
+ label=" "
+ :prop="'tableData.' + scope.$index + '.' + item.prop"
+ :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+ >
+ <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini" disabled></el-input>
+ </el-form-item>
+ <el-form-item
+ v-else-if="item.date"
+ label=" "
+ :prop="'tableData.' + scope.$index + '.' + item.prop"
+ :rules="[{ required: item.isRequird ? true : false, message: '杈撳叆涓嶈兘涓虹┖' }]"
+ >
+ <!-- <el-input v-model.trim="scope.row[item.prop]" maxlength="50" size="mini"></el-input> -->
+ <el-date-picker v-model="scope.row[item.prop]" type="date" size="mini" style="width: 110px" disabled>
+ </el-date-picker>
+ </el-form-item>
+ <span v-else>{{ scope.row[item.prop] }}</span>
+ </template>
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
</el-table-column>
</el-table>
</el-form>
- <div style="margin: 10px">
+ <div v-if="!detailEnter" style="margin: 10px">
<el-button size="small" type="primary" disabled>鏂板</el-button>
<el-button size="small" type="primary" disabled>瀵煎叆鏄庣粏</el-button>
<el-button size="small" type="primary" disabled>娓呯┖</el-button>
@@ -72,6 +75,10 @@
export default {
name: "CommmonFormTableView",
props: {
+ detailEnter: {
+ type: Boolean,
+ default: false
+ },
productTableList: {
type: Object,
default: () => {
diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue
index 80b1e97..2e9797c 100644
--- a/src/components/makepager/TableCommonView.vue
+++ b/src/components/makepager/TableCommonView.vue
@@ -53,6 +53,18 @@
@click="selContactsClick(scope.row)"
>{{ scope.row[item.prop] }}</span
>
+ <span
+ v-else-if="item.isMasterClick && scope.row[item.prop]"
+ class="sel-name"
+ @click="selMasterClick(scope.row)"
+ >{{ scope.row[item.prop] }}</span
+ >
+ <span
+ v-else-if="item.isCommonClick && scope.row[item.prop]"
+ class="sel-name"
+ @click="selCommonClick(scope.row)"
+ >{{ scope.row[item.prop] }}</span
+ >
<span v-else>{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span>
</template>
</el-table-column>
@@ -200,17 +212,29 @@
}
return fmt
},
+ // 鏂板缓缂栬緫閫夋嫨寮圭獥
selNameClick(row) {
this.$emit("selCommonClick", row)
},
+ // 閿�鍞嚎绱�
selSalesLeadClick(row) {
this.$emit("selSalesLeadClick", row)
},
+ // 瀹㈡埛鍚嶇О
selClientClick(row) {
this.$emit("selClientClick", row)
},
+ // 鑱旂郴浜哄鍚�
selContactsClick(row) {
this.$emit("selContactsClick", row)
+ },
+ // 閿�鍞�诲崟
+ selMasterClick(row) {
+ this.$emit("selMasterClick", row)
+ },
+ // 鍏叡锛堥攢鍞満浼氥�佹姤浠峰崟銆侀攢鍞�诲崟銆侀攢鍞瓙鍗曘�傘�傘�傦級
+ selCommonClick(row) {
+ this.$emit("selCommonClick", row)
}
}
}
diff --git a/src/views/client/client/DetailClientManage.vue b/src/views/client/client/DetailClientManage.vue
index e1c0423..388075c 100644
--- a/src/views/client/client/DetailClientManage.vue
+++ b/src/views/client/client/DetailClientManage.vue
@@ -496,7 +496,7 @@
align-items: center;
height: 40px;
.content-title {
- width: 220px;
+ width: 320px;
text-align: right;
color: #555;
}
diff --git a/src/views/client/contacts/DetailContacts.vue b/src/views/client/contacts/DetailContacts.vue
index 97e078c..18907ff 100644
--- a/src/views/client/contacts/DetailContacts.vue
+++ b/src/views/client/contacts/DetailContacts.vue
@@ -331,7 +331,7 @@
align-items: center;
height: 40px;
.content-title {
- width: 220px;
+ width: 320px;
text-align: right;
color: #555;
}
diff --git a/src/views/sales/contractManage/DetailContractManage.vue b/src/views/sales/contractManage/DetailContractManage.vue
new file mode 100644
index 0000000..9e9b700
--- /dev/null
+++ b/src/views/sales/contractManage/DetailContractManage.vue
@@ -0,0 +1,459 @@
+<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.name }}</span>
+ </div>
+ </template>
+ <div class="content">
+ <div class="top">
+ <ul>
+ <li v-for="(item, i) in topList" :key="i">
+ <div class="left1">
+ <div class="content-title">{{ item.left1Str + "锛�" }}</div>
+ <div class="content-data">{{ item.left1Value }}</div>
+ </div>
+ <div class="left2">
+ <div class="content-title">{{ item.left2Str + "锛�" }}</div>
+ <div class="content-data">{{ item.left2Value }}</div>
+ </div>
+ <div class="right1">
+ <div class="content-title">{{ item.right1Str + "锛�" }}</div>
+ <div class="content-data">{{ item.right1Value }}</div>
+ </div>
+ <div class="right2">
+ <div class="content-title">{{ item.right2Str + "锛�" }}</div>
+ <div class="content-data">{{ item.right2Value }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <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="annex">
+ <!-- <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('schdule')">
+ <i v-if="isSchduleExpand" 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="isSchduleExpand" class="basic-info-content">
+ <div class="step-view">
+ <el-steps :active="active" align-center>
+ <el-step :active-color="'#fff'" :title="item.title" :key="index" v-for="(item, index) in stepsList">
+ <template slot="title">
+ <div class="step-title-view">
+ <div class="step-label">{{ item.title }}</div>
+ <div v-show="index === active" class="step-btn" @click="advanceClick(item)">鎺ㄨ繘</div>
+ <div class="step-desc">{{ item.desc }}</div>
+ </div>
+ </template>
+ </el-step>
+ </el-steps>
+ </div>
+ </div>
+ </div>
+ <!-- 鏈轰細鍩烘湰淇℃伅 -->
+ <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('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 === 'annex'" class="second">
+ <!-- <FollowupRecords :isDetail="true" /> -->
+ </div>
+ </div>
+ <!-- 鎺ㄨ繘 -->
+ <DetailAdvanceDialog v-if="advanceConfig.visible" :advance-config="advanceConfig" />
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import DetailAdvanceDialog from "@/views/sales/salesOpportunity/DetailAdvanceDialog"
+export default {
+ name: "DetailContractManage",
+ props: {
+ contractDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { DetailAdvanceDialog },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.contractDetail,
+ activeName: "first",
+ isSchduleExpand: true, // 杩涘害杩借釜
+ stepsList: [
+ { title: "寰呭鎵�", desc: "鍋滅暀: 1鏈�8澶�20灏忔椂" },
+ { title: "瀹℃壒涓�", desc: "" },
+ { title: "宸插鎵�", desc: "" },
+ { title: "宸插綊妗�", desc: "" }
+ ],
+ topList: [],
+ isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑
+ basicInfoList: [],
+ isAnnexExpand: true, // 闄勪欢淇℃伅
+ active: 2,
+ advanceConfig: {
+ visible: false,
+ active: ""
+ }
+ }
+ },
+ created() {
+ this.setData()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.topList = [
+ {
+ left1Str: "鍗曟嵁缂栧彿",
+ left1Value: "",
+ left2Str: "璐熻矗浜�",
+ left2Value: "",
+ right1Str: "鍒涘缓浜�",
+ right1Value: "",
+ right2Str: "褰撳墠瀹℃壒浜�",
+ right2Value: ""
+ },
+ {
+ left1Str: "鍚堝悓鐘舵��",
+ left1Value: "",
+ left2Str: "鍚堝悓鎵弿浠�",
+ left2Value: "",
+ right1Str: "瀹℃壒鐘舵��",
+ right1Value: "",
+ right2Str: "鏇存柊鏃堕棿",
+ right2Value: ""
+ },
+ {
+ left1Str: "鍒涘缓鏃堕棿",
+ left1Value: "",
+ left2Str: "瀹㈡埛鍚嶇О",
+ left2Value: "",
+ right1Str: "",
+ right1Value: "",
+ right2Str: "",
+ right2Value: ""
+ }
+ ]
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "鍗曟嵁缂栧彿",
+ rightValue: ""
+ },
+ {
+ leftStr: "璐熻矗浜�",
+ leftValue: "",
+ rightStr: "鍒涘缓浜�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓鏃堕棿",
+ leftValue: "",
+ rightStr: "鏈�鏂版洿鏂颁汉",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏇存柊鏃堕棿",
+ leftValue: "",
+ rightStr: "瀹℃壒鐘舵��",
+ rightValue: ""
+ },
+ {
+ 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 === "schdule") {
+ this.isSchduleExpand = !this.isSchduleExpand
+ } else if (value === "basic") {
+ this.isBasicExpand = !this.isBasicExpand
+ } else if (value === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ }
+ },
+ // 鎺ㄨ繘
+ advanceClick(item) {
+ console.log(item)
+ this.advanceConfig.visible = true
+ this.advanceConfig.active = item.title
+ }
+ }
+}
+</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,
+ .el-tabs__item:hover,
+ .el-tabs__active-bar {
+ color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .top {
+ height: 126px;
+ // line-height: 42px;
+ margin-bottom: 10px;
+ text-align: center;
+ font-size: 14px;
+ color: #555;
+ background-color: #fff;
+ li {
+ display: flex;
+ .left1,
+ .left2,
+ .right1,
+ .right2 {
+ width: 25%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 150px;
+ text-align: right;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ }
+ }
+ }
+ }
+ .tab-view {
+ background: #fff;
+ .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,
+ .all {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .all {
+ width: 100%;
+ }
+ .remark {
+ width: 100%;
+ }
+ .history {
+ .content-title {
+ width: 200px;
+ color: #8b0000;
+ }
+ .content-data {
+ color: #8b0000;
+ }
+ }
+ }
+ .step-view {
+ padding: 30px 60px 5px;
+ height: 100px;
+ .step-title-view {
+ margin-top: 10px;
+ font-size: 12px;
+ color: #555;
+ position: relative;
+ .step-label {
+ margin-top: -65px;
+ height: 60px;
+ }
+ .step-btn {
+ position: absolute;
+ bottom: -25px;
+ left: 50%;
+ margin-left: -28px;
+ width: 56px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ color: #2d82f4;
+ border: 1px solid #2d82f4;
+ border-radius: 15px;
+ cursor: pointer;
+ }
+ .step-desc {
+ margin-top: 15px;
+ }
+ }
+ .el-step__head.is-process {
+ color: #ff8707;
+ border-color: #ff8707;
+ }
+ .el-step__head.is-finish .el-step__line {
+ background-color: #409eff;
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/contractManage/index.vue b/src/views/sales/contractManage/index.vue
index ff11738..99243fa 100644
--- a/src/views/sales/contractManage/index.vue
+++ b/src/views/sales/contractManage/index.vue
@@ -17,7 +17,7 @@
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
</div>
- <TableCommonView ref="tableListRef" :table-list="tableList">
+ <TableCommonView ref="tableListRef" :table-list="tableList" @selCommonClick="selCommonClick">
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="100">
<template slot-scope="scope">
@@ -29,6 +29,8 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫 -->
<AddContractManageDialog v-if="editConfig.visible" :edit-common-config="editConfig" />
+ <!-- 鏈轰細璇︽儏 -->
+ <DetailContractManage v-if="contractDetail.visible" :contract-detail="contractDetail" />
</div>
</template>
@@ -36,13 +38,15 @@
import AddContractManageDialog from "@/views/sales/contractManage/AddContractManageDialog"
import { getContractList, getDelContract } from "@/api/sales/contractManage"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import DetailContractManage from "@/views/sales/contractManage/DetailContractManage"
export default {
name: "ContractManage",
props: {},
mixins: [pageMixin],
components: {
- AddContractManageDialog
+ AddContractManageDialog,
+ DetailContractManage
},
computed: {
searchCommonHeight() {
@@ -75,6 +79,10 @@
visible: false,
title: "鏂板缓",
infomation: {}
+ },
+ contractDetail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -87,7 +95,7 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "鍗曟嵁缂栧彿", prop: "number", min: 120 },
+ { label: "鍗曟嵁缂栧彿", prop: "number", min: 120, isCommonClick: true },
{ label: "璐熻矗浜�", prop: "memberId", min: 90 },
{ label: "瀹℃壒鐘舵��", prop: "approvalStatus" },
{ label: "鍒涘缓浜�", prop: "creator", min: 100 },
@@ -168,6 +176,12 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 鍚堝悓绠$悊璇︽儏
+ selCommonClick(row) {
+ console.log(row)
+ this.contractDetail.visible = true
+ this.contractDetail.infomation = { ...row }
}
}
}
diff --git a/src/views/sales/masterOrder/DetailMasterOrder.vue b/src/views/sales/masterOrder/DetailMasterOrder.vue
new file mode 100644
index 0000000..e09653c
--- /dev/null
+++ b/src/views/sales/masterOrder/DetailMasterOrder.vue
@@ -0,0 +1,351 @@
+<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.number }}</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="sub">
+ <!-- <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('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 === 'sub'" class="second">
+ <SubOrder :isDetail="true" />
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import SubOrder from "@/views/sales/subOrder"
+export default {
+ name: "DetailMasterOrder",
+ props: {
+ masterOrderDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { SubOrder },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.masterOrderDetail,
+ activeName: "first",
+ isBasicExpand: true, // 鍩烘湰淇℃伅
+ basicInfoList: [],
+ isAnnexExpand: true // 闄勪欢淇℃伅
+ }
+ },
+ created() {
+ this.setData()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "鍗曟嵁缂栧彿",
+ rightValue: ""
+ },
+ {
+ leftStr: "璐熻矗浜�",
+ leftValue: "",
+ rightStr: "鍒涘缓浜�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓鏃堕棿",
+ leftValue: "",
+ rightStr: "鏈�鏂版洿鏂颁汉",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏇存柊鏃堕棿",
+ leftValue: "",
+ rightStr: "瀹℃壒鐘舵��",
+ rightValue: ""
+ },
+ {
+ 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 === "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,
+ .el-tabs__item:hover,
+ .el-tabs__active-bar {
+ color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .tab-view {
+ background: #fff;
+ .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,
+ .all {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .all {
+ width: 100%;
+ }
+ .remark {
+ width: 100%;
+ }
+ .history {
+ .content-title {
+ width: 200px;
+ color: #8b0000;
+ }
+ .content-data {
+ color: #8b0000;
+ }
+ }
+ }
+ .step-view {
+ padding: 30px 60px 5px;
+ height: 100px;
+ .step-title-view {
+ margin-top: 10px;
+ font-size: 12px;
+ color: #555;
+ position: relative;
+ .step-label {
+ margin-top: -65px;
+ height: 60px;
+ }
+ .step-btn {
+ position: absolute;
+ bottom: -25px;
+ left: 50%;
+ margin-left: -28px;
+ width: 56px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ color: #2d82f4;
+ border: 1px solid #2d82f4;
+ border-radius: 15px;
+ cursor: pointer;
+ }
+ .step-desc {
+ margin-top: 15px;
+ }
+ }
+ .el-step__head.is-process {
+ color: #ff8707;
+ border-color: #ff8707;
+ }
+ .el-step__head.is-finish .el-step__line {
+ background-color: #409eff;
+ }
+ }
+ .termsConditions {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ font-family: PingFangSC;
+ // padding: 5px 0;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-termsConditions {
+ margin-left: 25px;
+ font-size: 13px;
+ color: #333;
+ li {
+ margin: 5px 0;
+ border-bottom: 0px solid #f9f9fb;
+ }
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/masterOrder/index.vue b/src/views/sales/masterOrder/index.vue
index 7c748bf..685e9e5 100644
--- a/src/views/sales/masterOrder/index.vue
+++ b/src/views/sales/masterOrder/index.vue
@@ -15,7 +15,14 @@
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
</div>
- <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail">
+ <TableCommonView
+ ref="tableListRef"
+ :show-summary="showSummary"
+ :table-list="tableList"
+ :select-box="!isDetail"
+ @selClientClick="selClientClick"
+ @selCommonClick="selCommonClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -27,6 +34,10 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫 -->
<AddMasterOrderDialog v-if="editConfig.visible" :edit-common-config="editConfig" />
+ <!-- 閿�鍞瓙鍗曡鎯� -->
+ <DetailMasterOrder v-if="masterOrderDeail.visible" :master-order-detail="masterOrderDeail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
</div>
</template>
@@ -34,6 +45,7 @@
import AddMasterOrderDialog from "@/views/sales/masterOrder/AddMasterOrderDialog"
import { getMasterOrderList, getDelMasterOrder } from "@/api/sales/masterOrder"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import DetailMasterOrder from "@/views/sales/masterOrder/DetailMasterOrder"
export default {
name: "MasterOrder",
@@ -45,7 +57,9 @@
},
mixins: [pageMixin],
components: {
- AddMasterOrderDialog
+ AddMasterOrderDialog,
+ DetailMasterOrder,
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {},
data() {
@@ -79,6 +93,14 @@
show: true,
sumProp: ["money"],
mergeNumber: 5
+ },
+ masterOrderDeail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -91,8 +113,8 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "鍗曟嵁缂栧彿", prop: "number", min: 100 }, // 鍗曟嵁缂栧彿
- { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 120 }, // 瀹㈡埛鍚嶇О
+ { label: "鍗曟嵁缂栧彿", prop: "number", min: 100, isCommonClick: true }, // 鍗曟嵁缂栧彿
+ { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 120, isClientClick: true }, // 瀹㈡埛鍚嶇О
{ label: "鏈嶅姟寮�濮嬫椂闂�", prop: "start_time", isTime: true }, // 鏈嶅姟寮�濮嬫椂闂�
{ label: "鏈嶅姟鎴鏃堕棿", prop: "end_time", isTime: true }, // 鏈嶅姟鎴鏃堕棿
{ label: "鍚堝悓閲戦", prop: "money" }, // 鍚堝悓閲戦
@@ -175,6 +197,18 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 瀹㈡埛鍚嶇О璇︽儏
+ selClientClick(row) {
+ console.log(row)
+ this.clientDeail.visible = true
+ this.clientDeail.infomation = { ...row }
+ },
+ // 鏈轰細鍚嶇О璇︽儏
+ selCommonClick(row) {
+ console.log(row)
+ this.masterOrderDeail.visible = true
+ this.masterOrderDeail.infomation = { ...row }
}
}
}
diff --git a/src/views/sales/quotation/AddQuotationDialog.vue b/src/views/sales/quotation/AddQuotationDialog.vue
index 9c6c37d..cdcf999 100644
--- a/src/views/sales/quotation/AddQuotationDialog.vue
+++ b/src/views/sales/quotation/AddQuotationDialog.vue
@@ -34,10 +34,10 @@
value-key="name"
@select="handleSelectClient('client', $event)"
></el-autocomplete>
- <div class="common-select-btn" @click="selClientClick">
+ <div class="common-select-btn" @click="selClientClick('client')">
<i class="el-icon-circle-plus-outline" title="閫夋嫨"></i>
</div>
- <div class="common-select-btn" @click="clearupClient">
+ <div class="common-select-btn" @click="clearupClient('client')">
<i class="el-icon-edit-outline" title="娓呴櫎"></i>
</div>
</div>
diff --git a/src/views/sales/quotation/DetailQuotation.vue b/src/views/sales/quotation/DetailQuotation.vue
new file mode 100644
index 0000000..1cd4f7c
--- /dev/null
+++ b/src/views/sales/quotation/DetailQuotation.vue
@@ -0,0 +1,593 @@
+<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.number }}</span>
+ </div>
+ </template>
+ <div class="content">
+ <div class="top">{{ "鍚堝悓鍙戣捣浜猴細" + "" }}</div>
+ <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="changeOrder">
+ <!-- <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('label')">
+ <i v-if="isLabelExpand" 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="isLabelExpand" class="basic-info-content"></div>
+ </div>
+ <!-- 鍩烘湰淇℃伅 -->
+ <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('termsConditions')">
+ <i v-if="isTermsConditionsExpand" 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="isTermsConditionsExpand" class="basic-info-content">
+ <div class="termsConditions">
+ <div class="content-title">{{ "鏉′欢涓庢潯娆�" + "锛�" }}</div>
+ <div class="content-termsConditions">
+ <ul>
+ <li v-for="(item, index) in Status.termsConditions" :key="index">{{ item }}</li>
+ </ul>
+ </div>
+ </div>
+ </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 class="basic-info">
+ <div class="basic-info-label" @click="expandClick('product')">
+ <i v-if="isProductExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">浜у搧绠$悊</span>
+ <span style="margin-left: 30px">{{ "甯佺锛�" + "浜烘皯甯�(锟�)" }}</span>
+ </div>
+ <div v-show="isProductExpand" class="basic-info-content">
+ <CommonFormTableView
+ :detail-enter="true"
+ :show-summary="showSummary"
+ :product-table-list="productTableList"
+ />
+ </div>
+ </div>
+ <!-- 瀹℃壒鏃ュ織 -->
+ <!-- <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('approval')">
+ <i v-if="isApprovalExpand" 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="isApprovalExpand" class="basic-info-content"></div>
+ </div> -->
+ </div>
+ <div v-if="activeName === 'changeOrder'" 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 SalesDetails from "@/views/sales/salesDetails"
+import ServiceContract from "@/views/service/serviceContract"
+import Status from "@/common/const/salesFixedStatus"
+import CommonFormTableView from "@/components/makepager/CommonFormTableView"
+export default {
+ name: "DetailQuotation",
+ props: {
+ quotationDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { SalesDetails, ServiceContract, CommonFormTableView },
+ computed: {},
+ data() {
+ return {
+ Status: Status,
+ detailConfig: this.quotationDetail,
+ activeName: "first",
+ isLabelExpand: true, // 鏍囩
+ isBasicExpand: true, // 鍩烘湰淇℃伅
+ basicInfoList: [],
+ isTermsConditionsExpand: true, // 鏉′欢涓庢潯娆�
+ isAnnexExpand: true, // 闄勪欢淇℃伅
+ isProductExpand: true, // 浜у搧绠$悊
+ isApprovalExpand: true, // 瀹℃壒鏃ュ織
+ showSummary: {
+ show: true,
+ total: true,
+ sumProp: ["other1", "other2", "other3", "other4"],
+ mergeNumber: 3
+ },
+ productTableList: {}
+ }
+ },
+ created() {
+ this.setData()
+ this.setTableForm()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "閿�鍞満浼氱紪鍙�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈轰細鍚嶇О",
+ leftValue: "",
+ rightStr: "鑱旂郴浜哄鍚�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍟嗘満鏉ユ簮",
+ leftValue: "",
+ rightStr: "鍟嗘満绫诲瀷",
+ rightValue: ""
+ },
+ {
+ leftStr: "閿�鍞樁娈�",
+ leftValue: "",
+ rightStr: "閿�鍞礋璐d汉",
+ rightValue: ""
+ },
+ {
+ leftStr: "鑰佸鎴疯惀閿�",
+ leftValue: "",
+ rightStr: "绛惧埌",
+ rightValue: ""
+ },
+ {
+ leftStr: "瀹℃壒鐘舵��",
+ leftValue: "",
+ rightStr: "绔炰簤瀵规墜",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓浜�",
+ leftValue: "",
+ rightStr: "鍒涘缓鏃堕棿",
+ rightValue: ""
+ }
+ ]
+ this.forecastList = [
+ {
+ leftStr: "鍙兘鎬�(%)",
+ leftValue: "",
+ rightStr: "甯佺",
+ rightValue: ""
+ },
+ {
+ leftStr: "棰勭畻缁濆鍊�",
+ leftValue: "",
+ rightStr: "棰勮鎴愪氦鏃ユ湡",
+ rightValue: ""
+ },
+ {
+ leftStr: "棰勮鍚堝悓閲戦",
+ leftValue: "",
+ rightStr: "褰撳墠鐘舵��",
+ rightValue: ""
+ }
+ ]
+ this.dynamicInfoList = [
+ {
+ leftStr: "鏈仈绯诲ぉ鏁�",
+ leftValue: "",
+ rightStr: "鏈�鏂拌仈绯绘棩鏈�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈帹鑽愬ぉ鏁�",
+ leftValue: "",
+ rightStr: "鏈�鏂版帹杩涙椂闂�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈�鏂拌仈绯讳汉",
+ leftValue: "",
+ rightStr: "鏈�鏂版洿鏂版椂闂�",
+ rightValue: ""
+ }
+ ]
+ this.businessInfoList = [
+ {
+ leftStr: "瀹㈡埛闇�姹傛垨鐥涚偣锛坵hy锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "鏄惁宸茬粡绔嬮」锛坧lan锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "璧勯噾棰勭畻鏄灏戯紙plan锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "鍏抽敭鍐崇瓥浜烘槸璋侊紙who锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "鍏抽敭鍐崇瓥鍥犵礌鏈夊摢浜涳紙what锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "鍐崇瓥娴佺▼鏄�庢牱鐨勶紙what锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "绔炰簤瀵规墜鎻愪緵鐨勬柟妗堬紙what锛�",
+ leftValue: ""
+ }
+ ]
+ this.swotInfoList = [
+ {
+ leftStr: "浼樺娍(S)",
+ leftValue: "",
+ rightStr: "鍔e娍(W)",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈轰細(O)",
+ leftValue: "",
+ rightStr: "濞佽儊(T)",
+ rightValue: ""
+ }
+ ]
+ this.addressInfoList = [
+ {
+ leftStr: "鍥藉",
+ leftValue: "",
+ rightStr: "鐪佷唤",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍩庡競",
+ leftValue: "",
+ rightStr: "鍖哄煙",
+ rightValue: ""
+ },
+ {
+ leftStr: "璇︾粏鍦板潃",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ this.historyList = [
+ {
+ date: "2023-08-04 13:22:36",
+ stage: "鎴愬姛缁撴",
+ modify: "绯荤粺绠$悊鍛�"
+ },
+ {
+ date: "2023-08-04 13:22:36",
+ stage: "鎴愬姛缁撴",
+ modify: "绯荤粺绠$悊鍛�"
+ }
+ ]
+ },
+ 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 === "label") {
+ this.isLabelExpand = !this.isLabelExpand
+ } else if (value === "termsConditions") {
+ this.isTermsConditionsExpand = !this.isTermsConditionsExpand
+ } else if (value === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ } else if (value === "product") {
+ this.isProductExpand = !this.isProductExpand
+ } else if (value === "approval") {
+ this.isApprovalExpand = !this.isApprovalExpand
+ }
+ },
+ setTableForm() {
+ this.productTableList = {
+ tableData: [
+ {
+ id: "1",
+ productName: "涓婃捣鏈夐檺鍏徃",
+ other0: "ZDYBD03-1",
+ other1: "12",
+ other2: "5.00",
+ other4: "3.00",
+ other3: "2.00"
+ }
+ ],
+ tableColumn: [
+ { label: "#", prop: "id", width: 40 },
+ { label: "鍚◣鍗曚环", prop: "other9", input: true },
+ { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
+ { label: "浜у搧缂栧彿", prop: "other0" },
+ { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
+ { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
+ { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
+ { label: "鎶樻墸棰�", prop: "other2" },
+ { label: "绋�(閿�鍞�)", prop: "other7", input: true },
+ { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
+ { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
+ { label: "浠风◣鍚堣", prop: "other3", input: true },
+ { label: "鎻忚堪", prop: "other8" },
+ { label: "婧愬崟绫诲瀷", prop: "other5" },
+ { label: "婧愬崟", prop: "other6" }
+ ]
+ }
+ }
+ }
+}
+</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,
+ .el-tabs__item:hover,
+ .el-tabs__active-bar {
+ color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .top {
+ height: 42px;
+ line-height: 42px;
+ margin-bottom: 10px;
+ text-align: center;
+ font-size: 14px;
+ color: #555;
+ background-color: #fff;
+ }
+ .tab-view {
+ background: #fff;
+ .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,
+ .all {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .all {
+ width: 100%;
+ }
+ .remark {
+ width: 100%;
+ }
+ .history {
+ .content-title {
+ width: 200px;
+ color: #8b0000;
+ }
+ .content-data {
+ color: #8b0000;
+ }
+ }
+ }
+ .step-view {
+ padding: 30px 60px 5px;
+ height: 100px;
+ .step-title-view {
+ margin-top: 10px;
+ font-size: 12px;
+ color: #555;
+ position: relative;
+ .step-label {
+ margin-top: -65px;
+ height: 60px;
+ }
+ .step-btn {
+ position: absolute;
+ bottom: -25px;
+ left: 50%;
+ margin-left: -28px;
+ width: 56px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ color: #2d82f4;
+ border: 1px solid #2d82f4;
+ border-radius: 15px;
+ cursor: pointer;
+ }
+ .step-desc {
+ margin-top: 15px;
+ }
+ }
+ .el-step__head.is-process {
+ color: #ff8707;
+ border-color: #ff8707;
+ }
+ .el-step__head.is-finish .el-step__line {
+ background-color: #409eff;
+ }
+ }
+ .termsConditions {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ font-family: PingFangSC;
+ // padding: 5px 0;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-termsConditions {
+ margin-left: 25px;
+ font-size: 13px;
+ color: #333;
+ li {
+ margin: 5px 0;
+ border-bottom: 0px solid #f9f9fb;
+ }
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/quotation/index.vue b/src/views/sales/quotation/index.vue
index 3a4d5a4..8f73b84 100644
--- a/src/views/sales/quotation/index.vue
+++ b/src/views/sales/quotation/index.vue
@@ -16,7 +16,14 @@
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
</div>
- <TableCommonView ref="tableListRef" :table-list="tableList" :select-box="!isDetail">
+ <TableCommonView
+ ref="tableListRef"
+ :table-list="tableList"
+ :select-box="!isDetail"
+ @selClientClick="selClientClick"
+ @selContactsClick="selContactsClick"
+ @selCommonClick="selCommonClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -28,6 +35,12 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫 -->
<AddQuotationDialog v-if="editConfig.visible" :edit-common-config="editConfig" />
+ <!-- 鎶ヤ环鍗曡鎯� -->
+ <DetailQuotation v-if="quotationDeail.visible" :quotation-detail="quotationDeail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
+ <!-- 鑱旂郴浜鸿鎯� -->
+ <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" />
</div>
</template>
@@ -35,6 +48,7 @@
import AddQuotationDialog from "@/views/sales/quotation/AddQuotationDialog"
import { getQuotationList, getDelQuotation } from "@/api/sales/quotation"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import DetailQuotation from "@/views/sales/quotation/DetailQuotation"
export default {
name: "QuotationView",
@@ -46,7 +60,10 @@
},
mixins: [pageMixin],
components: {
- AddQuotationDialog
+ AddQuotationDialog,
+ DetailQuotation,
+ DetailContacts: () => import("@/views/client/contacts/DetailContacts"),
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {
searchCommonHeight() {
@@ -77,6 +94,18 @@
visible: false,
title: "鏂板缓",
infomation: {}
+ },
+ quotationDeail: {
+ visible: false,
+ infomation: {}
+ },
+ contactsDeail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -89,9 +118,9 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "鎶ヤ环鍗曞彿", prop: "number", min: 90 }, // 鎶ヤ环鍗曞彿
- { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 120 }, // 瀹㈡埛鍚嶇О
- { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 90 }, // 鑱旂郴浜哄鍚�
+ { label: "鎶ヤ环鍗曞彿", prop: "number", min: 90, isCommonClick: true }, // 鎶ヤ环鍗曞彿
+ { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 120, isClientClick: true }, // 瀹㈡埛鍚嶇О
+ { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 90, isContactClick: true }, // 鑱旂郴浜哄鍚�
{ label: "閿�鍞礋璐d汉", prop: "member_id" }, // 閿�鍞礋璐d汉
{ label: "鏈夋晥鏈�", prop: "validity_date", isTime: true, min: 100 }, // 淇敼鏃堕棿
{ label: "灏忚", prop: "subTotal" }, // 灏忚
@@ -177,6 +206,24 @@
},
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 }
+ },
+ // 鏈轰細鍚嶇О璇︽儏
+ selCommonClick(row) {
+ console.log(row)
+ this.quotationDeail.visible = true
+ this.quotationDeail.infomation = { ...row }
}
}
}
diff --git a/src/views/sales/refundForm/DetailRefundForm.vue b/src/views/sales/refundForm/DetailRefundForm.vue
new file mode 100644
index 0000000..786ae99
--- /dev/null
+++ b/src/views/sales/refundForm/DetailRefundForm.vue
@@ -0,0 +1,419 @@
+<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.number }}</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="annex">
+ <!-- <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('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 class="basic-info">
+ <div class="basic-info-label" @click="expandClick('product')">
+ <i v-if="isProductExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">浜у搧绠$悊</span>
+ <span style="margin-left: 30px">{{ "甯佺锛�" + "浜烘皯甯�(锟�)" }}</span>
+ </div>
+ <div v-show="isProductExpand" class="basic-info-content">
+ <CommonFormTableView
+ :detail-enter="true"
+ :show-summary="showSummary"
+ :product-table-list="productTableList"
+ />
+ </div>
+ </div>
+ </div>
+ <div v-if="activeName === 'annex'" class="second">
+ <!-- <RefundForm :isDetail="true" /> -->
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import CommonFormTableView from "@/components/makepager/CommonFormTableView"
+export default {
+ name: "DetailSpecification",
+ props: {
+ refundFormDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { CommonFormTableView },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.refundFormDetail,
+ activeName: "first",
+ isBasicExpand: true, // 鍩烘湰淇℃伅
+ basicInfoList: [],
+ isRemarkExpand: true, // 澶囨敞淇℃伅
+ isAnnexExpand: true, // 闄勪欢淇℃伅
+ isProductExpand: true, // 浜у搧绠$悊
+ showSummary: {
+ show: true,
+ total: true,
+ sumProp: ["other1", "other2", "other3", "other4"],
+ mergeNumber: 3
+ },
+ productTableList: {}
+ }
+ },
+ created() {
+ this.setData()
+ this.setTableForm()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "閿�鍞��璐у崟缂栧彿",
+ rightValue: ""
+ },
+ {
+ leftStr: "閫夋嫨婧愬崟",
+ leftValue: "",
+ rightStr: "閫�鍏ヤ粨搴�",
+ rightValue: ""
+ },
+ {
+ leftStr: "閿�鍞礋璐d汉",
+ 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 === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ } else if (value === "product") {
+ this.isProductExpand = !this.isProductExpand
+ }
+ },
+ setTableForm() {
+ this.productTableList = {
+ tableData: [
+ {
+ id: "1",
+ productName: "涓婃捣鏈夐檺鍏徃",
+ other0: "ZDYBD03-1",
+ other1: "12",
+ other2: "5.00",
+ other4: "3.00",
+ other3: "2.00"
+ }
+ ],
+ tableColumn: [
+ { label: "#", prop: "id", width: 40 },
+ { label: "鍚◣鍗曚环", prop: "other9", input: true },
+ { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
+ { label: "浜у搧缂栧彿", prop: "other0" },
+ { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
+ { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
+ { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
+ { label: "鎶樻墸棰�", prop: "other2" },
+ { label: "绋�(閿�鍞�)", prop: "other7", input: true },
+ { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
+ { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
+ { label: "浠风◣鍚堣", prop: "other3", input: true },
+ { label: "鎻忚堪", prop: "other8" },
+ { label: "婧愬崟绫诲瀷", prop: "other5" },
+ { label: "婧愬崟", prop: "other6" }
+ ]
+ }
+ }
+ }
+}
+</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,
+ .el-tabs__item:hover,
+ .el-tabs__active-bar {
+ color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .tab-view {
+ background: #fff;
+ .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,
+ .all {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .all {
+ width: 100%;
+ }
+ .remark {
+ width: 100%;
+ }
+ .history {
+ .content-title {
+ width: 200px;
+ color: #8b0000;
+ }
+ .content-data {
+ color: #8b0000;
+ }
+ }
+ }
+ .step-view {
+ padding: 30px 60px 5px;
+ height: 100px;
+ .step-title-view {
+ margin-top: 10px;
+ font-size: 12px;
+ color: #555;
+ position: relative;
+ .step-label {
+ margin-top: -65px;
+ height: 60px;
+ }
+ .step-btn {
+ position: absolute;
+ bottom: -25px;
+ left: 50%;
+ margin-left: -28px;
+ width: 56px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ color: #2d82f4;
+ border: 1px solid #2d82f4;
+ border-radius: 15px;
+ cursor: pointer;
+ }
+ .step-desc {
+ margin-top: 15px;
+ }
+ }
+ .el-step__head.is-process {
+ color: #ff8707;
+ border-color: #ff8707;
+ }
+ .el-step__head.is-finish .el-step__line {
+ background-color: #409eff;
+ }
+ }
+ .termsConditions {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ font-family: PingFangSC;
+ // padding: 5px 0;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-termsConditions {
+ margin-left: 25px;
+ font-size: 13px;
+ color: #333;
+ li {
+ margin: 5px 0;
+ border-bottom: 0px solid #f9f9fb;
+ }
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/refundForm/index.vue b/src/views/sales/refundForm/index.vue
index 01da30f..df1d464 100644
--- a/src/views/sales/refundForm/index.vue
+++ b/src/views/sales/refundForm/index.vue
@@ -1,6 +1,10 @@
<template>
<div class="refund-form">
- <div class="top">
+ <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"
@@ -11,7 +15,13 @@
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
</div>
- <TableCommonView ref="tableListRef" :table-list="tableList">
+ <TableCommonView
+ ref="tableListRef"
+ :table-list="tableList"
+ :select-box="!isDetail"
+ @selClientClick="selClientClick"
+ @selCommonClick="selCommonClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="100">
<template slot-scope="scope">
@@ -23,6 +33,10 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫 -->
<AddRefundFormDialog v-if="editConfig.visible" :edit-common-config="editConfig" />
+ <!-- 閿�鍞��璐у崟璇︽儏 -->
+ <DetailRefundForm v-if="refundFormDetail.visible" :refund-form-detail="refundFormDetail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
</div>
</template>
@@ -30,13 +44,21 @@
import AddRefundFormDialog from "@/views/sales/refundForm/AddRefundFormDialog"
import { getSalesRefundList, getDelSalesRefund } from "@/api/sales/refundForm"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import DetailRefundForm from "@/views/sales/refundForm/DetailRefundForm"
export default {
name: "RefundForm",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
- AddRefundFormDialog
+ AddRefundFormDialog,
+ DetailRefundForm,
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {
searchCommonHeight() {
@@ -67,6 +89,14 @@
visible: false,
title: "鏂板缓",
infomation: {}
+ },
+ refundFormDetail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -79,8 +109,8 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "閫�娆惧崟缂栧彿", prop: "number" },
- { label: "瀹㈡埛鍚嶇О", prop: "clientId", min: 120 },
+ { label: "閫�娆惧崟缂栧彿", prop: "number", isCommonClick: true },
+ { label: "瀹㈡埛鍚嶇О", prop: "clientId", min: 120, isClientClick: true },
{ label: "閫�娆炬棩鏈�", prop: "refundDate", isTime: true, min: 130 },
{ label: "璐︽埛", prop: "accountId" },
{ label: "鏄惁寮�绁�", prop: "isInvoice", min: 100 },
@@ -164,6 +194,18 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 瀹㈡埛鍚嶇О璇︽儏
+ selClientClick(row) {
+ console.log(row)
+ this.clientDeail.visible = true
+ this.clientDeail.infomation = { ...row, client_name: row.name }
+ },
+ // 鑱旂郴浜鸿鎯�
+ selCommonClick(row) {
+ console.log(row)
+ this.refundFormDetail.visible = true
+ this.refundFormDetail.infomation = { ...row }
}
}
}
@@ -181,5 +223,11 @@
}
}
}
+ .detail-top {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
}
</style>
diff --git a/src/views/sales/salesDetails/DetailSpecification.vue b/src/views/sales/salesDetails/DetailSpecification.vue
new file mode 100644
index 0000000..1ed67b2
--- /dev/null
+++ b/src/views/sales/salesDetails/DetailSpecification.vue
@@ -0,0 +1,638 @@
+<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.number }}</span>
+ </div>
+ </template>
+ <div class="content">
+ <div class="top">
+ <ul>
+ <li v-for="(item, i) in topList" :key="i">
+ <div class="left1">
+ <div class="content-title">{{ item.left1Str + "锛�" }}</div>
+ <div class="content-data">{{ item.left1Value }}</div>
+ </div>
+ <div class="left2">
+ <div class="content-title">{{ item.left2Str + "锛�" }}</div>
+ <div class="content-data">{{ item.left2Value }}</div>
+ </div>
+ <div class="right1">
+ <div class="content-title">{{ item.right1Str + "锛�" }}</div>
+ <div class="content-data">{{ item.right1Value }}</div>
+ </div>
+ <div class="right2">
+ <div class="content-title">{{ item.right2Str + "锛�" }}</div>
+ <div class="content-data">{{ item.right2Value }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ <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="collection">
+ <!-- <template slot="label">
+ <div>璺熻繘璁板綍<el-badge type="primary" :value="2"> </el-badge></div>
+ </template> -->
+ </el-tab-pane>
+ <el-tab-pane label="鏀舵鍗�" name="receipt"></el-tab-pane>
+ <el-tab-pane label="閿�鍞彂绁�" name="invoice"></el-tab-pane>
+ <el-tab-pane label="閿�鍞��璐у崟" name="return"> </el-tab-pane>
+ <el-tab-pane label="鏈嶅姟鍚堝悓" name="serviceContract"></el-tab-pane>
+ <el-tab-pane label="閿�鍞��娆惧崟" name="refundForm"></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('delivery')">
+ <i v-if="isDeliveryExpand" 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="isDeliveryExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in deliveryInfoList" :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('termsConditions')">
+ <i v-if="isTermsConditionsExpand" 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="isTermsConditionsExpand" class="basic-info-content">
+ <div class="termsConditions">
+ <div class="content-title">{{ "鏉′欢涓庢潯娆�" + "锛�" }}</div>
+ <div class="content-termsConditions">
+ <ul>
+ <li v-for="(item, index) in Status.termsConditions" :key="index">{{ item }}</li>
+ </ul>
+ </div>
+ </div>
+ </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 class="basic-info">
+ <div class="basic-info-label" @click="expandClick('product')">
+ <i v-if="isProductExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">浜у搧绠$悊</span>
+ <span style="margin-left: 30px">{{ "甯佺锛�" + "浜烘皯甯�(锟�)" }}</span>
+ </div>
+ <div v-show="isProductExpand" class="basic-info-content">
+ <CommonFormTableView
+ :detail-enter="true"
+ :show-summary="showSummary"
+ :product-table-list="productTableList"
+ />
+ </div>
+ </div>
+ </div>
+ <div v-if="activeName === 'collection'" class="second">
+ <!-- <FollowupRecords :isDetail="true" /> -->
+ </div>
+ <div v-if="activeName === 'receipt'" class="second">
+ <!-- <FollowupRecords :isDetail="true" /> -->
+ </div>
+ <div v-if="activeName === 'invoice'" class="second">
+ <!-- <FollowupRecords :isDetail="true" /> -->
+ </div>
+ <div v-if="activeName === 'return'" class="second">
+ <SalesReturn :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'serviceContract'" class="second">
+ <ServiceContract :isDetail="true" />
+ </div>
+ <div v-if="activeName === 'refundForm'" class="second">
+ <RefundForm :isDetail="true" />
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import SalesReturn from "@/views/sales/salesReturn"
+import ServiceContract from "@/views/service/serviceContract"
+import RefundForm from "@/views/sales/refundForm"
+import Status from "@/common/const/salesFixedStatus"
+import CommonFormTableView from "@/components/makepager/CommonFormTableView"
+export default {
+ name: "DetailSpecification",
+ props: {
+ specificationDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { SalesReturn, ServiceContract, RefundForm, CommonFormTableView },
+ computed: {},
+ data() {
+ return {
+ Status: Status,
+ detailConfig: this.specificationDetail,
+ activeName: "first",
+ topList: [],
+ isLabelExpand: true, // 鏍囩
+ isBasicExpand: true, // 鍩烘湰淇℃伅
+ basicInfoList: [],
+ isDynamicExpand: true, // 鍔ㄦ�佷俊鎭�
+ dynamicInfoList: [],
+ isDeliveryExpand: true, // 鏀惰揣淇℃伅
+ deliveryInfoList: [],
+ isTermsConditionsExpand: true, // 鏉′欢涓庢潯娆�
+ isRemarkExpand: true, // 澶囨敞淇℃伅
+ isAnnexExpand: true, // 闄勪欢淇℃伅
+ isProductExpand: true, // 浜у搧绠$悊
+ showSummary: {
+ show: true,
+ total: true,
+ sumProp: ["other1", "other2", "other3", "other4"],
+ mergeNumber: 3
+ },
+ productTableList: {}
+ }
+ },
+ created() {
+ this.setData()
+ this.setTableForm()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.topList = [
+ {
+ left1Str: "瀹㈡埛鍚嶇О",
+ left1Value: "",
+ left2Str: "鍚堣",
+ left2Value: "",
+ right1Str: "宸叉敹閲戦",
+ right1Value: "0.00",
+ right2Str: "宸插紑绁ㄩ噾棰�",
+ right2Value: "0.00"
+ },
+ {
+ left1Str: "绛剧害鏃ユ湡",
+ left1Value: "",
+ left2Str: "閿�鍞礋璐d汉",
+ left2Value: "",
+ right1Str: "搴旀敹閲戦",
+ right1Value: "0.00",
+ right2Str: "鏈紑绁ㄩ噾棰�",
+ right2Value: "0.00"
+ }
+ ]
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "璁㈠崟缂栧彿",
+ rightValue: ""
+ },
+ {
+ leftStr: "閿�鍞満浼�",
+ leftValue: "",
+ rightStr: "閫夋嫨婧愬崟",
+ rightValue: ""
+ },
+ {
+ leftStr: "绛剧害鏃ユ湡",
+ leftValue: "",
+ rightStr: "閿�鍞礋璐d汉",
+ rightValue: ""
+ },
+ {
+ leftStr: "浜や粯鏃ユ湡",
+ leftValue: "",
+ rightStr: "璁㈠崟鏉ユ簮",
+ rightValue: ""
+ },
+ {
+ leftStr: "瀹℃壒鐘舵��",
+ leftValue: "",
+ rightStr: "寰俊璁㈠崟鐘舵��",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓浜�",
+ leftValue: "",
+ rightStr: "鍒涘缓鏃堕棿",
+ rightValue: ""
+ }
+ ]
+ this.deliveryInfoList = [
+ {
+ leftStr: "鏀惰揣浜�",
+ leftValue: "",
+ rightStr: "鏀惰揣鑱旂郴鏂瑰紡",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏀惰揣鍦板潃",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ this.dynamicInfoList = [
+ {
+ leftStr: "淇敼鏃堕棿",
+ leftValue: "",
+ rightStr: "鍑哄簱鐘舵��",
+ rightValue: ""
+ },
+ {
+ 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.isLabelExpand
+ } else if (value === "delivery") {
+ this.isDeliveryExpand = !this.isDeliveryExpand
+ } else if (value === "termsConditions") {
+ this.isTermsConditionsExpand = !this.isTermsConditionsExpand
+ } else if (value === "remark") {
+ this.isRemarkExpand = !this.isRemarkExpand
+ } else if (value === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ } else if (value === "product") {
+ this.isProductExpand = !this.isProductExpand
+ }
+ },
+ setTableForm() {
+ this.productTableList = {
+ tableData: [
+ {
+ id: "1",
+ productName: "涓婃捣鏈夐檺鍏徃",
+ other0: "ZDYBD03-1",
+ other1: "12",
+ other2: "5.00",
+ other4: "3.00",
+ other3: "2.00"
+ }
+ ],
+ tableColumn: [
+ { label: "#", prop: "id", width: 40 },
+ { label: "鍚◣鍗曚环", prop: "other9", input: true },
+ { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
+ { label: "浜у搧缂栧彿", prop: "other0" },
+ { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
+ { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
+ { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
+ { label: "鎶樻墸棰�", prop: "other2" },
+ { label: "绋�(閿�鍞�)", prop: "other7", input: true },
+ { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
+ { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
+ { label: "浠风◣鍚堣", prop: "other3", input: true },
+ { label: "鎻忚堪", prop: "other8" },
+ { label: "婧愬崟绫诲瀷", prop: "other5" },
+ { label: "婧愬崟", prop: "other6" }
+ ]
+ }
+ }
+ }
+}
+</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,
+ .el-tabs__item:hover,
+ .el-tabs__active-bar {
+ color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .top {
+ height: 84px;
+ // line-height: 42px;
+ margin-bottom: 10px;
+ text-align: center;
+ font-size: 14px;
+ color: #555;
+ background-color: #fff;
+ li {
+ display: flex;
+ .left1,
+ .left2,
+ .right1,
+ .right2 {
+ width: 25%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 150px;
+ text-align: right;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ }
+ }
+ }
+ }
+ .tab-view {
+ background: #fff;
+ .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,
+ .all {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .all {
+ width: 100%;
+ }
+ .remark {
+ width: 100%;
+ }
+ .history {
+ .content-title {
+ width: 200px;
+ color: #8b0000;
+ }
+ .content-data {
+ color: #8b0000;
+ }
+ }
+ }
+ .step-view {
+ padding: 30px 60px 5px;
+ height: 100px;
+ .step-title-view {
+ margin-top: 10px;
+ font-size: 12px;
+ color: #555;
+ position: relative;
+ .step-label {
+ margin-top: -65px;
+ height: 60px;
+ }
+ .step-btn {
+ position: absolute;
+ bottom: -25px;
+ left: 50%;
+ margin-left: -28px;
+ width: 56px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ color: #2d82f4;
+ border: 1px solid #2d82f4;
+ border-radius: 15px;
+ cursor: pointer;
+ }
+ .step-desc {
+ margin-top: 15px;
+ }
+ }
+ .el-step__head.is-process {
+ color: #ff8707;
+ border-color: #ff8707;
+ }
+ .el-step__head.is-finish .el-step__line {
+ background-color: #409eff;
+ }
+ }
+ .termsConditions {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ font-family: PingFangSC;
+ // padding: 5px 0;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-termsConditions {
+ margin-left: 25px;
+ font-size: 13px;
+ color: #333;
+ li {
+ margin: 5px 0;
+ border-bottom: 0px solid #f9f9fb;
+ }
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/salesDetails/index.vue b/src/views/sales/salesDetails/index.vue
index 52c6d40..b318dad 100644
--- a/src/views/sales/salesDetails/index.vue
+++ b/src/views/sales/salesDetails/index.vue
@@ -15,7 +15,14 @@
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
</div>
- <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail">
+ <TableCommonView
+ ref="tableListRef"
+ :show-summary="showSummary"
+ :table-list="tableList"
+ :select-box="!isDetail"
+ @selClientClick="selClientClick"
+ @selCommonClick="selCommonClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -27,6 +34,10 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫 -->
<AddSalesDetailsDialog v-if="editConfig.visible" :edit-common-config="editConfig" />
+ <!-- 閿�鍞槑缁嗚鎯� -->
+ <DetailSpecification v-if="specificationDetail.visible" :specification-detail="specificationDetail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
</div>
</template>
@@ -34,6 +45,7 @@
import AddSalesDetailsDialog from "@/views/sales/salesDetails/AddSalesDetailsDialog"
import { getSalesDetailsList, getDelSalesDetails } from "@/api/sales/salesDetails"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import DetailSpecification from "@/views/sales/salesDetails/DetailSpecification"
export default {
name: "SalesDetails",
@@ -45,7 +57,9 @@
},
mixins: [pageMixin],
components: {
- AddSalesDetailsDialog
+ AddSalesDetailsDialog,
+ DetailSpecification,
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {
searchCommonHeight() {
@@ -91,6 +105,14 @@
"priceTax"
],
mergeNumber: 6
+ },
+ specificationDetail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -103,8 +125,8 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "璁㈠崟缂栧彿", prop: "number" },
- { label: "瀹㈡埛鍚嶇О", prop: "client_name" },
+ { label: "璁㈠崟缂栧彿", prop: "number", isCommonClick: true },
+ { label: "瀹㈡埛鍚嶇О", prop: "client_name", isClientClick: true },
{ label: "绛剧害鏃ユ湡", prop: "signTime", isTime: true, width: 150 },
{ label: "閿�鍞礋璐d汉", prop: "memberId" },
{ label: "鍑哄簱鐘舵��", prop: "outboundStatus" },
@@ -195,6 +217,18 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 瀹㈡埛鍚嶇О璇︽儏
+ selClientClick(row) {
+ console.log(row)
+ this.clientDeail.visible = true
+ this.clientDeail.infomation = { ...row, client_name: row.name }
+ },
+ // 鑱旂郴浜鸿鎯�
+ selCommonClick(row) {
+ console.log(row)
+ this.specificationDetail.visible = true
+ this.specificationDetail.infomation = { ...row }
}
}
}
diff --git a/src/views/sales/salesOpportunity/DetailAdvanceDialog.vue b/src/views/sales/salesOpportunity/DetailAdvanceDialog.vue
new file mode 100644
index 0000000..c4aa32d
--- /dev/null
+++ b/src/views/sales/salesOpportunity/DetailAdvanceDialog.vue
@@ -0,0 +1,107 @@
+<template>
+ <div class="advance">
+ <el-dialog
+ :title="'鎺ㄨ繘'"
+ append-to-body
+ :visible.sync="commonConfig.visible"
+ :width="dialogWidth"
+ :before-close="handleClose"
+ custom-class="advance-dialog"
+ >
+ <div class="content">
+ <el-radio-group v-model="radio">
+ <div class="one">
+ <el-radio :label="1">
+ <span>鎺ㄨ繘鍒颁笅涓�闃舵</span>
+ <el-select v-model="value" size="mini" disabled>
+ <el-option v-for="(item, index) in options" :key="index" :label="item" :value="item"> </el-option>
+ </el-select>
+ </el-radio>
+ </div>
+ <div class="two">
+ <el-radio :label="2">
+ <span>鎺ㄨ繘鍒版寚瀹氶樁娈�</span>
+ <el-select v-model="value" size="mini">
+ <el-option v-for="(item, index) in options" :key="index" :label="item" :value="item"> </el-option>
+ </el-select>
+ </el-radio>
+ </div>
+ </el-radio-group>
+ </div>
+ <div slot="footer" class="dialog-footer">
+ <el-button type="primary" size="small" @click="saveClick('form')">鎺ㄨ繘</el-button>
+ <el-button size="small" @click="commonConfig.visible = false">鍙栨秷</el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "DetailAdvanceDialog",
+ props: {
+ advanceConfig: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ active: "闇�姹傚垎鏋�"
+ }
+ }
+ }
+ },
+ components: {},
+ computed: {},
+ data() {
+ return {
+ allOptions: ["鍒濇湡娌熼��", "闇�姹傚垎鏋�", "鏂规鎶ヤ环", "鍟嗗姟璋堝垽", "鎴愬姛缁撴", "澶辫触缁撴"],
+ dialogWidth: "25%",
+ radio: 1,
+ commonConfig: this.advanceConfig,
+ value: "",
+ options: ["鍒濇湡娌熼��", "闇�姹傚垎鏋�", "鏂规鎶ヤ环", "鍟嗗姟璋堝垽", "鎴愬姛缁撴", "澶辫触缁撴"]
+ }
+ },
+ watch: {},
+ created() {
+ this.setData()
+ },
+ methods: {
+ setData() {
+ console.log(this.commonConfig.active)
+ this.allOptions.map((item, index) => {
+ if (item === this.commonConfig.active) {
+ console.log(index)
+ this.value = this.allOptions[index + 1]
+ this.options.splice(index, 1)
+ }
+ })
+ },
+ handleClose() {
+ this.commonConfig.visible = false
+ }
+ }
+}
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style lang="scss" scoped>
+::v-deep {
+ .advance-dialog .el-dialog__body {
+ padding: 10px 20px;
+ .content {
+ .el-select {
+ margin-left: 10px;
+ }
+ .two {
+ margin-top: 15px;
+ }
+ }
+ .dialog-footer {
+ background-color: #f5f5f5;
+ height: 55px;
+ line-height: 55px;
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/salesOpportunity/DetailOpportunity.vue b/src/views/sales/salesOpportunity/DetailOpportunity.vue
new file mode 100644
index 0000000..cd2476c
--- /dev/null
+++ b/src/views/sales/salesOpportunity/DetailOpportunity.vue
@@ -0,0 +1,683 @@
+<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.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="collectionForecast"></el-tab-pane>
+ <el-tab-pane label="鎶ヤ环鍗�" name="quotation"></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('schdule')">
+ <i v-if="isSchduleExpand" 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="isSchduleExpand" class="basic-info-content">
+ <div class="step-view">
+ <el-steps :active="active" align-center>
+ <el-step :active-color="'#fff'" :title="item.title" :key="index" v-for="(item, index) in stepsList">
+ <template slot="title">
+ <div class="step-title-view">
+ <div class="step-label">{{ item.title }}</div>
+ <div v-show="index === active" class="step-btn" @click="advanceClick(item)">鎺ㄨ繘</div>
+ <div class="step-desc">{{ item.desc }}</div>
+ </div>
+ </template>
+ </el-step>
+ </el-steps>
+ </div>
+ </div>
+ </div>
+ <!-- 鏈轰細鍩烘湰淇℃伅 -->
+ <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('forecast')">
+ <i v-if="isForecastExpand" 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="isForecastExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in forecastList" :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">鍟嗘満涓冭绱�(5W2P)</span>
+ </div>
+ <div v-show="isBusinessExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in businessInfoList" :key="i">
+ <div class="all">
+ <div class="content-title">{{ item.leftStr + "锛�" }}</div>
+ <div class="content-data">{{ item.leftValue }}</div>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <!-- SWOT鍒嗘瀽 -->
+ <div class="basic-info">
+ <div class="basic-info-label" @click="expandClick('swot')">
+ <i v-if="isSwotExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">SWOT鍒嗘瀽</span>
+ </div>
+ <div v-show="isSwotExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in swotInfoList" :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 class="basic-info">
+ <div class="basic-info-label" @click="expandClick('history')">
+ <i v-if="isHistoryExpand" 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="isHistoryExpand" class="basic-info-content">
+ <ul>
+ <li v-for="(item, i) in historyList" :key="i">
+ <div class="left remark history">
+ <div class="content-title">{{ "鏃ユ湡锛�" + "2023-08-04 13:33:36" }}</div>
+ <div class="content-data">{{ "閿�鍞樁娈碉細" + "鎴愬姛缁撴" }}</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 === 'collectionForecast'" class="second">
+ <!-- <SalesOpportunity :isDetail="true" /> -->
+ </div>
+ <div v-if="activeName === 'quotation'" class="second">
+ <Quotation :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>
+ <!-- 鎺ㄨ繘 -->
+ <DetailAdvanceDialog v-if="advanceConfig.visible" :advance-config="advanceConfig" />
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import FollowupRecords from "@/views/client/followupRecords"
+import Quotation from "@/views/sales/quotation"
+import SalesDetails from "@/views/sales/salesDetails"
+import ServiceContract from "@/views/service/serviceContract"
+import DetailAdvanceDialog from "@/views/sales/salesOpportunity/DetailAdvanceDialog"
+export default {
+ name: "DetailClientManage",
+ props: {
+ opportunityDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { FollowupRecords, Quotation, SalesDetails, DetailAdvanceDialog, ServiceContract },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.opportunityDetail,
+ activeName: "first",
+ isSchduleExpand: true, // 杩涘害杩借釜
+ stepsList: [
+ { title: "鍒濇湡娌熼��", desc: "鍋滅暀: 1鏈�8澶�20灏忔椂" },
+ { title: "闇�姹傚垎鏋�", desc: "" },
+ { title: "鏂规鎶ヤ环", desc: "" },
+ { title: "鍟嗗姟璋堝垽", desc: "" },
+ { title: "鎴愬姛缁撴", desc: "" },
+ { title: "澶辫触缁撴", desc: "" }
+ ],
+ isBasicExpand: true, // 鍩烘湰淇℃伅灞曞紑
+ basicInfoList: [],
+ isForecastExpand: true, // 閿�鍞娴�
+ forecastList: [],
+ isDynamicExpand: true, // 鍔ㄦ�佷俊鎭�
+ dynamicInfoList: [],
+ isBusinessExpand: true, // 鍟嗘満涓冭绱�
+ businessInfoList: [],
+ isSwotExpand: true, // SWOT鍒嗘瀽
+ swotInfoList: [],
+ isAddressExpand: true, // 鍦板潃淇℃伅
+ addressInfoList: [],
+ isRemarkExpand: true, // 澶囨敞淇℃伅
+ isAnnexExpand: true, // 闄勪欢淇℃伅
+ isHistoryExpand: true, // 鎺ㄨ繘鍘嗗彶
+ historyList: [],
+ active: 2,
+ advanceConfig: {
+ visible: false,
+ active: ""
+ }
+ }
+ },
+ created() {
+ this.setData()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "閿�鍞満浼氱紪鍙�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈轰細鍚嶇О",
+ leftValue: "",
+ rightStr: "鑱旂郴浜哄鍚�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍟嗘満鏉ユ簮",
+ leftValue: "",
+ rightStr: "鍟嗘満绫诲瀷",
+ rightValue: ""
+ },
+ {
+ leftStr: "閿�鍞樁娈�",
+ leftValue: "",
+ rightStr: "閿�鍞礋璐d汉",
+ rightValue: ""
+ },
+ {
+ leftStr: "鑰佸鎴疯惀閿�",
+ leftValue: "",
+ rightStr: "绛惧埌",
+ rightValue: ""
+ },
+ {
+ leftStr: "瀹℃壒鐘舵��",
+ leftValue: "",
+ rightStr: "绔炰簤瀵规墜",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓浜�",
+ leftValue: "",
+ rightStr: "鍒涘缓鏃堕棿",
+ rightValue: ""
+ }
+ ]
+ this.forecastList = [
+ {
+ leftStr: "鍙兘鎬�(%)",
+ leftValue: "",
+ rightStr: "甯佺",
+ rightValue: ""
+ },
+ {
+ leftStr: "棰勭畻缁濆鍊�",
+ leftValue: "",
+ rightStr: "棰勮鎴愪氦鏃ユ湡",
+ rightValue: ""
+ },
+ {
+ leftStr: "棰勮鍚堝悓閲戦",
+ leftValue: "",
+ rightStr: "褰撳墠鐘舵��",
+ rightValue: ""
+ }
+ ]
+ this.dynamicInfoList = [
+ {
+ leftStr: "鏈仈绯诲ぉ鏁�",
+ leftValue: "",
+ rightStr: "鏈�鏂拌仈绯绘棩鏈�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈帹鑽愬ぉ鏁�",
+ leftValue: "",
+ rightStr: "鏈�鏂版帹杩涙椂闂�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈�鏂拌仈绯讳汉",
+ leftValue: "",
+ rightStr: "鏈�鏂版洿鏂版椂闂�",
+ rightValue: ""
+ }
+ ]
+ this.businessInfoList = [
+ {
+ leftStr: "瀹㈡埛闇�姹傛垨鐥涚偣锛坵hy锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "鏄惁宸茬粡绔嬮」锛坧lan锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "璧勯噾棰勭畻鏄灏戯紙plan锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "鍏抽敭鍐崇瓥浜烘槸璋侊紙who锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "鍏抽敭鍐崇瓥鍥犵礌鏈夊摢浜涳紙what锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "鍐崇瓥娴佺▼鏄�庢牱鐨勶紙what锛�",
+ leftValue: ""
+ },
+ {
+ leftStr: "绔炰簤瀵规墜鎻愪緵鐨勬柟妗堬紙what锛�",
+ leftValue: ""
+ }
+ ]
+ this.swotInfoList = [
+ {
+ leftStr: "浼樺娍(S)",
+ leftValue: "",
+ rightStr: "鍔e娍(W)",
+ rightValue: ""
+ },
+ {
+ leftStr: "鏈轰細(O)",
+ leftValue: "",
+ rightStr: "濞佽儊(T)",
+ rightValue: ""
+ }
+ ]
+ this.addressInfoList = [
+ {
+ leftStr: "鍥藉",
+ leftValue: "",
+ rightStr: "鐪佷唤",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍩庡競",
+ leftValue: "",
+ rightStr: "鍖哄煙",
+ rightValue: ""
+ },
+ {
+ leftStr: "璇︾粏鍦板潃",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ this.historyList = [
+ {
+ date: "2023-08-04 13:22:36",
+ stage: "鎴愬姛缁撴",
+ modify: "绯荤粺绠$悊鍛�"
+ },
+ {
+ date: "2023-08-04 13:22:36",
+ stage: "鎴愬姛缁撴",
+ modify: "绯荤粺绠$悊鍛�"
+ }
+ ]
+ },
+ handleClose() {
+ this.detailConfig.visible = false
+ },
+ // tab鍒囨崲
+ tabsClick(tab, event) {
+ console.log(tab, event)
+ },
+ // 灞曞紑鏀惰捣鐐瑰嚮浜嬩欢
+ expandClick(value) {
+ console.log(value)
+ if (value === "schdule") {
+ this.isSchduleExpand = !this.isSchduleExpand
+ } else if (value === "basic") {
+ this.isBasicExpand = !this.isBasicExpand
+ } else if (value === "forecast") {
+ this.isForecastExpand = !this.isForecastExpand
+ } else if (value === "dynamic") {
+ this.isDynamicExpand = !this.isDynamicExpand
+ } else if (value === "business") {
+ this.isBusinessExpand = !this.isBusinessExpand
+ } else if (value === "swot") {
+ this.isSwotExpand = !this.isSwotExpand
+ } else if (value === "address") {
+ this.isAddressExpand = !this.isAddressExpand
+ } else if (value === "remark") {
+ this.isRemarkExpand = !this.isRemarkExpand
+ } else if (value === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ } else if (value === "history") {
+ this.isHistoryExpand = !this.isHistoryExpand
+ }
+ },
+ // 鎺ㄨ繘
+ advanceClick(item) {
+ console.log(item)
+ this.advanceConfig.visible = true
+ this.advanceConfig.active = item.title
+ }
+ }
+}
+</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,
+ .el-tabs__item:hover,
+ .el-tabs__active-bar {
+ color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .tab-view {
+ background: #fff;
+ .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,
+ .all {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .all {
+ width: 100%;
+ }
+ .remark {
+ width: 100%;
+ }
+ .history {
+ .content-title {
+ width: 200px;
+ color: #8b0000;
+ }
+ .content-data {
+ color: #8b0000;
+ }
+ }
+ }
+ .step-view {
+ padding: 30px 60px 5px;
+ height: 100px;
+ .step-title-view {
+ margin-top: 10px;
+ font-size: 12px;
+ color: #555;
+ position: relative;
+ .step-label {
+ margin-top: -65px;
+ height: 60px;
+ }
+ .step-btn {
+ position: absolute;
+ bottom: -25px;
+ left: 50%;
+ margin-left: -28px;
+ width: 56px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ color: #2d82f4;
+ border: 1px solid #2d82f4;
+ border-radius: 15px;
+ cursor: pointer;
+ }
+ .step-desc {
+ margin-top: 15px;
+ }
+ }
+ .el-step__head.is-process {
+ color: #ff8707;
+ border-color: #ff8707;
+ }
+ .el-step__head.is-finish .el-step__line {
+ background-color: #409eff;
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/salesOpportunity/index.vue b/src/views/sales/salesOpportunity/index.vue
index 7885fd1..b9071f5 100644
--- a/src/views/sales/salesOpportunity/index.vue
+++ b/src/views/sales/salesOpportunity/index.vue
@@ -20,7 +20,13 @@
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
</div>
- <TableCommonView ref="tableListRef" :table-list="tableList">
+ <TableCommonView
+ ref="tableListRef"
+ :table-list="tableList"
+ @selClientClick="selClientClick"
+ @selContactsClick="selContactsClick"
+ @selCommonClick="selCommonClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="120">
<template slot-scope="scope">
@@ -33,6 +39,12 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫 -->
<AddSalesOpportunityDialog v-if="editConfig.visible" :edit-common-config="editConfig" />
+ <!-- 鏈轰細璇︽儏 -->
+ <DetailOpportunity v-if="opportunityDeail.visible" :opportunity-detail="opportunityDeail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
+ <!-- 鑱旂郴浜鸿鎯� -->
+ <DetailContacts v-if="contactsDeail.visible" :contacts-detail="contactsDeail" />
</div>
</template>
@@ -40,6 +52,7 @@
import AddSalesOpportunityDialog from "@/views/sales/salesOpportunity/AddSalesOpportunityDialog"
import { getSaleChanceList, getDelSaleChance } from "@/api/sales/salesOpportunity"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import DetailOpportunity from "@/views/sales/salesOpportunity/DetailOpportunity"
export default {
name: "SalesOpportunity",
@@ -51,7 +64,10 @@
},
mixins: [pageMixin],
components: {
- AddSalesOpportunityDialog
+ AddSalesOpportunityDialog,
+ DetailOpportunity,
+ DetailContacts: () => import("@/views/client/contacts/DetailContacts"),
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {
searchCommonHeight() {
@@ -91,6 +107,18 @@
visible: false,
title: "鏂板缓",
infomation: {}
+ },
+ opportunityDeail: {
+ visible: false,
+ infomation: {}
+ },
+ contactsDeail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -103,10 +131,10 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "鏈轰細鍚嶇О", prop: "name", min: 120 }, // 鏈轰細鍚嶇О
- { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 90 }, // 瀹㈡埛鍚嶇О
+ { label: "鏈轰細鍚嶇О", prop: "name", min: 120, isCommonClick: true }, // 鏈轰細鍚嶇О
+ { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 90, isClientClick: true }, // 瀹㈡埛鍚嶇О
{ label: "閿�鍞満浼氱紪鍙�", prop: "number" }, // 閿�鍞満浼氱紪鍙�
- { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 100 }, // 鑱旂郴浜哄鍚�
+ { label: "鑱旂郴浜哄鍚�", prop: "contact_name", min: 100, isContactClick: true }, // 鑱旂郴浜哄鍚�
{ label: "閿�鍞樁娈�", prop: "sale_stage_id" }, // 閿�鍞樁娈�
{ label: "鍙兘鎬�(%)", prop: "possibilities_id" }, // 鍙兘鎬�
{ label: "棰勮鎴愪氦鏃ユ湡", prop: "expected_time", isTime: true, min: 130 }, // 棰勮鎴愪氦鏃ユ湡
@@ -191,6 +219,24 @@
},
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 }
+ },
+ // 鏈轰細鍚嶇О璇︽儏
+ selCommonClick(row) {
+ console.log(row)
+ this.opportunityDeail.visible = true
+ this.opportunityDeail.infomation = { ...row }
}
}
}
diff --git a/src/views/sales/salesReturn/DetailReturn.vue b/src/views/sales/salesReturn/DetailReturn.vue
new file mode 100644
index 0000000..a678fda
--- /dev/null
+++ b/src/views/sales/salesReturn/DetailReturn.vue
@@ -0,0 +1,460 @@
+<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.number }}</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="refundForm">
+ <!-- <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('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 class="basic-info">
+ <div class="basic-info-label" @click="expandClick('product')">
+ <i v-if="isProductExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">浜у搧绠$悊</span>
+ <span style="margin-left: 30px">{{ "甯佺锛�" + "浜烘皯甯�(锟�)" }}</span>
+ </div>
+ <div v-show="isProductExpand" class="basic-info-content">
+ <CommonFormTableView
+ :detail-enter="true"
+ :show-summary="showSummary"
+ :product-table-list="productTableList"
+ />
+ </div>
+ </div>
+ </div>
+ <div v-if="activeName === 'refundForm'" class="second">
+ <RefundForm :isDetail="true" />
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import RefundForm from "@/views/sales/refundForm"
+import CommonFormTableView from "@/components/makepager/CommonFormTableView"
+export default {
+ name: "DetailSpecification",
+ props: {
+ returnDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { RefundForm, CommonFormTableView },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.returnDetail,
+ activeName: "first",
+ isBasicExpand: true, // 鍩烘湰淇℃伅
+ basicInfoList: [],
+ isDynamicExpand: true, // 鍔ㄦ�佷俊鎭�
+ dynamicInfoList: [],
+ isRemarkExpand: true, // 澶囨敞淇℃伅
+ isAnnexExpand: true, // 闄勪欢淇℃伅
+ isProductExpand: true, // 浜у搧绠$悊
+ showSummary: {
+ show: true,
+ total: true,
+ sumProp: ["other1", "other2", "other3", "other4"],
+ mergeNumber: 3
+ },
+ productTableList: {}
+ }
+ },
+ created() {
+ this.setData()
+ this.setTableForm()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "閿�鍞��璐у崟缂栧彿",
+ rightValue: ""
+ },
+ {
+ leftStr: "閫夋嫨婧愬崟",
+ leftValue: "",
+ rightStr: "閫�鍏ヤ粨搴�",
+ rightValue: ""
+ },
+ {
+ leftStr: "閿�鍞礋璐d汉",
+ leftValue: "",
+ rightStr: "瀹℃壒鐘舵��",
+ rightValue: ""
+ },
+ {
+ leftStr: "閫�璐ф棩鏈�",
+ leftValue: "",
+ rightStr: "鍒涘缓鏃堕棿",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓浜�",
+ leftValue: "",
+ rightStr: "",
+ rightValue: ""
+ }
+ ]
+ this.dynamicInfoList = [
+ {
+ 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.isLabelExpand
+ } else if (value === "remark") {
+ this.isRemarkExpand = !this.isRemarkExpand
+ } else if (value === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ } else if (value === "product") {
+ this.isProductExpand = !this.isProductExpand
+ }
+ },
+ setTableForm() {
+ this.productTableList = {
+ tableData: [
+ {
+ id: "1",
+ productName: "涓婃捣鏈夐檺鍏徃",
+ other0: "ZDYBD03-1",
+ other1: "12",
+ other2: "5.00",
+ other4: "3.00",
+ other3: "2.00"
+ }
+ ],
+ tableColumn: [
+ { label: "#", prop: "id", width: 40 },
+ { label: "鍚◣鍗曚环", prop: "other9", input: true },
+ { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
+ { label: "浜у搧缂栧彿", prop: "other0" },
+ { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
+ { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
+ { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
+ { label: "鎶樻墸棰�", prop: "other2" },
+ { label: "绋�(閿�鍞�)", prop: "other7", input: true },
+ { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
+ { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
+ { label: "浠风◣鍚堣", prop: "other3", input: true },
+ { label: "鎻忚堪", prop: "other8" },
+ { label: "婧愬崟绫诲瀷", prop: "other5" },
+ { label: "婧愬崟", prop: "other6" }
+ ]
+ }
+ }
+ }
+}
+</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,
+ .el-tabs__item:hover,
+ .el-tabs__active-bar {
+ color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .tab-view {
+ background: #fff;
+ .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,
+ .all {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .all {
+ width: 100%;
+ }
+ .remark {
+ width: 100%;
+ }
+ .history {
+ .content-title {
+ width: 200px;
+ color: #8b0000;
+ }
+ .content-data {
+ color: #8b0000;
+ }
+ }
+ }
+ .step-view {
+ padding: 30px 60px 5px;
+ height: 100px;
+ .step-title-view {
+ margin-top: 10px;
+ font-size: 12px;
+ color: #555;
+ position: relative;
+ .step-label {
+ margin-top: -65px;
+ height: 60px;
+ }
+ .step-btn {
+ position: absolute;
+ bottom: -25px;
+ left: 50%;
+ margin-left: -28px;
+ width: 56px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ color: #2d82f4;
+ border: 1px solid #2d82f4;
+ border-radius: 15px;
+ cursor: pointer;
+ }
+ .step-desc {
+ margin-top: 15px;
+ }
+ }
+ .el-step__head.is-process {
+ color: #ff8707;
+ border-color: #ff8707;
+ }
+ .el-step__head.is-finish .el-step__line {
+ background-color: #409eff;
+ }
+ }
+ .termsConditions {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ font-family: PingFangSC;
+ // padding: 5px 0;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-termsConditions {
+ margin-left: 25px;
+ font-size: 13px;
+ color: #333;
+ li {
+ margin: 5px 0;
+ border-bottom: 0px solid #f9f9fb;
+ }
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/salesReturn/index.vue b/src/views/sales/salesReturn/index.vue
index 87060d6..32c0634 100644
--- a/src/views/sales/salesReturn/index.vue
+++ b/src/views/sales/salesReturn/index.vue
@@ -1,6 +1,10 @@
<template>
<div class="sales-return">
- <div class="top">
+ <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"
@@ -11,7 +15,13 @@
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
</div>
- <TableCommonView ref="tableListRef" :table-list="tableList">
+ <TableCommonView
+ ref="tableListRef"
+ :table-list="tableList"
+ :select-box="!isDetail"
+ @selClientClick="selClientClick"
+ @selCommonClick="selCommonClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -23,6 +33,10 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫 -->
<AddSalesReturnDialog v-if="editConfig.visible" :edit-common-config="editConfig" />
+ <!-- 閿�鍞��璐у崟璇︽儏 -->
+ <DetailReturn v-if="returnDetail.visible" :return-detail="returnDetail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
</div>
</template>
@@ -30,13 +44,21 @@
import AddSalesReturnDialog from "@/views/sales/salesReturn/AddSalesReturnDialog"
import { getSalesReturnList, getDelSalesReturn } from "@/api/sales/salesReturn"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import DetailReturn from "@/views/sales/salesReturn/DetailReturn"
export default {
name: "SalesReturn",
- props: {},
+ props: {
+ isDetail: {
+ type: Boolean,
+ default: false
+ }
+ },
mixins: [pageMixin],
components: {
- AddSalesReturnDialog
+ AddSalesReturnDialog,
+ DetailReturn,
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {
searchCommonHeight() {
@@ -68,6 +90,14 @@
visible: false,
title: "鏂板缓",
infomation: {}
+ },
+ returnDetail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -80,8 +110,8 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "閿�鍞��璐у崟缂栧彿", prop: "number", min: 120 },
- { label: "瀹㈡埛鍚嶇О", prop: "clientId", min: 90 },
+ { label: "閿�鍞��璐у崟缂栧彿", prop: "number", min: 120, isCommonClick: true },
+ { label: "瀹㈡埛鍚嶇О", prop: "clientId", min: 90, isClientClick: true },
{ label: "閫�璐ф棩鏈�", prop: "returnDate", isTime: true, min: 130 },
{ label: "鐘舵��", prop: "status" },
{ label: "閫�鍏ヤ粨搴�", prop: "repository" },
@@ -165,6 +195,18 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 瀹㈡埛鍚嶇О璇︽儏
+ selClientClick(row) {
+ console.log(row)
+ this.clientDeail.visible = true
+ this.clientDeail.infomation = { ...row, client_name: row.name }
+ },
+ // 鑱旂郴浜鸿鎯�
+ selCommonClick(row) {
+ console.log(row)
+ this.returnDetail.visible = true
+ this.returnDetail.infomation = { ...row }
}
}
}
@@ -182,5 +224,11 @@
}
}
}
+ .detail-top {
+ display: flex;
+ .page {
+ margin-left: auto;
+ }
+ }
}
</style>
diff --git a/src/views/sales/subOrder/DetailSubOrder.vue b/src/views/sales/subOrder/DetailSubOrder.vue
new file mode 100644
index 0000000..4fd0fbe
--- /dev/null
+++ b/src/views/sales/subOrder/DetailSubOrder.vue
@@ -0,0 +1,414 @@
+<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.number }}</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="detail">
+ <!-- <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('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 class="basic-info">
+ <div class="basic-info-label" @click="expandClick('product')">
+ <i v-if="isProductExpand" class="el-icon-arrow-down"></i>
+ <i v-else class="el-icon-arrow-up"></i>
+ <span style="margin-left: 10px">浜у搧绠$悊</span>
+ <span style="margin-left: 30px">{{ "甯佺锛�" + "浜烘皯甯�(锟�)" }}</span>
+ </div>
+ <div v-show="isProductExpand" class="basic-info-content">
+ <CommonFormTableView
+ :detail-enter="true"
+ :show-summary="showSummary"
+ :product-table-list="productTableList"
+ />
+ </div>
+ </div>
+ </div>
+ <div v-if="activeName === 'detail'" class="second">
+ <SalesDetails :isDetail="true" />
+ </div>
+ </div>
+ </el-drawer>
+ </div>
+</template>
+
+<script>
+import SalesDetails from "@/views/sales/salesDetails"
+import CommonFormTableView from "@/components/makepager/CommonFormTableView"
+export default {
+ name: "DetailSubOrder",
+ props: {
+ subOrderDetail: {
+ type: Object,
+ default: () => {
+ return {
+ visible: false,
+ infomation: {}
+ }
+ }
+ }
+ },
+ components: { SalesDetails, CommonFormTableView },
+ computed: {},
+ data() {
+ return {
+ detailConfig: this.subOrderDetail,
+ activeName: "first",
+ isBasicExpand: true, // 鍩烘湰淇℃伅
+ basicInfoList: [],
+ isAnnexExpand: true, // 闄勪欢淇℃伅
+ isProductExpand: true, // 浜у搧绠$悊
+ showSummary: {
+ show: true,
+ total: true,
+ sumProp: ["other1", "other2", "other3", "other4"],
+ mergeNumber: 3
+ },
+ productTableList: {}
+ }
+ },
+ created() {
+ this.setData()
+ this.setTableForm()
+ },
+ mounted() {},
+ methods: {
+ setData() {
+ this.basicInfoList = [
+ {
+ leftStr: "瀹㈡埛鍚嶇О",
+ leftValue: "",
+ rightStr: "鍗曟嵁缂栧彿",
+ rightValue: ""
+ },
+ {
+ leftStr: "閿�鍞�诲崟",
+ leftValue: "",
+ rightStr: "璐熻矗浜�",
+ rightValue: ""
+ },
+ {
+ leftStr: "鍒涘缓浜�",
+ leftValue: "",
+ rightStr: "鍒涘缓鏃堕棿",
+ rightValue: ""
+ },
+ {
+ 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 === "annex") {
+ this.isAnnexExpand = !this.isAnnexExpand
+ } else if (value === "product") {
+ this.isProductExpand = !this.isProductExpand
+ }
+ },
+ setTableForm() {
+ this.productTableList = {
+ tableData: [
+ {
+ id: "1",
+ productName: "涓婃捣鏈夐檺鍏徃",
+ other0: "ZDYBD03-1",
+ other1: "12",
+ other2: "5.00",
+ other4: "3.00",
+ other3: "2.00"
+ }
+ ],
+ tableColumn: [
+ { label: "#", prop: "id", width: 40 },
+ { label: "鍚◣鍗曚环", prop: "other9", input: true },
+ { label: "浜у搧鍚嶇О", prop: "productName", input: true, isRequird: true },
+ { label: "浜у搧缂栧彿", prop: "other0" },
+ { label: "鏁伴噺", prop: "other1", input: true, isRequird: true },
+ { label: "鎶樻墸鐜�(%)", prop: "other6", input: true },
+ { label: "涓嶅惈绋庡崟浠�", prop: "other7", input: true },
+ { label: "鎶樻墸棰�", prop: "other2" },
+ { label: "绋�(閿�鍞�)", prop: "other7", input: true },
+ { label: "瀹為檯鍚◣鍗曚环", prop: "other3" },
+ { label: "涓嶅惈绋庨噾棰�", prop: "other4" },
+ { label: "浠风◣鍚堣", prop: "other3", input: true },
+ { label: "鎻忚堪", prop: "other8" },
+ { label: "婧愬崟绫诲瀷", prop: "other5" },
+ { label: "婧愬崟", prop: "other6" }
+ ]
+ }
+ }
+ }
+}
+</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,
+ .el-tabs__item:hover,
+ .el-tabs__active-bar {
+ color: $color-primary;
+ }
+ .el-tabs__header {
+ margin: 0;
+ }
+ .el-drawer__body {
+ .content {
+ background-color: rgb(230, 233, 240);
+ padding: 8px;
+ .top {
+ height: 42px;
+ line-height: 42px;
+ margin-bottom: 10px;
+ text-align: center;
+ font-size: 14px;
+ color: #555;
+ background-color: #fff;
+ }
+ .tab-view {
+ background: #fff;
+ .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,
+ .all {
+ width: 50%;
+ display: flex;
+ align-items: center;
+ height: 40px;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-data {
+ text-align: left;
+ margin-left: 25px;
+ color: #333;
+ }
+ }
+ .all {
+ width: 100%;
+ }
+ .remark {
+ width: 100%;
+ }
+ .history {
+ .content-title {
+ width: 200px;
+ color: #8b0000;
+ }
+ .content-data {
+ color: #8b0000;
+ }
+ }
+ }
+ .step-view {
+ padding: 30px 60px 5px;
+ height: 100px;
+ .step-title-view {
+ margin-top: 10px;
+ font-size: 12px;
+ color: #555;
+ position: relative;
+ .step-label {
+ margin-top: -65px;
+ height: 60px;
+ }
+ .step-btn {
+ position: absolute;
+ bottom: -25px;
+ left: 50%;
+ margin-left: -28px;
+ width: 56px;
+ height: 24px;
+ line-height: 24px;
+ text-align: center;
+ color: #2d82f4;
+ border: 1px solid #2d82f4;
+ border-radius: 15px;
+ cursor: pointer;
+ }
+ .step-desc {
+ margin-top: 15px;
+ }
+ }
+ .el-step__head.is-process {
+ color: #ff8707;
+ border-color: #ff8707;
+ }
+ .el-step__head.is-finish .el-step__line {
+ background-color: #409eff;
+ }
+ }
+ .termsConditions {
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+ font-family: PingFangSC;
+ // padding: 5px 0;
+ .content-title {
+ width: 320px;
+ text-align: right;
+ color: #555;
+ }
+ .content-termsConditions {
+ margin-left: 25px;
+ font-size: 13px;
+ color: #333;
+ li {
+ margin: 5px 0;
+ border-bottom: 0px solid #f9f9fb;
+ }
+ }
+ }
+ }
+ }
+ }
+ .second {
+ background: #fff;
+ .followup-records {
+ .table-view {
+ margin-top: 0 !important;
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/src/views/sales/subOrder/index.vue b/src/views/sales/subOrder/index.vue
index 54c3e39..44eff2f 100644
--- a/src/views/sales/subOrder/index.vue
+++ b/src/views/sales/subOrder/index.vue
@@ -15,7 +15,15 @@
<PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" />
</div>
</div>
- <TableCommonView ref="tableListRef" :show-summary="showSummary" :table-list="tableList" :select-box="!isDetail">
+ <TableCommonView
+ ref="tableListRef"
+ :show-summary="showSummary"
+ :table-list="tableList"
+ :select-box="!isDetail"
+ @selClientClick="selClientClick"
+ @selMasterClick="selMasterClick"
+ @selCommonClick="selCommonClick"
+ >
<template slot="tableButton">
<el-table-column label="鎿嶄綔" width="90">
<template slot-scope="scope">
@@ -27,6 +35,12 @@
</TableCommonView>
<!-- 鏂板缓/缂栬緫 -->
<AddSubOrderDialog v-if="editConfig.visible" :edit-common-config="editConfig" />
+ <!-- 閿�鍞瓙鍗曡鎯� -->
+ <DetailSubOrder v-if="subOrderDeail.visible" :sub-order-detail="subOrderDeail" />
+ <!-- 瀹㈡埛璇︽儏 -->
+ <DetailClientManage v-if="clientDeail.visible" :client-manage-detail="clientDeail" />
+ <!-- 閿�鍞�诲崟璇︽儏 -->
+ <DetailMasterOrder v-if="masterDeail.visible" :master-order-detail="masterDeail" />
</div>
</template>
@@ -34,6 +48,7 @@
import AddSubOrderDialog from "@/views/sales/subOrder/AddSubOrderDialog"
import { getSubOrderList, getDelSubOrder } from "@/api/sales/subOrder"
import pageMixin from "@/components/makepager/pager/mixin/pageMixin"
+import DetailSubOrder from "@/views/sales/subOrder/DetailSubOrder"
export default {
name: "SubOrder",
@@ -45,7 +60,10 @@
},
mixins: [pageMixin],
components: {
- AddSubOrderDialog
+ AddSubOrderDialog,
+ DetailSubOrder,
+ DetailMasterOrder: () => import("@/views/sales/masterOrder/DetailMasterOrder"),
+ DetailClientManage: () => import("@/views/client/client/DetailClientManage")
},
computed: {
searchCommonHeight() {
@@ -83,6 +101,18 @@
show: true,
sumProp: ["number"],
mergeNumber: 7
+ },
+ subOrderDeail: {
+ visible: false,
+ infomation: {}
+ },
+ masterDeail: {
+ visible: false,
+ infomation: {}
+ },
+ clientDeail: {
+ visible: false,
+ infomation: {}
}
}
},
@@ -95,9 +125,9 @@
this.tableList = {
tableInfomation: [],
tableColumn: [
- { label: "鍗曟嵁缂栧彿", prop: "number", min: 120 }, // 鍗曟嵁缂栧彿
- { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 120 }, // 瀹㈡埛鍚嶇О
- { label: "閿�鍞�诲崟", prop: "masterOrderId", min: 90 }, // 閿�鍞�诲崟
+ { label: "鍗曟嵁缂栧彿", prop: "number", min: 120, isCommonClick: true }, // 鍗曟嵁缂栧彿
+ { label: "瀹㈡埛鍚嶇О", prop: "client_name", min: 120, isClientClick: true }, // 瀹㈡埛鍚嶇О
+ { label: "閿�鍞�诲崟", prop: "masterOrderId", min: 90, isMasterClick: true }, // 閿�鍞�诲崟
{ label: "璐熻矗浜�", prop: "memberId" }, // 璐熻矗浜�
{ label: "瀹℃壒鐘舵��", prop: "approvalStatus" }, // 瀹℃壒鐘舵��
{ label: "浜у搧鍚嶇О", prop: "productName" }, // 浜у搧鍚嶇О
@@ -179,6 +209,24 @@
},
getSelectArray(val) {
console.log(val)
+ },
+ // 瀹㈡埛鍚嶇О璇︽儏
+ selClientClick(row) {
+ console.log(row)
+ this.clientDeail.visible = true
+ this.clientDeail.infomation = { ...row, client_name: row.name }
+ },
+ // 閿�鍞�诲崟璇︽儏
+ selMasterClick(row) {
+ console.log(row)
+ this.masterDeail.visible = true
+ this.masterDeail.infomation = { ...row, number: row.masterOrderId }
+ },
+ // 閿�鍞瓙鍗曡鎯�
+ selCommonClick(row) {
+ console.log(row)
+ this.subOrderDeail.visible = true
+ this.subOrderDeail.infomation = { ...row }
}
}
}
--
Gitblit v1.8.0