| | |
| | | <el-form-item label="客户名称" prop="name"> |
| | | <div class="custom-name"> |
| | | <el-input v-model="editConfig.infomation.name"></el-input> |
| | | <div class="common-select-btn"><i class="el-icon-house" title="工商查询"></i></div> |
| | | <!-- <div class="common-select-btn"><i class="el-icon-house" title="工商查询"></i></div> --> |
| | | <div class="common-select-btn"><i class="el-icon-search" title="查重"></i></div> |
| | | </div> |
| | | </el-form-item> |
| | |
| | | message: "请输入正确的手机号", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | contact_email: [ |
| | | { required: false, message: "", trigger: "blur" }, |
| | | { |
| | | pattern: /^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9-]+[\\.a-zA-Z]+$/, |
| | | message: "请输入正确的邮箱格式", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | }, |
| | | memberOptions: [], |
| | |
| | | <el-tab-pane label="销售总单" name="master"></el-tab-pane> |
| | | <el-tab-pane label="销售子单" name="sub"></el-tab-pane> |
| | | <el-tab-pane label="销售明细单" name="detail"></el-tab-pane> |
| | | <el-tab-pane label="收款单" name="plan"></el-tab-pane> |
| | | <el-tab-pane label="收款单" name="receipt"></el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | <div v-if="activeName === 'first'" class="detail"> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> |
| | |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div v-if="activeName === 'contact'" class="second"> |
| | | <Contacts :isDetail="true" /> |
| | | <Contacts :isDetail="true" :add-config="addContactsConfig" /> |
| | | </div> |
| | | <div v-if="activeName === 'second'" class="second"> |
| | | <FollowupRecords |
| | | :isDetail="true" |
| | | :follow-record="detailConfig.infomation.follow_record" |
| | | :add-config="addConfig" |
| | | /> |
| | | <FollowupRecords :isDetail="true" :add-config="addConfig" /> |
| | | </div> |
| | | <div v-if="activeName === 'salesOpportunity'" class="second"> |
| | | <SalesOpportunity :isDetail="true" /> |
| | | <SalesOpportunity :isDetail="true" :add-config="addContactsConfig" /> |
| | | </div> |
| | | <div v-if="activeName === 'quotation'" class="second"> |
| | | <Quotation :isDetail="true" /> |
| | | <Quotation :isDetail="true" :add-config="addContactsConfig" /> |
| | | </div> |
| | | <div v-if="activeName === 'master'" class="second"> |
| | | <MasterOrder :isDetail="true" /> |
| | | <MasterOrder :isDetail="true" :add-config="addContactsConfig" /> |
| | | </div> |
| | | <div v-if="activeName === 'sub'" class="second"> |
| | | <SubOrder :isDetail="true" /> |
| | | <SubOrder :isDetail="true" :add-config="addContactsConfig" /> |
| | | </div> |
| | | <div v-if="activeName === 'detail'" class="second"> |
| | | <SalesDetails :isDetail="true" /> |
| | | <SalesDetails :isDetail="true" :add-config="addContactsConfig" /> |
| | | </div> |
| | | </div> |
| | | </el-drawer> |
| | |
| | | addressInfoList: [], |
| | | isRemarkExpand: true, // 备注信息 |
| | | isAnnexExpand: true, // 附件信息 |
| | | addConfig: {} |
| | | addConfig: {}, |
| | | addContactsConfig: { |
| | | client_name: this.clientManageDetail.infomation.name |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | |
| | | leftStr: "客户状态", |
| | | leftValue: item.client_status, |
| | | rightStr: "销售负责人", |
| | | rightValue: item.member_id |
| | | rightValue: item.member.username |
| | | }, |
| | | { |
| | | leftStr: "客户类型", |
| | |
| | | this.addressInfoList = [ |
| | | { |
| | | leftStr: "国家", |
| | | leftValue: item.Country.name, |
| | | leftValue: "中国", |
| | | rightStr: "省份", |
| | | rightValue: item.Province.name |
| | | }, |
| | | { |
| | | leftStr: "城市", |
| | | leftValue: item.City.name, |
| | | rightStr: "区域", |
| | | rightValue: item.Region.name |
| | | rightStr: "", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | | leftStr: "详细地址", |
| | |
| | | <el-option v-for="item in countryOptions" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | <div class="common-select-btn"><i class="el-icon-setting"></i></div> |
| | | <!-- <div class="common-select-btn"><i class="el-icon-setting"></i></div> --> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | placeholder="请选择" |
| | | class="common-select-sel" |
| | | size="mini" |
| | | @change="selProvinceChange" |
| | | > |
| | | <el-option v-for="item in provinceOptions" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | <div class="common-select-btn"><i class="el-icon-setting"></i></div> |
| | | <!-- <div class="common-select-btn"><i class="el-icon-setting"></i></div> --> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | placeholder="请选择" |
| | | class="common-select-sel" |
| | | size="mini" |
| | | :disabled="cityOptions.length <= 0 ? true : false" |
| | | > |
| | | <el-option v-for="item in cityOptions" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | <div class="common-select-btn"><i class="el-icon-setting"></i></div> |
| | | <!-- <div class="common-select-btn"><i class="el-icon-setting"></i></div> --> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <!-- <el-col :span="12"> |
| | | <el-form-item label="区域" prop="region_id"> |
| | | <div class="common-select"> |
| | | <el-select |
| | |
| | | <div class="common-select-btn"><i class="el-icon-setting"></i></div> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-col> --> |
| | | <!-- <el-col :span="12"> |
| | | <el-form-item label="邮编" prop="postalCode"> |
| | | <el-input v-model="editConfig.infomation.postalCode"></el-input> |
| | |
| | | import { getAddContact, getUpdateContact } from "@/api/client/contacts" |
| | | import { getAllData } from "@/api/client/client" |
| | | import SelectClientDialog from "@/views/other/commonDialog/SelectClientDialog" |
| | | import { getCityList } from "@/api/common/address" |
| | | export default { |
| | | name: "AddContactsDialog", |
| | | props: { |
| | |
| | | message: "请输入正确的手机号", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | email: [ |
| | | { required: false, message: "", trigger: "blur" }, |
| | | { |
| | | pattern: /^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9-]+[\\.a-zA-Z]+$/, |
| | | message: "请输入正确的邮箱格式", |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | }, |
| | | businessSourceOptions: [ |
| | |
| | | { value: "8", label: "公司电话" } |
| | | ], |
| | | memberOptions: [], |
| | | countryOptions: [], // 国家 |
| | | countryOptions: [{ id: 1, name: "中国" }], // 国家 |
| | | provinceOptions: [], // 省份 |
| | | cityOptions: [], // 城市 |
| | | regionOptions: [], // 区域 |
| | |
| | | }, |
| | | created() { |
| | | this.$store.dispatch("geClient") |
| | | if (this.editConfig.title !== "新建" && this.editConfig.infomation.province_id !== 0) { |
| | | this.getCityList(this.editConfig.infomation.province_id, "edit") |
| | | } |
| | | this.getCommonData() |
| | | }, |
| | | methods: { |
| | | getCommonData() { |
| | | this.editConfig.infomation.country_id = 1 |
| | | this.editConfig.infomation.province_id = |
| | | this.editConfig.infomation.province_id === 0 ? "" : this.editConfig.infomation.province_id |
| | | this.editConfig.infomation.city_id = |
| | | this.editConfig.infomation.city_id === 0 ? "" : this.editConfig.infomation.city_id |
| | | getAllData() |
| | | .then((res) => { |
| | | console.log(res) |
| | | this.memberOptions = res.data.member |
| | | this.countryOptions = res.data.country |
| | | // this.countryOptions = res.data.country |
| | | this.provinceOptions = res.data.province |
| | | this.cityOptions = res.data.city |
| | | this.regionOptions = res.data.region |
| | | // this.cityOptions = res.data.city |
| | | // this.regionOptions = res.data.region |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err) |
| | |
| | | this.unflodCollapseStr = "收起" |
| | | this.isUnflod = true |
| | | } |
| | | }, |
| | | // 选择省份 |
| | | selProvinceChange(val) { |
| | | this.getCityList(val, "sel") |
| | | }, |
| | | async getCityList(val, value) { |
| | | await getCityList({ province_id: val }).then((res) => { |
| | | console.log(res) |
| | | if (res.data.code === 200) { |
| | | this.cityOptions = res.data.data.list |
| | | if (value === "sel") { |
| | | this.editConfig.infomation.city_id = "" |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> |
| | |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div v-if="activeName === 'second'" class="second"> |
| | | <FollowupRecords :isDetail="true" :add-config="addConfig" /> |
| | |
| | | leftStr: "职务", |
| | | leftValue: item.position, |
| | | rightStr: "销售负责人", |
| | | rightValue: item.member_id |
| | | rightValue: item.member.username |
| | | }, |
| | | { |
| | | leftStr: "首要联系人", |
| | |
| | | this.addressInfoList = [ |
| | | { |
| | | leftStr: "国家", |
| | | leftValue: item.Country.name, |
| | | leftValue: "中国", |
| | | rightStr: "省份", |
| | | rightValue: item.Province.name |
| | | }, |
| | | { |
| | | leftStr: "城市", |
| | | leftValue: item.City.name, |
| | | rightStr: "区域", |
| | | rightValue: item.Region.name |
| | | }, |
| | | { |
| | | leftStr: "邮编", |
| | | leftValue: "", |
| | | rightStr: "", |
| | | rightValue: "" |
| | | } |
| | |
| | | isDetail: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | addConfig: { |
| | | type: Object, |
| | | default: () => { |
| | | return {} |
| | | } |
| | | } |
| | | }, |
| | | mixins: [pageMixin], |
| | |
| | | }, |
| | | created() { |
| | | this.setTable() |
| | | this.getData() |
| | | if (!this.isDetail) { |
| | | this.search_map = {} |
| | | } else { |
| | | this.search_map = { ...this.addConfig } |
| | | } |
| | | this.getData(this.search_map) |
| | | }, |
| | | methods: { |
| | | setTable() { |
| | |
| | | { label: "联系人编号", prop: "number", min: 100 }, // 联系人编号 |
| | | { label: "职务", prop: "position", min: 120 }, // 职务 |
| | | { label: "手机", prop: "phone", min: 100 }, // 手机号码 |
| | | { label: "销售负责人", prop: "member_id", min: 120 }, // 销售负责人 |
| | | { label: "销售负责人", prop: "member_name", min: 120 }, // 销售负责人 |
| | | { label: "首要联系人", prop: "is_first", min: 90 } // 首要联系人 |
| | | ] |
| | | } |
| | |
| | | ...item, |
| | | client_name: item.Client.name, |
| | | is_first: item.is_first ? "是" : "否", |
| | | client_id: item.Client.id |
| | | client_id: item.Client.id, |
| | | member_name: item.member.username |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list || [] |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | followRecord: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | addConfig: { |
| | | type: Object, |
| | | default: () => { |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr && item.rightStr.length > 0" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr && item.rightStr.length > 0" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <li> |
| | | <div class="left remark"> |
| | | <div class="content-title">{{ "备注:" }}</div> |
| | | <div class="content-data">{{ detailConfig.desc }}</div> |
| | | <div class="content-data">{{ detailConfig.infomation.desc }}</div> |
| | | </div> |
| | | </li> |
| | | </ul> |
| | |
| | | }, |
| | | { |
| | | leftStr: "商机来源", |
| | | leftValue: this.detailConfig.infomation.sales_sources_id, |
| | | leftValue: this.detailConfig.infomation.sales_resources, |
| | | rightStr: "负责人", |
| | | rightValue: this.detailConfig.infomation.member_id |
| | | rightValue: this.detailConfig.infomation.member_name |
| | | }, |
| | | { |
| | | leftStr: "分配日期", |
| | |
| | | { label: "销售线索编号", prop: "number", min: 130 }, // 销售线索编号 |
| | | { label: "联系人姓名", prop: "contact_name", min: 130 }, // 联系人姓名 |
| | | { label: "手机号码", prop: "contact_phone", min: 130 }, // 手机号码 |
| | | { label: "商机来源", prop: "sales_sources_id", min: 130 }, // 商机来源 |
| | | { label: "商机来源", prop: "sales_resources", min: 130 }, // 商机来源 |
| | | { label: "省份", prop: "province", min: 130 }, // 省份 |
| | | { label: "城市", prop: "city", min: 130 }, // 城市 |
| | | { label: "负责人", prop: "member_id", min: 130 } // 负责人 |
| | | { label: "负责人", prop: "member_name", min: 130 } // 负责人 |
| | | ] |
| | | } |
| | | this.searchOptions = [] |
| | |
| | | return { |
| | | ...item, |
| | | province: item.Province.name, |
| | | city: item.City.name |
| | | city: item.City.name, |
| | | sales_resources: item.sales_sources.name, |
| | | member_name: item.member.username |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list || [] |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="服务开始时间" prop="start_time"> |
| | | <el-date-picker v-model="editConfig.infomation.start_time" type="date" placeholder="选择日期"> |
| | | <el-date-picker |
| | | v-model="editConfig.infomation.start_time" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | type="datetime" |
| | | placeholder="选择日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="服务截止时间" prop="end_time"> |
| | | <el-date-picker v-model="editConfig.infomation.end_time" type="date" placeholder="选择日期"> |
| | | <el-date-picker |
| | | v-model="editConfig.infomation.end_time" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | type="datetime" |
| | | placeholder="选择日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <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 class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-data">{{ item.rightValue }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> |
| | |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div v-if="activeName === 'sub'" class="second"> |
| | | <SubOrder :isDetail="true" /> |
| | |
| | | } |
| | | }, |
| | | created() { |
| | | this.setData() |
| | | this.setData(this.detailConfig.infomation) |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | setData() { |
| | | setData(item) { |
| | | this.basicInfoList = [ |
| | | { |
| | | leftStr: "客户名称", |
| | | leftValue: "", |
| | | leftValue: item.client_name, |
| | | rightStr: "单据编号", |
| | | rightValue: "" |
| | | rightValue: item.number |
| | | }, |
| | | { |
| | | leftStr: "负责人", |
| | | leftValue: "", |
| | | leftValue: item.member_name, |
| | | rightStr: "创建人", |
| | | rightValue: "" |
| | | }, |
| | |
| | | { |
| | | leftStr: "更新时间", |
| | | leftValue: "", |
| | | rightStr: "审批状态", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | | leftStr: "最新审批时间", |
| | | leftValue: "", |
| | | rightStr: "上一步审批人", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | | leftStr: "当前审批人", |
| | | leftValue: "", |
| | | rightStr: "服务开始时间", |
| | | rightValue: "" |
| | | rightValue: item.start_time |
| | | }, |
| | | // { |
| | | // leftStr: "审批状态", |
| | | // leftValue: "", |
| | | // rightStr: "最新审批时间", |
| | | // rightValue: "" |
| | | // }, |
| | | // { |
| | | // leftStr: "上一步审批人", |
| | | // leftValue: "", |
| | | // rightStr: "当前审批人", |
| | | // rightValue: "" |
| | | // }, |
| | | { |
| | | leftStr: "服务截止时间", |
| | | leftValue: "", |
| | | rightStr: "", |
| | | rightValue: "" |
| | | leftValue: item.end_time, |
| | | rightStr: "合同金额", |
| | | rightValue: item.money |
| | | } |
| | | ] |
| | | }, |
| | |
| | | :search-options="searchOptions" |
| | | @searchClick="searchClick" |
| | | @resetClick="resetClick" |
| | | :search-sel="searchSel" |
| | | /> |
| | | <div class="btn-pager"> |
| | | <PublicFunctionBtnView :operates-list="operatesList" @batchDelete="delClick" /> |
| | |
| | | isDetail: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | addConfig: { |
| | | type: Object, |
| | | default: () => { |
| | | return {} |
| | | } |
| | | } |
| | | }, |
| | | mixins: [pageMixin], |
| | |
| | | infomation: {} |
| | | }, |
| | | selValueList: [], |
| | | search_map: {} |
| | | search_map: {}, |
| | | searchSel: { |
| | | value: "number", |
| | | label: "单据编号" |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.setTable() |
| | | this.getData() |
| | | if (!this.isDetail) { |
| | | this.search_map = {} |
| | | } else { |
| | | this.search_map = { ...this.addConfig } |
| | | } |
| | | this.getData(this.search_map) |
| | | }, |
| | | methods: { |
| | | setTable() { |
| | |
| | | { label: "服务开始时间", prop: "start_time", isTime: true }, // 服务开始时间 |
| | | { label: "服务截止时间", prop: "end_time", isTime: true }, // 服务截止时间 |
| | | { label: "合同金额", prop: "money" }, // 合同金额 |
| | | { label: "负责人", prop: "member_id" } // 负责人 |
| | | { label: "负责人", prop: "member_name" } // 负责人 |
| | | // { label: "审批状态", prop: "approvalStatus" } // 审批状态 |
| | | ] |
| | | } |
| | | this.searchOptions = [] |
| | | for (let i = 0; i < this.tableList.tableColumn.length; i++) { |
| | | const label = this.tableList.tableColumn[i].label |
| | | this.searchOptions.push({ value: (i + 1).toString(), label: label }) |
| | | const value = this.tableList.tableColumn[i].prop |
| | | this.searchOptions.push({ value: value, label: label }) |
| | | } |
| | | }, |
| | | // 请求数据 |
| | |
| | | const list = res.data.list.map((item) => { |
| | | return { |
| | | ...item, |
| | | client_name: item.client.name |
| | | client_name: item.client.name, |
| | | member_name: item.member.username |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list || [] |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | selClientClick(row) { |
| | | console.log(row) |
| | | this.clientDeail.visible = true |
| | | this.clientDeail.infomation = { ...row } |
| | | this.clientDeail.infomation = { |
| | | ...row.client, |
| | | client_name: row.client.name, |
| | | client_level: row.client.client_level.name, |
| | | client_status: row.client.client_status.name, |
| | | contact_name: row.name |
| | | } |
| | | }, |
| | | // 机会名称详情 |
| | | selCommonClick(row) { |
| | |
| | | </el-option> |
| | | </el-select> |
| | | <!-- @click="editDropdownBox" --> |
| | | <div class="common-select-btn"><i class="el-icon-setting"></i></div> |
| | | <!-- <div class="common-select-btn"><i class="el-icon-setting"></i></div> --> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="销售机会" prop="sale_chance_id"> |
| | | <el-form-item label="销售机会" prop="sale_chance_name"> |
| | | <div class="custom-name"> |
| | | <el-input v-model="editConfig.infomation.sale_chance_id"></el-input> |
| | | <div class="common-select-btn"><i class="el-icon-circle-plus-outline" title="选择"></i></div> |
| | | <div class="common-select-btn"><i class="el-icon-edit" title="编辑"></i></div> |
| | | <el-autocomplete |
| | | v-model="editConfig.infomation.sale_chance_name" |
| | | :fetch-suggestions=" |
| | | (queryString, callback) => { |
| | | querySearchAsync(queryString, callback, 'chance') |
| | | } |
| | | " |
| | | value-key="name" |
| | | @select="handleSelectClient('chance', $event)" |
| | | ></el-autocomplete> |
| | | <div class="common-select-btn" @click="selClientClick('chance')"> |
| | | <i class="el-icon-circle-plus-outline"></i> |
| | | </div> |
| | | <div class="common-select-btn" @click="clearupClient('chance')"> |
| | | <i class="el-icon-edit-outline"></i> |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | :edit-common-config="editSelectContactConfig" |
| | | @selClient="selClient" |
| | | /> |
| | | <!-- 选择销售机会 --> |
| | | <SelectChanceDialog |
| | | v-if="editSelectChanceConfig.editVisible" |
| | | :edit-common-config="editSelectChanceConfig" |
| | | @selClient="selClient" |
| | | /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | |
| | | import { getAddQuotation, getUpdateQuotation } from "@/api/sales/quotation" |
| | | import SelectClientDialog from "@/views/other/commonDialog/SelectClientDialog" |
| | | import SelectContactDialog from "@/views/other/commonDialog/SelectContactDialog" |
| | | import SelectChanceDialog from "@/views/other/commonDialog/SelectChanceDialog" |
| | | export default { |
| | | name: "QuotationDialog", |
| | | props: { |
| | |
| | | } |
| | | } |
| | | }, |
| | | components: { SelectClientDialog, SelectContactDialog }, |
| | | components: { SelectClientDialog, SelectContactDialog, SelectChanceDialog }, |
| | | computed: { |
| | | searchCommonHeight() { |
| | | return this.$refs.searchCommonView.offsetHeight |
| | |
| | | }, |
| | | contactNamelist() { |
| | | return this.$store.state.getClientName.contactNamelist |
| | | }, |
| | | saleChancelist() { |
| | | return this.$store.state.getClientName.saleChancelist |
| | | } |
| | | }, |
| | | data() { |
| | |
| | | title: "", |
| | | infomation: {} |
| | | }, |
| | | editSelectChanceConfig: { |
| | | editVisible: false, |
| | | title: "", |
| | | infomation: {} |
| | | }, |
| | | clientId: this.editCommonConfig.infomation.client_id, |
| | | contactId: this.editCommonConfig.infomation.contact_id |
| | | contactId: this.editCommonConfig.infomation.contact_id, |
| | | saleChanceId: this.editCommonConfig.infomation.sale_chance_id |
| | | } |
| | | }, |
| | | created() { |
| | | this.$store.dispatch("geClient") |
| | | this.$store.dispatch("geContact") |
| | | this.$store.dispatch("geChance") |
| | | this.setTableForm() |
| | | this.getCommonData() |
| | | }, |
| | |
| | | .then((res) => { |
| | | this.memberOptions = res.data.member |
| | | this.quotationStatusOptions = res.data.quotationStatus |
| | | this.dataProcess() |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | dataProcess() { |
| | | this.saleChancelist.map((item) => { |
| | | if (this.saleChanceId === item.id) { |
| | | this.editConfig.infomation.sale_chance_name = item.name |
| | | } |
| | | }) |
| | | }, |
| | | // 保存 |
| | | saveClick(formName) { |
| | |
| | | let data = this.editConfig.infomation |
| | | let params = { |
| | | id: this.editConfig.title === "新建" ? 0 : data.id, |
| | | client_id: parseInt(this.clientId) || 0, |
| | | client_id: this.clientId || 0, |
| | | conditions: data.conditions || "", |
| | | contact_id: parseInt(this.contactId) || 0, |
| | | contact_id: this.contactId || 0, |
| | | file: data.file || "", |
| | | member_id: data.member_id || 0, |
| | | number: data.number || "", |
| | | quotation_status_id: data.quotation_status_id || 0, |
| | | sale_chance_id: data.sale_chance_id || 0, |
| | | sale_chance_id: this.saleChanceId || 0, |
| | | validity_date: data.validity_date || "" |
| | | } |
| | | return params |
| | |
| | | restaurants = this.clientList |
| | | } else if (value === "contact") { |
| | | restaurants = this.contactNamelist |
| | | } else if (value === "chance") { |
| | | restaurants = this.saleChancelist |
| | | } |
| | | var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants |
| | | cb(results) |
| | |
| | | console.log(value) |
| | | if (value === "client") { |
| | | this.clientId = item.id |
| | | } else if (value === "chance") { |
| | | this.saleChanceId = item.id |
| | | } else { |
| | | this.contactId = item.id |
| | | } |
| | |
| | | this.editSelectClientConfig.editVisible = true |
| | | } else if (value === "contact") { |
| | | this.editSelectContactConfig.editVisible = true |
| | | } else if (value === "chance") { |
| | | this.editSelectChanceConfig.editVisible = true |
| | | } |
| | | }, |
| | | selClient(row, value) { |
| | |
| | | if (value === "contact") { |
| | | this.editConfig.infomation.contact_name = row.name |
| | | this.contactId = row.id |
| | | } else if (value === "chance") { |
| | | this.editConfig.infomation.sale_chance_name = row.name |
| | | this.saleChanceId = row.id |
| | | } else { |
| | | this.editConfig.infomation.client_name = row.name |
| | | this.clientId = row.id |
| | |
| | | if (value === "client") { |
| | | this.editConfig.infomation.client_name = "" |
| | | this.clientId = 0 |
| | | } else if (value === "chance") { |
| | | this.editConfig.infomation.sale_chance_name = "" |
| | | this.saleChanceId = 0 |
| | | } else { |
| | | this.editConfig.infomation.contact_name = "" |
| | | this.contactId = 0 |
| | |
| | | </div> |
| | | <div v-if="activeName === 'first'" class="detail"> |
| | | <!-- 标签 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> --> |
| | | <!-- 基本信息 --> |
| | | <div class="basic-info"> |
| | | <div class="basic-info-label" @click="expandClick('basic')"> |
| | |
| | | <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 class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-data">{{ item.rightValue }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | | </ul> |
| | |
| | | <div class="termsConditions"> |
| | | <div class="content-title">{{ "条件与条款" + ":" }}</div> |
| | | <div class="content-termsConditions"> |
| | | <ul> |
| | | {{ "\n" + detailConfig.infomation.conditions }} |
| | | <!-- <ul> |
| | | <li v-for="(item, index) in Status.termsConditions" :key="index">{{ item }}</li> |
| | | </ul> |
| | | </ul> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> |
| | |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <!-- 产品管理 --> |
| | | <div class="basic-info"> |
| | | <div class="basic-info-label" @click="expandClick('product')"> |
| | |
| | | } |
| | | }, |
| | | created() { |
| | | this.setData() |
| | | this.setData(this.detailConfig.infomation) |
| | | this.setTableForm() |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | setData() { |
| | | setData(item) { |
| | | this.basicInfoList = [ |
| | | { |
| | | leftStr: "客户名称", |
| | | leftValue: "", |
| | | rightStr: "销售机会编号", |
| | | rightValue: "" |
| | | leftValue: item.client_name, |
| | | rightStr: "报价编号", |
| | | rightValue: item.number |
| | | }, |
| | | { |
| | | leftStr: "机会名称", |
| | | leftValue: "", |
| | | leftStr: "报价单状态", |
| | | leftValue: item.quotation_status_id, |
| | | rightStr: "联系人姓名", |
| | | rightValue: "" |
| | | rightValue: item.contact_name |
| | | }, |
| | | { |
| | | leftStr: "商机来源", |
| | | leftValue: "", |
| | | rightStr: "商机类型", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | | leftStr: "销售阶段", |
| | | leftValue: "", |
| | | leftStr: "有效期至", |
| | | leftValue: item.validity_date, |
| | | rightStr: "销售负责人", |
| | | rightValue: "" |
| | | rightValue: item.member_id |
| | | }, |
| | | { |
| | | leftStr: "老客户营销", |
| | | leftValue: "", |
| | | rightStr: "签到", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | | leftStr: "审批状态", |
| | | leftValue: "", |
| | | rightStr: "竞争对手", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | | leftStr: "创建人", |
| | | leftValue: "", |
| | | leftStr: "销售机会", |
| | | leftValue: item.sale_chance.name, |
| | | 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: "客户需求或痛点(why)", |
| | | leftValue: "" |
| | | }, |
| | | { |
| | | leftStr: "是否已经立项(plan)", |
| | | leftValue: "" |
| | | }, |
| | | { |
| | | leftStr: "资金预算是多少(plan)", |
| | | leftValue: "" |
| | | }, |
| | | { |
| | | leftStr: "关键决策人是谁(who)", |
| | | leftValue: "" |
| | | }, |
| | | { |
| | | leftStr: "关键决策因素有哪些(what)", |
| | | leftValue: "" |
| | | }, |
| | | { |
| | | leftStr: "决策流程是怎样的(what)", |
| | | leftValue: "" |
| | | }, |
| | | { |
| | | leftStr: "竞争对手提供的方案(what)", |
| | | leftValue: "" |
| | | } |
| | | ] |
| | | this.swotInfoList = [ |
| | | { |
| | | leftStr: "优势(S)", |
| | | leftValue: "", |
| | | rightStr: "劣势(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: "系统管理员" |
| | | } |
| | | ] |
| | | }, |
| | |
| | | align-items: center; |
| | | font-size: 14px; |
| | | font-family: PingFangSC; |
| | | min-height: 40px; |
| | | // padding: 5px 0; |
| | | .content-title { |
| | | width: 320px; |
| | |
| | | color: #555; |
| | | } |
| | | .content-termsConditions { |
| | | margin-left: 25px; |
| | | margin: 0px 25px 15px; |
| | | font-size: 13px; |
| | | color: #333; |
| | | li { |
| | | margin: 5px 0; |
| | | border-bottom: 0px solid #f9f9fb; |
| | | } |
| | | white-space: pre-wrap; |
| | | // li { |
| | | // margin: 5px 0; |
| | | // border-bottom: 0px solid #f9f9fb; |
| | | // } |
| | | } |
| | | } |
| | | } |
| | |
| | | :search-options="searchOptions" |
| | | @searchClick="searchClick" |
| | | @resetClick="resetClick" |
| | | :search-sel="searchSel" |
| | | /> |
| | | <div class="btn-pager"> |
| | | <PublicFunctionBtnView :submit-approval="true" :operates-list="operatesList" @batchDelete="delClick" /> |
| | |
| | | isDetail: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | addConfig: { |
| | | type: Object, |
| | | default: () => { |
| | | return {} |
| | | } |
| | | } |
| | | }, |
| | | mixins: [pageMixin], |
| | |
| | | DetailContacts: () => import("@/views/client/contacts/DetailContacts"), |
| | | DetailClientManage: () => import("@/views/client/client/DetailClientManage") |
| | | }, |
| | | computed: { |
| | | searchCommonHeight() { |
| | | return this.$refs.searchCommonView.offsetHeight |
| | | } |
| | | }, |
| | | computed: {}, |
| | | data() { |
| | | return { |
| | | tableList: {}, |
| | |
| | | infomation: {} |
| | | }, |
| | | selValueList: [], |
| | | search_map: {} |
| | | search_map: {}, |
| | | searchSel: { |
| | | value: "number", |
| | | label: "报价单号" |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.setTable() |
| | | this.getData() |
| | | if (!this.isDetail) { |
| | | this.search_map = {} |
| | | } else { |
| | | this.search_map = { ...this.addConfig } |
| | | } |
| | | this.getData(this.search_map) |
| | | }, |
| | | methods: { |
| | | setTable() { |
| | |
| | | { label: "报价单号", prop: "number", min: 90, isCommonClick: true }, // 报价单号 |
| | | { label: "客户名称", prop: "client_name", min: 120, isClientClick: true }, // 客户名称 |
| | | { label: "联系人姓名", prop: "contact_name", min: 90, isContactClick: true }, // 联系人姓名 |
| | | { label: "销售负责人", prop: "member_id" }, // 销售负责人 |
| | | { label: "销售负责人", prop: "member_name" }, // 销售负责人 |
| | | { label: "有效期", prop: "validity_date", min: 100 }, // 修改时间 |
| | | { label: "小计", prop: "subTotal" }, // 小计 |
| | | { label: "合计", prop: "total" }, // 合计 |
| | | { label: "产品名称", prop: "productName" }, // 产品名称 |
| | | { label: "数量", prop: "number" }, // 数量 |
| | | { label: "数量", prop: "number1" }, // 数量 |
| | | { label: "价税合计", prop: "priceTax" } // 价税合计 |
| | | ] |
| | | } |
| | | this.searchOptions = [] |
| | | for (let i = 0; i < this.tableList.tableColumn.length; i++) { |
| | | const label = this.tableList.tableColumn[i].label |
| | | this.searchOptions.push({ value: (i + 1).toString(), label: label }) |
| | | const value = this.tableList.tableColumn[i].prop |
| | | this.searchOptions.push({ value: value, label: label }) |
| | | } |
| | | }, |
| | | // 请求数据 |
| | |
| | | ...item, |
| | | client_name: item.client.name, |
| | | contact_name: item.contact.name |
| | | // member_name: item.member.username |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list || [] |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | isDetail: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | addConfig: { |
| | | type: Object, |
| | | default: () => { |
| | | return {} |
| | | } |
| | | } |
| | | }, |
| | | mixins: [pageMixin], |
| | |
| | | }, |
| | | created() { |
| | | this.setTable() |
| | | this.getData() |
| | | if (!this.isDetail) { |
| | | this.search_map = {} |
| | | } else { |
| | | this.search_map = { ...this.addConfig } |
| | | } |
| | | this.getData(this.search_map) |
| | | }, |
| | | methods: { |
| | | setTable() { |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | <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 class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-data">{{ item.rightValue }}</div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | | </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 class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-data">{{ item.rightValue }}</div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | | </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 class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-data">{{ item.rightValue }}</div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | | </ul> |
| | |
| | | <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 v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-title">{{ item.leftStr + ":" }}</div> |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <li> |
| | | <div class="left remark"> |
| | | <div class="content-title">{{ "备注:" }}</div> |
| | | <div class="content-data">{{ "备注内容" }}</div> |
| | | <div class="content-data">{{ detailConfig.infomation.remark }}</div> |
| | | </div> |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> |
| | |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <!-- 销售机会阶段推进历史 --> |
| | | <!-- <div class="basic-info"> |
| | | <div class="basic-info-label" @click="expandClick('history')"> |
| | |
| | | isDetail: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | addConfig: { |
| | | type: Object, |
| | | default: () => { |
| | | return {} |
| | | } |
| | | } |
| | | }, |
| | | mixins: [pageMixin], |
| | |
| | | DetailContacts: () => import("@/views/client/contacts/DetailContacts"), |
| | | DetailClientManage: () => import("@/views/client/client/DetailClientManage") |
| | | }, |
| | | computed: { |
| | | searchCommonHeight() { |
| | | return this.$refs.searchCommonView.offsetHeight |
| | | } |
| | | }, |
| | | computed: {}, |
| | | data() { |
| | | return { |
| | | tableList: {}, |
| | |
| | | }, |
| | | created() { |
| | | this.setTable() |
| | | this.getData() |
| | | if (!this.isDetail) { |
| | | this.search_map = {} |
| | | } else { |
| | | this.search_map = { ...this.addConfig } |
| | | } |
| | | this.getData(this.search_map) |
| | | }, |
| | | methods: { |
| | | setTable() { |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = { city_id: 0 } |
| | | this.editConfig.infomation = { city_id: 0, ...this.addConfig } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | </el-row> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info-title">附件信息</div> |
| | | <!-- <div class="basic-info-title">附件信息</div> |
| | | <div class="basic-info-view"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> --> |
| | | <!-- 产品管理 --> |
| | | <div class="basic-info-title" style="display: flex"> |
| | | 产品管理 |
| | |
| | | :search-options="searchOptions" |
| | | @searchClick="searchClick" |
| | | @resetClick="resetClick" |
| | | :search-sel="searchSel" |
| | | /> |
| | | <div class="btn-pager"> |
| | | <PublicFunctionBtnView :operates-list="operatesList" @batchDelete="delClick" /> |
| | |
| | | isDetail: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | addConfig: { |
| | | type: Object, |
| | | default: () => { |
| | | return {} |
| | | } |
| | | } |
| | | }, |
| | | mixins: [pageMixin], |
| | |
| | | }, |
| | | showSummary: { |
| | | show: true, |
| | | sumProp: ["number"], |
| | | mergeNumber: 7 |
| | | sumProp: ["number1"], |
| | | mergeNumber: 6 |
| | | }, |
| | | subOrderDeail: { |
| | | visible: false, |
| | |
| | | infomation: {} |
| | | }, |
| | | selValueList: [], |
| | | search_map: {} |
| | | search_map: {}, |
| | | searchSel: { |
| | | value: "number", |
| | | label: "单据编号" |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.setTable() |
| | | this.getData() |
| | | if (!this.isDetail) { |
| | | this.search_map = {} |
| | | } else { |
| | | this.search_map = { ...this.addConfig } |
| | | } |
| | | this.getData(this.search_map) |
| | | }, |
| | | methods: { |
| | | setTable() { |
| | |
| | | tableColumn: [ |
| | | { 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: "master_order_number", min: 90, isMasterClick: true }, // 销售总单 |
| | | { label: "负责人", prop: "member_name" }, // 负责人 |
| | | // { label: "审批状态", prop: "approvalStatus" }, // 审批状态 |
| | | { label: "产品名称", prop: "productName" }, // 产品名称 |
| | | { label: "数量", prop: "number1", min: 100 } // 数量 |
| | | ] |
| | |
| | | this.searchOptions = [] |
| | | for (let i = 0; i < this.tableList.tableColumn.length; i++) { |
| | | const label = this.tableList.tableColumn[i].label |
| | | this.searchOptions.push({ value: (i + 1).toString(), label: label }) |
| | | const value = this.tableList.tableColumn[i].prop |
| | | this.searchOptions.push({ value: value, label: label }) |
| | | } |
| | | }, |
| | | // 请求数据 |
| | |
| | | const list = res.data.list.map((item) => { |
| | | return { |
| | | ...item, |
| | | client_name: item.client.name |
| | | client_name: item.client.name, |
| | | master_order_number: item.masterOrder.number, |
| | | member_name: item.member.username |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list || [] |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { ...this.addConfig } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> |
| | |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <!-- 签字确认 --> |
| | | <div class="basic-info"> |
| | | <div class="basic-info-label" @click="expandClick('signConfim')"> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> |
| | |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <!-- 产品管理 --> |
| | | <div class="basic-info"> |
| | | <div class="basic-info-label" @click="expandClick('product')"> |
| | |
| | | align-items: center; |
| | | font-size: 14px; |
| | | font-family: PingFangSC; |
| | | min-height: 40px; |
| | | // padding: 5px 0; |
| | | .content-title { |
| | | width: 320px; |
| | |
| | | <div class="content-data">{{ item.leftValue ? item.leftValue : "--" }}</div> |
| | | </div> |
| | | <div v-if="item.rightStr" class="right"> |
| | | <div class="content-title">{{ item.rightStr }}</div> |
| | | <div class="content-title">{{ item.rightStr + ":" }}</div> |
| | | <div class="content-data">{{ item.rightValue ? item.rightValue : "--" }}</div> |
| | | </div> |
| | | </li> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- 附件信息 --> |
| | | <div class="basic-info"> |
| | | <!-- <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> |
| | |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div v-if="activeName === 'annex'" class="second"> |
| | | <!-- <SubOrder :isDetail="true" /> --> |