| | |
| | | import request from "@/common/untils/request.js" |
| | | // import request from "@/common/untils/request.js" |
| | | import axios from "axios" |
| | | |
| | | // 获取国家列表 |
| | | export function getCountryList() { |
| | | return request({ |
| | | url: "/api/country/list", |
| | | method: "get" |
| | | }) |
| | | } |
| | | // 添加国家 |
| | | export function getAddCountry(data) { |
| | | return request({ |
| | | url: "/api/country/add", |
| | | method: "post", |
| | | data |
| | | }) |
| | | } |
| | | // 删除国家 |
| | | export function getDeleteCountry(data) { |
| | | return request({ |
| | | url: "/api/country/delete", |
| | | method: "delete", |
| | | data |
| | | }) |
| | | } |
| | | // 设置国家 |
| | | export function getSetCountry(data) { |
| | | return request({ |
| | | url: "/api/country/set", |
| | | method: "put", |
| | | data |
| | | }) |
| | | } |
| | | // 更新国家 |
| | | export function getUpdateCountry(data) { |
| | | return request({ |
| | | url: "/api/country/update", |
| | | method: "put", |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 获取省份列表 |
| | | export function getProvinceList() { |
| | | return request({ |
| | | url: "/api/province/list", |
| | | method: "get" |
| | | }) |
| | | } |
| | | // 添加省份 |
| | | export function getAddProvince(data) { |
| | | return request({ |
| | | url: "/api/province/add", |
| | | method: "post", |
| | | data |
| | | }) |
| | | } |
| | | // 删除省份 |
| | | export function getDeleteProvince(data) { |
| | | return request({ |
| | | url: "/api/province/delete", |
| | | method: "delete", |
| | | data |
| | | }) |
| | | } |
| | | // 设置省份 |
| | | export function getSetProvince(data) { |
| | | return request({ |
| | | url: "/api/province/set", |
| | | method: "put", |
| | | data |
| | | }) |
| | | } |
| | | // 更新省份 |
| | | export function getUpdateProvince(data) { |
| | | return request({ |
| | | url: "/api/province/update", |
| | | method: "put", |
| | | data |
| | | // 获取城市列表 |
| | | export const getCityList = async (data) => { |
| | | return await axios.get(`/api/city/list`, { |
| | | params: data |
| | | }) |
| | | } |
| | |
| | | data |
| | | }) |
| | | } |
| | | |
| | | // 获取销售阶段 |
| | | export function getSaleStageList() { |
| | | return request({ |
| | | url: "/api/saleStage/list", |
| | | method: "get" |
| | | }) |
| | | } |
| | | |
| | | // 推进销售机会 |
| | | export function pushSaleChance(data) { |
| | | return request({ |
| | | url: "/api/saleChance/push", |
| | | method: "put", |
| | | data |
| | | }) |
| | | } |
| | |
| | | <template> |
| | | <div class="app-main"> |
| | | <AppHeader :headerTitle="$route.meta.title" /> |
| | | <router-view :key="key" /> |
| | | <div class="app-main-content"> |
| | | <router-view :key="key" /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | flex-direction: column; |
| | | // height: 100%; |
| | | width: 100%; |
| | | .app-main-content { |
| | | width: 100%; |
| | | overflow-y: auto; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | .app-sidebar { |
| | | position: relative; |
| | | height: 100%; |
| | | // height: 100%; |
| | | background-color: #314255; |
| | | .box { |
| | | width: 200px; |
| | |
| | | <el-option v-for="item in clientStatusOptions" :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-option v-for="item in clientTypeOptions" :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-option v-for="item in clientSourceOptions" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | <div class="common-select-btn" @click="editDropdownBox"> |
| | | <!-- <div class="common-select-btn" @click="editDropdownBox"> |
| | | <i class="el-icon-setting"></i> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-form-item label="下次回访日期" prop="next_visit_time"> |
| | | <el-date-picker |
| | | v-model="editConfig.infomation.next_visit_time" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | > |
| | | </el-date-picker> |
| | |
| | | <el-form-item label="最晚服务到期日" prop="latest_service_time"> |
| | | <el-date-picker |
| | | v-model="editConfig.infomation.latest_service_time" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | > |
| | | </el-date-picker> |
| | |
| | | <el-option v-for="item in industryOptions" :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-form-item label="注册时间" prop="registration_time"> |
| | | <el-date-picker |
| | | v-model="editConfig.infomation.registration_time" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | type="datetime" |
| | | placeholder="选择日期时间" |
| | | > |
| | |
| | | > |
| | | </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-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-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 |
| | | > |
| | | <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="24"> |
| | | <el-form-item label="详细地址" prop="detail_address"> |
| | | <el-input |
| | |
| | | |
| | | <script> |
| | | import { getAllData, getAddClient, getUpdateClient } from "@/api/client/client" |
| | | import { getCityList } from "@/api/common/address" |
| | | export default { |
| | | name: "AddClientManageDialog", |
| | | props: { |
| | |
| | | registerCapitalOptions: [], // 注册资金 |
| | | enterpriseNatureOptions: [], // 公司性质 |
| | | enterpriseScaleOptions: [], // 客户规模 |
| | | countryOptions: [], // 国家 |
| | | countryOptions: [{ id: 1, name: "中国" }], // 国家 |
| | | provinceOptions: [], // 省份 |
| | | cityOptions: [], // 城市 |
| | | regionOptions: [], // 区域 |
| | |
| | | } |
| | | }, |
| | | created() { |
| | | 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) => { |
| | | this.memberOptions = res.data.member |
| | |
| | | this.registerCapitalOptions = res.data.registered_capital |
| | | this.enterpriseNatureOptions = res.data.enterprise_nature |
| | | this.enterpriseScaleOptions = res.data.enterprise_scale |
| | | 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 |
| | | }) |
| | | .catch((err) => { |
| | |
| | | let params = { |
| | | id: this.editConfig.title === "新建" ? 0 : data.id, |
| | | business_scope: data.business_scope, |
| | | city_id: 0, |
| | | city_id: data.city_id || 0, |
| | | client_level_id: data.client_level_id || 0, |
| | | client_origin_id: data.client_origin_id || 0, |
| | | client_status_id: data.client_status_id || 0, |
| | |
| | | name: data.name || "", |
| | | next_visit_time: data.next_visit_time || "", |
| | | number: data.number || "", |
| | | province_id: 0, |
| | | province_id: data.province_id || 0, |
| | | region_id: 0, |
| | | registered_capital_id: data.registered_capital_id || 0, |
| | | registration_time: data.registration_time || "", |
| | |
| | | console.log("aaa") |
| | | this.editDropdownConfig.editVisible = true |
| | | this.editDropdownConfig.title = "客户来源" |
| | | }, |
| | | // 选择省份 |
| | | 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 = "" |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | |
| | | { label: "客户名称", prop: "name", min: 100, isClientClick: true }, // 客户名称 |
| | | { label: "销售负责人", prop: "member_name" }, // 销售负责人 |
| | | { label: "重要级别", prop: "client_level" }, // 重要级别 |
| | | { label: "下次回访日期", prop: "next_visit_time", isTime: true, min: 90 }, // 下次回访日期 |
| | | { label: "下次回访日期", prop: "next_visit_time", min: 90 }, // 下次回访日期 |
| | | { label: "详细地址", prop: "detail_address", min: 200 }, // 详细地址 |
| | | { label: "客户状态", prop: "client_status" }, // 客户状态 |
| | | { label: "联系人姓名", prop: "contact_name", isContactClick: true }, // 联系人姓名 |
| | | { label: "手机号码", prop: "contact_phone" } // 手机号码 |
| | | { label: "联系人手机号码", prop: "contact_phone" } // 手机号码 |
| | | ] |
| | | } |
| | | this.searchOptions = [] |
| | |
| | | contact_phone: contact_phone, |
| | | client_level: item.client_level.name, |
| | | client_status: item.client_status.name, |
| | | contact_id: contact_id |
| | | contact_id: contact_id, |
| | | member_name: item.member.username |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list || [] |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { city_id: 0 } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <div class="common-select-btn" @click="editDropdownBox"> |
| | | <!-- <div class="common-select-btn" @click="editDropdownBox"> |
| | | <i class="el-icon-setting"></i> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | placeholder="请选择" |
| | | class="common-select-sel" |
| | | size="mini" |
| | | disabled |
| | | > |
| | | <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-row> |
| | | <!-- <el-row> |
| | | <el-col :span="24"> |
| | |
| | | import EditDropdownDialog from "@/views/other/commonDialog/EditDropdownDialog" |
| | | import { getAddSalesLeads, getUpdateSalesLeads } from "@/api/client/salesLead" |
| | | import { getAllData } from "@/api/client/client" |
| | | import { getCityList } from "@/api/common/address" |
| | | |
| | | export default { |
| | | name: "AddSalesLeadDialog", |
| | |
| | | }, |
| | | businessSourceOptions: [], |
| | | memberOptions: [], |
| | | countryOptions: [], // 国家 |
| | | countryOptions: [{ id: 1, name: "中国" }], // 国家 |
| | | provinceOptions: [], // 省份 |
| | | cityOptions: [], // 城市 |
| | | regionOptions: [], // 区域 |
| | |
| | | } |
| | | }, |
| | | created() { |
| | | if (this.editConfig.title !== "新建" && this.editConfig.infomation.province_id !== 0) { |
| | | this.getCityList(this.editConfig.infomation.province_id, "edit") |
| | | } |
| | | this.getCommonData() |
| | | }, |
| | | mounted() {}, |
| | | 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.businessSourceOptions = res.data.sales_source |
| | | 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.memberOptions = res.data.member |
| | | }) |
| | |
| | | confirmPhone(value) { |
| | | const inputValue = value.replace(/[^\d*]/g, "") |
| | | this.editConfig.infomation.contact_phone = inputValue |
| | | }, |
| | | // 选择省份 |
| | | 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 = "" |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | |
| | | this.addressInfoList = [ |
| | | { |
| | | leftStr: "国家", |
| | | leftValue: "", |
| | | leftValue: "中国", |
| | | rightStr: "省份", |
| | | rightValue: "" |
| | | rightValue: this.detailConfig.infomation.Province.name |
| | | }, |
| | | { |
| | | leftStr: "城市", |
| | | leftValue: "", |
| | | rightStr: "区域", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | | leftStr: "地址", |
| | | leftValue: "", |
| | | leftValue: this.detailConfig.infomation.City.name, |
| | | rightStr: "", |
| | | rightValue: "" |
| | | } |
| | |
| | | this.isDynamicExpand = !this.isDynamicExpand |
| | | } else if (value === "address") { |
| | | this.isAddressExpand = !this.isAddressExpand |
| | | } else if (value === "remark") { |
| | | this.isRemarkExpand = !this.isRemarkExpand |
| | | } |
| | | } |
| | | } |
| | |
| | | addBtnClick() { |
| | | this.editSalesLeadConfig.visible = true |
| | | this.editSalesLeadConfig.title = "新建" |
| | | this.editSalesLeadConfig.infomation = { businessStatus: "新建" } |
| | | this.editSalesLeadConfig.infomation = { businessStatus: "新建", city_id: 0 } |
| | | }, |
| | | // 编辑 |
| | | handleClick(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-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-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-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-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-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="预计成交日期" prop="expected_time"> |
| | | <el-date-picker v-model="editConfig.infomation.expected_time" type="date" placeholder="选择日期"> |
| | | <el-date-picker |
| | | v-model="editConfig.infomation.expected_time" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="选择日期" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="预计合同金额" prop="projected_amount"> |
| | | <el-input v-model="editConfig.infomation.projected_amount"></el-input> |
| | | <el-input-number |
| | | v-model="editConfig.infomation.projected_amount" |
| | | placeholder="请输入" |
| | | :min="0" |
| | | :controls="false" |
| | | style="width: 100%; margin-right: 5px" |
| | | ></el-input-number> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | |
| | | </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> |
| | |
| | | placeholder="请选择" |
| | | class="common-select-sel" |
| | | size="mini" |
| | | disabled |
| | | > |
| | | <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="20"> |
| | | <el-form-item label="详细地址" prop="detail_address"> |
| | | <el-input |
| | |
| | | import { getAddSaleChance, getUpdateSaleChance } from "@/api/sales/salesOpportunity" |
| | | import SelectClientDialog from "@/views/other/commonDialog/SelectClientDialog" |
| | | import SelectContactDialog from "@/views/other/commonDialog/SelectContactDialog" |
| | | import { getCityList } from "@/api/common/address" |
| | | export default { |
| | | name: "AddSalesOpportunityDialog", |
| | | props: { |
| | |
| | | dialogWidth: "80%", |
| | | editConfig: this.editCommonConfig, |
| | | rules: { |
| | | number: [{ required: true, message: "请输入", trigger: "blur" }], |
| | | name: [{ required: true, message: "请选择", trigger: "change" }], |
| | | member_id: [{ required: true, message: "请选择", trigger: "change" }], |
| | | sale_stage_id: [{ required: true, message: "请选择", trigger: "change" }], |
| | | currency: [{ required: true, message: "请选择", trigger: "change" }], |
| | | expected_time: [{ required: true, message: "请选择", trigger: "change" }], |
| | | projected_amount: [{ required: true, message: "请选择", trigger: "change" }] |
| | | number: [{ required: true, message: "请输入销售机会编号", trigger: "blur" }], |
| | | name: [{ required: true, message: "请输入机会名称", trigger: "blur" }], |
| | | member_id: [{ required: true, message: "请选择销售负责人", trigger: "change" }], |
| | | sale_stage_id: [{ required: true, message: "请选择销售阶段", trigger: "change" }], |
| | | currency: [{ required: true, message: "请选择币种", trigger: "change" }], |
| | | expected_time: [{ required: true, message: "请选择预计成交日期", trigger: "change" }], |
| | | projected_amount: [{ required: true, message: "请输入预计合同金额", trigger: "blur" }] |
| | | }, |
| | | businessSourceOptions: [], |
| | | memberOptions: [], |
| | |
| | | saleStageOptions: [], // 销售阶段 |
| | | oldCustomerMarketOptions: [], // 老客户营销 |
| | | possibleOptions: [], // 可能性 |
| | | currencyOptions: [], // 币种 |
| | | currencyOptions: [{ id: 1, name: "人民币" }], // 币种 |
| | | currentStateOptions: [], // 当前状态 |
| | | countryOptions: [], // 国家 |
| | | countryOptions: [{ id: 1, name: "中国" }], // 国家 |
| | | provinceOptions: [], // 省份 |
| | | cityOptions: [], // 城市 |
| | | regionOptions: [], // 区域 |
| | |
| | | created() { |
| | | this.$store.dispatch("geClient") |
| | | this.$store.dispatch("geContact") |
| | | 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) => { |
| | | // 缺 可能性 币种 当前状态 |
| | | this.memberOptions = res.data.member |
| | | this.businessSourceOptions = res.data.sales_source |
| | | this.businessTypeOptions = res.data.sale_type |
| | | this.oldCustomerMarketOptions = res.data.regular_customers |
| | | this.saleStageOptions = res.data.sale_stage |
| | | this.countryOptions = res.data.country |
| | | this.provinceOptions = res.data.province |
| | | this.cityOptions = res.data.city |
| | | this.regionOptions = res.data.region |
| | | this.possibleOptions = res.data.possibility |
| | | this.currencyOptions = res.data.currency |
| | | // this.currencyOptions = res.data.currency |
| | | this.currentStateOptions = res.data.status |
| | | }) |
| | | .catch((err) => { |
| | |
| | | const params = this.saveParams() |
| | | console.log(params) |
| | | if (this.editConfig.title === "新建") { |
| | | getAddSaleChance(params) |
| | | .then((res) => { |
| | | console.log(res) |
| | | this.editConfig.visible = false |
| | | if (res.code === 200) { |
| | | this.$message({ |
| | | message: "添加成功", |
| | | type: "success" |
| | | }) |
| | | if (this.editConfig.title === "新建" && this.editConfig.infomation.client_name) { |
| | | this.$parent.handleClose() |
| | | } else { |
| | | this.$parent.getData() |
| | | } |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err) |
| | | }) |
| | | } else { |
| | | getUpdateSaleChance(params) |
| | | .then((res) => { |
| | | console.log(res) |
| | | this.editConfig.visible = false |
| | | if (res.code === 200) { |
| | | this.$message({ |
| | | message: "编辑成功", |
| | | type: "success" |
| | | }) |
| | | getAddSaleChance(params).then((res) => { |
| | | console.log(res) |
| | | this.editConfig.visible = false |
| | | if (res.code === 200) { |
| | | this.$message({ |
| | | message: "添加成功", |
| | | type: "success" |
| | | }) |
| | | if (this.editConfig.title === "新建" && this.editConfig.infomation.client_name) { |
| | | this.$parent.handleClose() |
| | | } else { |
| | | this.$parent.getData() |
| | | } |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err) |
| | | }) |
| | | } |
| | | }) |
| | | } else { |
| | | getUpdateSaleChance(params).then((res) => { |
| | | console.log(res) |
| | | this.editConfig.visible = false |
| | | if (res.code === 200) { |
| | | this.$message({ |
| | | message: "编辑成功", |
| | | type: "success" |
| | | }) |
| | | this.$parent.getData() |
| | | } |
| | | }) |
| | | } |
| | | } else { |
| | | console.log("error submit") |
| | |
| | | budget: data.budget || 0, |
| | | capital_budget: data.capital_budget || "", |
| | | city_id: data.city_id || 0, |
| | | client_id: parseInt(this.clientId), |
| | | client_id: this.clientId || 0, |
| | | competitors: data.competitors || "", |
| | | contact_id: parseInt(this.contactId), |
| | | contact_id: this.contactId || 0, |
| | | country_id: data.country_id || 0, |
| | | currency: data.currency || 0, |
| | | disadvantages: data.disadvantages || "", |
| | |
| | | pain_points: data.pain_points || "", |
| | | possibilities: data.possibilities || 0, |
| | | process: data.process || "", |
| | | projected_amount: parseInt(data.projected_amount) || 0, |
| | | projected_amount: data.projected_amount || 0, |
| | | province_id: data.province_id || 0, |
| | | region_id: data.region_id || 0, |
| | | regular_customers_id: data.regular_customers_id || 0, |
| | |
| | | // 添加附件 |
| | | addAnnexClick() {}, |
| | | // 设置允许上传文件格式 |
| | | setFormatClick() {} |
| | | setFormatClick() {}, |
| | | // 选择省份 |
| | | 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 = "" |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | height: 55px; |
| | | line-height: 55px; |
| | | } |
| | | .el-input__inner { |
| | | text-align: left; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <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 v-model="value1" size="mini" disabled> |
| | | <el-option v-for="(item, index) in options" :key="index" :label="item.name" :value="item.id"> |
| | | </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 v-model="value" size="mini" @change="designatedStageClick"> |
| | | <el-option v-for="(item, index) in options" :key="index" :label="item.name" :value="item.id"> |
| | | </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 type="primary" size="small" @click="saveClick()">推进</el-button> |
| | | <el-button size="small" @click="commonConfig.visible = false">取消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { pushSaleChance } from "@/api/sales/salesOpportunity" |
| | | export default { |
| | | name: "DetailAdvanceDialog", |
| | | props: { |
| | |
| | | default: () => { |
| | | return { |
| | | visible: false, |
| | | active: "需求分析" |
| | | active: "需求分析", |
| | | allOptions: [], |
| | | options: [], |
| | | id: 0 |
| | | } |
| | | } |
| | | } |
| | |
| | | computed: {}, |
| | | data() { |
| | | return { |
| | | allOptions: ["初期沟通", "需求分析", "方案报价", "商务谈判", "成功结案", "失败结案"], |
| | | allOptions: this.advanceConfig.allOptions, |
| | | dialogWidth: "25%", |
| | | radio: 1, |
| | | commonConfig: this.advanceConfig, |
| | | value1: "", |
| | | value: "", |
| | | options: ["初期沟通", "需求分析", "方案报价", "商务谈判", "成功结案", "失败结案"] |
| | | options: this.advanceConfig.options |
| | | } |
| | | }, |
| | | watch: {}, |
| | |
| | | }, |
| | | 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] |
| | | if (item.id === this.commonConfig.active) { |
| | | if (index + 1 === this.allOptions.length) { |
| | | this.value = this.allOptions[0].id |
| | | this.value1 = this.allOptions[0].id |
| | | } else { |
| | | this.value = this.allOptions[index + 1].id |
| | | this.value1 = this.allOptions[index + 1].id |
| | | } |
| | | |
| | | this.options.splice(index, 1) |
| | | } |
| | | }) |
| | | }, |
| | | handleClose() { |
| | | this.commonConfig.visible = false |
| | | }, |
| | | designatedStageClick() { |
| | | this.radio = 2 |
| | | }, |
| | | async saveClick() { |
| | | let stepId = 0 |
| | | if (this.radio === 2) { |
| | | stepId = this.value |
| | | } else { |
| | | stepId = this.value1 |
| | | } |
| | | await pushSaleChance({ |
| | | id: this.commonConfig.id, |
| | | step: stepId |
| | | }).then((res) => { |
| | | if (res.code === 200) { |
| | | this.handleClose() |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | |
| | | </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"> |
| | | <el-steps :active="sale_active" align-center> |
| | | <el-step :active-color="'#fff'" :title="item.name" :key="item.id" 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 class="step-label">{{ item.name }}</div> |
| | | <div v-show="sale_active === index" class="step-btn" @click="advanceClick(item)"> |
| | | <!-- && sale_stage_id !== stepsList.length --> |
| | | 推进 |
| | | </div> |
| | | <!-- <div class="step-desc">{{ item.desc }}</div> --> |
| | | </div> |
| | | </template> |
| | | </el-step> |
| | |
| | | <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 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-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('history')"> |
| | | <i v-if="isHistoryExpand" 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" /> |
| | |
| | | import SalesDetails from "@/views/sales/salesDetails" |
| | | import ServiceContract from "@/views/service/serviceContract" |
| | | import DetailAdvanceDialog from "@/views/sales/salesOpportunity/DetailAdvanceDialog" |
| | | import { getSaleStageList } from "@/api/sales/salesOpportunity" |
| | | export default { |
| | | name: "DetailClientManage", |
| | | props: { |
| | |
| | | detailConfig: this.opportunityDetail, |
| | | activeName: "first", |
| | | isSchduleExpand: true, // 进度追踪 |
| | | stepsList: [ |
| | | { title: "初期沟通", desc: "停留: 1月8天20小时" }, |
| | | { title: "需求分析", desc: "" }, |
| | | { title: "方案报价", desc: "" }, |
| | | { title: "商务谈判", desc: "" }, |
| | | { title: "成功结案", desc: "" }, |
| | | { title: "失败结案", desc: "" } |
| | | ], |
| | | stepsList: [], |
| | | isBasicExpand: true, // 基本信息展开 |
| | | basicInfoList: [], |
| | | isForecastExpand: true, // 销售预测 |
| | |
| | | isAnnexExpand: true, // 附件信息 |
| | | isHistoryExpand: true, // 推进历史 |
| | | historyList: [], |
| | | active: 2, |
| | | sale_active: 0, |
| | | advanceConfig: { |
| | | visible: false, |
| | | active: "" |
| | | active: "", |
| | | allOptions: [], |
| | | options: [] |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.setData() |
| | | this.getSaleStageList() |
| | | this.setData(this.detailConfig.infomation) |
| | | }, |
| | | mounted() {}, |
| | | methods: { |
| | | setData() { |
| | | async getSaleStageList() { |
| | | await getSaleStageList().then((res) => { |
| | | this.stepsList = res.data.list |
| | | res.data.list.map((item, index) => { |
| | | if (item.id === this.detailConfig.infomation.sale_stage_id) { |
| | | this.sale_active = index |
| | | } |
| | | }) |
| | | }) |
| | | }, |
| | | setData(item) { |
| | | this.basicInfoList = [ |
| | | { |
| | | leftStr: "客户名称", |
| | | leftValue: "", |
| | | leftValue: item.client_name, |
| | | rightStr: "销售机会编号", |
| | | rightValue: "" |
| | | rightValue: item.id |
| | | }, |
| | | { |
| | | leftStr: "机会名称", |
| | | leftValue: "", |
| | | leftValue: item.name, |
| | | rightStr: "联系人姓名", |
| | | rightValue: "" |
| | | rightValue: item.contact_name |
| | | }, |
| | | { |
| | | leftStr: "商机来源", |
| | | leftValue: "", |
| | | leftValue: item.SalesSources.name, |
| | | rightStr: "商机类型", |
| | | rightValue: "" |
| | | rightValue: "" // item.SaleType.name |
| | | }, |
| | | { |
| | | leftStr: "销售阶段", |
| | | leftValue: "", |
| | | leftValue: item.sale_stage_name, |
| | | rightStr: "销售负责人", |
| | | rightValue: "" |
| | | rightValue: item.member.username |
| | | }, |
| | | { |
| | | leftStr: "老客户营销", |
| | | leftValue: "", |
| | | leftValue: item.regular_customers_id, |
| | | rightStr: "签到", |
| | | rightValue: "" |
| | | }, |
| | |
| | | this.forecastList = [ |
| | | { |
| | | leftStr: "可能性(%)", |
| | | leftValue: "", |
| | | leftValue: item.possibility.name, |
| | | rightStr: "币种", |
| | | rightValue: "" |
| | | rightValue: "人民币" |
| | | }, |
| | | { |
| | | leftStr: "预算绝对值", |
| | | leftValue: "", |
| | | leftValue: item.capital_budget, |
| | | rightStr: "预计成交日期", |
| | | rightValue: "" |
| | | rightValue: item.expected_time |
| | | }, |
| | | { |
| | | leftStr: "预计合同金额", |
| | | leftValue: "", |
| | | leftValue: item.projected_amount, |
| | | rightStr: "当前状态", |
| | | rightValue: "" |
| | | rightValue: item.status_id |
| | | } |
| | | ] |
| | | this.dynamicInfoList = [ |
| | |
| | | this.businessInfoList = [ |
| | | { |
| | | leftStr: "客户需求或痛点(why)", |
| | | leftValue: "" |
| | | leftValue: item.pain_points |
| | | }, |
| | | { |
| | | leftStr: "是否已经立项(plan)", |
| | | leftValue: "" |
| | | leftValue: item.whether_established |
| | | }, |
| | | { |
| | | leftStr: "资金预算是多少(plan)", |
| | | leftValue: "" |
| | | leftValue: item.capital_budget |
| | | }, |
| | | { |
| | | leftStr: "关键决策人是谁(who)", |
| | | leftValue: "" |
| | | leftValue: item.key_maker |
| | | }, |
| | | { |
| | | leftStr: "关键决策因素有哪些(what)", |
| | | leftValue: "" |
| | | leftValue: item.key_factors |
| | | }, |
| | | { |
| | | leftStr: "决策流程是怎样的(what)", |
| | | leftValue: "" |
| | | leftValue: item.process |
| | | }, |
| | | { |
| | | leftStr: "竞争对手提供的方案(what)", |
| | | leftValue: "" |
| | | leftValue: item.solutions |
| | | } |
| | | ] |
| | | this.swotInfoList = [ |
| | | { |
| | | leftStr: "优势(S)", |
| | | leftValue: "", |
| | | leftValue: item.advantages, |
| | | rightStr: "劣势(W)", |
| | | rightValue: "" |
| | | rightValue: item.disadvantages |
| | | }, |
| | | { |
| | | leftStr: "机会(O)", |
| | | leftValue: "", |
| | | leftValue: item.opportunities, |
| | | rightStr: "威胁(T)", |
| | | rightValue: "" |
| | | rightValue: item.threats |
| | | } |
| | | ] |
| | | this.addressInfoList = [ |
| | | { |
| | | leftStr: "国家", |
| | | leftValue: "", |
| | | leftValue: "中国", |
| | | rightStr: "省份", |
| | | rightValue: "" |
| | | rightValue: item.Province.name |
| | | }, |
| | | { |
| | | leftStr: "城市", |
| | | leftValue: "", |
| | | rightStr: "区域", |
| | | leftValue: item.City.name, |
| | | rightStr: "", |
| | | rightValue: "" |
| | | }, |
| | | { |
| | |
| | | }, |
| | | handleClose() { |
| | | this.detailConfig.visible = false |
| | | this.$parent.getData() |
| | | }, |
| | | // tab切换 |
| | | tabsClick(tab, event) { |
| | |
| | | }, |
| | | // 推进 |
| | | advanceClick(item) { |
| | | console.log(item) |
| | | this.advanceConfig.visible = true |
| | | this.advanceConfig.active = item.title |
| | | let options = [] |
| | | for (let i = 0; i < this.stepsList.length; i++) { |
| | | options.push(this.stepsList[i]) |
| | | } |
| | | this.advanceConfig = { |
| | | visible: true, |
| | | active: item.id, |
| | | allOptions: this.stepsList, |
| | | options: options, |
| | | id: this.detailConfig.infomation.id |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | .step-view { |
| | | padding: 30px 60px 5px; |
| | | height: 100px; |
| | | height: 80px; |
| | | .step-title-view { |
| | | margin-top: 10px; |
| | | font-size: 12px; |
| | |
| | | { label: "客户名称", prop: "client_name", min: 90, isClientClick: true }, // 客户名称 |
| | | { label: "销售机会编号", prop: "number" }, // 销售机会编号 |
| | | { label: "联系人姓名", prop: "contact_name", min: 100, isContactClick: true }, // 联系人姓名 |
| | | { label: "销售阶段", prop: "sale_stage" }, // 销售阶段 |
| | | { label: "销售阶段", prop: "sale_stage_name" }, // 销售阶段 |
| | | { label: "可能性(%)", prop: "possibilities" }, // 可能性 |
| | | { label: "预计成交日期", prop: "expected_time", isTime: true, min: 130 }, // 预计成交日期 |
| | | { label: "预计合同金额", prop: "projected_amount" }, // 预计合同金额 |
| | |
| | | return { |
| | | ...item, |
| | | client_name: item.client.name, |
| | | contact_name: item.contact.name |
| | | contact_name: item.contact.name, |
| | | sale_stage_name: item.sale_stage.name |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list || [] |
| | |
| | | addBtnClick() { |
| | | this.editConfig.visible = true |
| | | this.editConfig.title = "新建" |
| | | this.editConfig.infomation = {} |
| | | this.editConfig.infomation = { city_id: 0 } |
| | | }, |
| | | // 编辑 |
| | | handleClick(row) { |
| | |
| | | }, |
| | | // 删除 |
| | | delClick() { |
| | | // this.$confirm("是否确认删除?", "警告", { |
| | | // confirmButtonText: "确定", |
| | | // cancelButtonText: "取消", |
| | | // type: "warning" |
| | | // }) |
| | | // .then(function () { |
| | | // return getDelSaleChance({ id: id }) |
| | | // }) |
| | | // .then((response) => { |
| | | // if (response.code === 200) { |
| | | // this.$message.success("删除成功") |
| | | // this.getData() |
| | | // } else { |
| | | // this.$message.warning("删除失败") |
| | | // } |
| | | // }) |
| | | // .catch(function () {}) |
| | | |
| | | if (this.selValueList && this.selValueList.length > 0) { |
| | | this.$confirm("是否确认删除?", "警告", { |
| | | confirmButtonText: "确定", |
| | |
| | | <el-form-item label="服务合同"> |
| | | <div class="custom-name"> |
| | | <el-autocomplete |
| | | v-model="editConfig.infomation.service_number" |
| | | v-model="editConfig.infomation.serviceContract_Number" |
| | | :fetch-suggestions=" |
| | | (queryString, callback) => { |
| | | querySearchAsync(queryString, callback, 'serviceContract') |
| | |
| | | <el-option v-for="item in faultTypeOptions" :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-option v-for="item in serviceTypeOptions" :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-option v-for="item in severityOptions" :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-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-option v-for="item in statusOptions" :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-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="希望处理时间" prop="expectTime"> |
| | | <el-date-picker v-model="editConfig.infomation.expectTime" type="datetime" placeholder="选择时间"> |
| | | <el-date-picker |
| | | v-model="editConfig.infomation.expectTime" |
| | | 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="realTime"> |
| | | <el-date-picker v-model="editConfig.infomation.startTime" type="realTime" placeholder="选择时间"> |
| | | <el-date-picker |
| | | v-model="editConfig.infomation.startTime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | type="realTime" |
| | | placeholder="选择时间" |
| | | > |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-option v-for="item in timeSpentOptions" :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> |
| | |
| | | }, |
| | | { |
| | | leftStr: "服务合同", |
| | | leftValue: data.Contract.number, |
| | | leftValue: data.ServiceContract.number, |
| | | rightStr: "故障类别", |
| | | rightValue: data.FaultType.name |
| | | }, |
| | |
| | | leftStr: "主题", |
| | | leftValue: data.subject, |
| | | rightStr: "合同订单", |
| | | rightValue: data.OrderManage.number |
| | | rightValue: data.SalesDetails.number |
| | | }, |
| | | { |
| | | leftStr: "产品类别", |
| | |
| | | keyword: keyword, |
| | | keywordType: keywordType, |
| | | page: this.pagerOptions.currPage, |
| | | pageSize: this.pagerOptions.pageSize |
| | | pageSize: this.pagerOptions.pageSize, |
| | | salesDetailsId: 0, |
| | | serviceContractId: 0 |
| | | }) |
| | | .then((res) => { |
| | | console.log(res) |
| | |
| | | ...item, |
| | | client_name: item.Client.name, |
| | | serviceType_name: item.ServiceType.name, |
| | | faultType_name: item.FaultType.name |
| | | faultType_name: item.FaultType.name, |
| | | serviceContract_Number: item.ServiceContract.number |
| | | } |
| | | }) |
| | | this.tableList.tableInfomation = list || [] |
| | |
| | | <el-option v-for="item in contractTypeOptions" :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-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-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"> |
| | | 产品管理 |
| | |
| | | <el-option v-for="item in satisfactionOptions" :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-option v-for="item in timelyRateOptions" :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-option v-for="item in solveRateOptions" :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-option v-for="item in isVisitOptions" :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-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> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |