editClue.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. <template>
  2. <div>
  3. <el-button type="text" :disabled="!rowData.disabled || data.allocationstatus === '已分配' || rowData.status === '结束'" size="mini" @click="editBtn">编 辑</el-button>
  4. <el-drawer
  5. title="编辑线索"
  6. :visible.sync="drawer"
  7. :show-close="false"
  8. size="700px"
  9. direction="rtl"
  10. append-to-body
  11. @close="onClose">
  12. <div class="drawer__panel">
  13. <el-row :gutter="10">
  14. <el-form :model="form" :rules="rules" ref="form" label-width="120px" label-position="right" size="mini">
  15. <el-col :span="20">
  16. <el-form-item label="客户名称" prop="enterprisename">
  17. <el-input v-model="form.enterprisename" placeholder="请输入客户名称"></el-input>
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="4">
  21. <businessInquiry ref="businessRef" :keyword="form.enterprisename"
  22. @businessData="businessSelect"></businessInquiry>
  23. </el-col>
  24. <el-col :span="24">
  25. <el-form-item label="联系人" prop="name">
  26. <contactsNewTemplate ownertable="" ownerid="" @contactData="contactData" :name="form.name" @inputChange="inputChange"></contactsNewTemplate>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="24">
  30. <el-form-item>
  31. <el-radio v-model="form.isTelephone" label="0" >手机号</el-radio>
  32. <el-radio v-model="form.isTelephone" label="1">座机电话</el-radio>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="24" v-if="form.isTelephone == '1'">
  36. <el-form-item label="联系方式:" prop="telephone" >
  37. <el-input v-model="form.areaCode" style="width: 25%" autocomplete="on" placeholder="请填写区号"></el-input>
  38. <span style="color: #999999">——</span>
  39. <el-input v-model="form.telephone" style="width: 68%" autocomplete="on" placeholder="请填写座机电话"></el-input>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="24" >
  43. <el-form-item v-if="form.isTelephone == '0'" label="联系方式:" prop="phonenumber" :rules="[
  44. { required: true, message: '手机号码不能为空'},
  45. { pattern:/^1[3-9][0-9]\d{8}$/, message: '请输入正确手机号码',trigger: 'change' }
  46. ]">
  47. <el-input v-model="form.phonenumber" autocomplete="on" placeholder="请填写手机号码"></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="24">
  51. <el-form-item label="微信:" prop="wechatnum">
  52. <el-input v-model="form.wechatnum" placeholder="请填写微信"></el-input>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="24">
  56. <el-form-item label="省市县" prop="province">
  57. <el-cascader
  58. style="width:100%"
  59. class="width-240"
  60. v-model="form.province"
  61. :options="basicData.data().areaData"
  62. @change="cascaderChange">
  63. </el-cascader>
  64. </el-form-item>
  65. </el-col>
  66. <el-col :span="24">
  67. <el-form-item label="地址" prop="address">
  68. <el-input v-model="form.address" placeholder="请输入地址"></el-input>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="24">
  72. <el-form-item label="项目名称:" prop="projectname">
  73. <el-input v-model="form.projectname" placeholder="请填写项目名称"></el-input>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="20">
  77. <el-form-item label="项目规模:" prop="scale" >
  78. <el-input v-model="form.scale" placeholder="请填写数值" class="inline-16"></el-input>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :span="4">
  82. <el-select v-model="form.unitname" placeholder="请选择单位" size="mini" >
  83. <el-option
  84. v-for="item in unitnameList"
  85. :key="item.value"
  86. :label="item.value"
  87. :value="item.value">
  88. </el-option>
  89. </el-select>
  90. </el-col>
  91. <el-col :span="24" v-if="siteid !== 'HY'">
  92. <el-form-item label="总投资额(万元):" prop="totalinvestment">
  93. <el-input v-model="form.totalinvestment" placeholder="请填写金额(万元)"></el-input>
  94. </el-form-item>
  95. </el-col>
  96. <el-col :span="24" v-if="siteid !== 'HY'">
  97. <el-form-item label="造价(万元):" prop="costofconstruction">
  98. <el-input v-model="form.costofconstruction" placeholder="请填写金额(万元)"></el-input>
  99. </el-form-item>
  100. </el-col>
  101. <el-col :span="24">
  102. <el-form-item label="预计开工时间:" prop="begdate_due">
  103. <el-date-picker
  104. style="width: 100%"
  105. v-model="form.begdate_due"
  106. type="month"
  107. placeholder="选择月"
  108. :picker-options="pickerOptions"
  109. >
  110. </el-date-picker>
  111. </el-form-item>
  112. </el-col>
  113. <el-col :span="24">
  114. <el-form-item label="预计完工时间:" prop="enddate_due">
  115. <el-date-picker
  116. style="width: 100%"
  117. v-model="form.enddate_due"
  118. type="month"
  119. placeholder="选择月"
  120. :picker-options="pickerOptions"
  121. >
  122. </el-date-picker>
  123. </el-form-item>
  124. </el-col>
  125. <el-col :span="24">
  126. <el-form-item label="市场活动" prop="campaign_name">
  127. <el-input disabled type="text" size="small" v-model="form.campaign_name"></el-input>
  128. </el-form-item>
  129. </el-col>
  130. <el-col :span="24">
  131. <el-form-item label="领域:" prop="tradefield">
  132. <el-select v-model="form.tradefield" placeholder="请选择领域" style="width: 100%">
  133. <el-option
  134. v-for="item in tradefieldSelect"
  135. :key="item.value"
  136. :label="item.label"
  137. :value="item.value">
  138. </el-option>
  139. </el-select>
  140. </el-form-item>
  141. </el-col>
  142. <el-col :span="24">
  143. <el-form-item label="来源" prop="cluesource">
  144. <selectTemp ref="sourceRef" placeholder="请选择来源" payload="cluesource" @selectChange="selectSource" :cluesource="form.cluesource"></selectTemp>
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="24">
  148. <el-form-item label="线索概况" prop="notes">
  149. <el-input v-model="form.notes" placeholder="请输入备注"></el-input>
  150. </el-form-item>
  151. </el-col>
  152. </el-form>
  153. </el-row>
  154. </div>
  155. <div class="fixed__btn__panel">
  156. <el-button size="small" @click="onClose" class="normal-btn-width">取 消</el-button>
  157. <el-button size="small" type="primary" @click="add" class="normal-btn-width">确 定</el-button>
  158. </div>
  159. </el-drawer>
  160. </div>
  161. </template>
  162. <script>
  163. import selectActivity from '@/SManagement/orderclue/components/selectActivity/selectActivity'
  164. import businessMessage from '@/components/businessMessage/index'
  165. import contactsTemplate from '@/template/contactsTemplate/index'
  166. import contactsNewTemplate from '@/template/contactsNewTemplate/index'
  167. import businessInquiry from '@/template/businessInquiry/index'
  168. export default {
  169. components: {selectActivity, businessMessage, contactsTemplate, contactsNewTemplate, businessInquiry},
  170. data() {
  171. var telephone = (rule, value, callback) => {
  172. if (this.form.areaCode === '' && this.form.telephone === '') {
  173. callback(new Error('座机电话不能为空'))
  174. } else {
  175. var reg = /^0\d{2,3}-\d{7,8}$/;
  176. let telephone = this.form.areaCode + '-' + this.form.telephone
  177. if (!reg.test(telephone)) {
  178. callback(new Error('请输入正确座机电话'))
  179. } else {
  180. callback();
  181. }
  182. }
  183. }
  184. var begdateTime = (rule,value,callback) =>{
  185. this.$refs.form.validateField('enddate_due')
  186. if (this.form.enddate_due !== ''){
  187. if (value > this.form.enddate_due){
  188. callback(new Error('预计开工时间不能晚于预计完工时间'))
  189. }else {
  190. callback();
  191. }
  192. } else {
  193. callback();
  194. }
  195. }
  196. var enddateTime = (rule,value,callback) =>{
  197. if (value && this.form.begdate_due !== ''){
  198. if (value < this.form.begdate_due){
  199. callback(new Error('预计完工时间不能早于预计开工时间'))
  200. }else {
  201. callback();
  202. }
  203. } else if (value && this.form.begdate_due === '') {
  204. callback(new Error('预计完工时间不能早于预计开工时间'))
  205. }else {
  206. callback();
  207. }
  208. }
  209. return {
  210. pickerOptions: {
  211. disabledDate(time) {
  212. return time.getTime() < Date.now();
  213. }
  214. },
  215. drawer:false,
  216. activityVisible:false,
  217. form:{
  218. "sat_orderclueid": 0,
  219. "enterprisename":"",
  220. "name": "",
  221. "phonenumber": "",
  222. "province": "",
  223. "city": "",
  224. "county": "",
  225. "address": "",
  226. "notes": "",
  227. "cluesource": "",
  228. "sat_campaignid":0,//活动id,当活动id大于0是默认业务员创建
  229. "isprivate":0,//0表示公海,1表示私域
  230. "tradefield":"",
  231. "unitname":'',
  232. "areaCode":'',
  233. "telephone":'',
  234. "isTelephone":'0',
  235. "campaign_name":''
  236. },
  237. unitnameList:[],
  238. rules:{
  239. phonenumber:[
  240. { pattern:/^1[3-9]\d{9}$/, message: '请输入正确手机号码',trigger: 'change' },
  241. { required: true, message: '请输入手机号', trigger: 'blur' },
  242. ],
  243. begdate_due:[
  244. { required: false, validator: begdateTime, trigger: 'change' }
  245. ],
  246. name:[
  247. { required: true, message: '请输入联系人', trigger: 'blur'}
  248. ],
  249. enddate_due:[
  250. { required: false, validator: enddateTime, trigger: 'change' }
  251. ],
  252. tradefield:[
  253. { required: true, message: '请选择领域', trigger: 'change'}
  254. ],
  255. scale:[
  256. {required: false,pattern:/^\d+(.\d{1,2})?$/, message: '请输入数字值', trigger: 'blur'}
  257. ],
  258. totalinvestment:[
  259. {required: false,pattern:/^\d+(.\d{1,2})?$/, message: '请输入数字值', trigger: 'blur'}
  260. ],
  261. costofconstruction:[
  262. {required: false,pattern:/^\d+(.\d{1,2})?$/, message: '请输入数字值', trigger: 'blur'}
  263. ],
  264. telephone:[
  265. { required: true, validator: telephone, trigger: 'change' }
  266. ],
  267. cluesource:[
  268. { required: true, message: '请选择来源', trigger: 'change'}
  269. ],
  270. campaign_name:[
  271. { required: true, message: '请选择市场活动', trigger: 'change'}
  272. ],
  273. },
  274. options:[],
  275. tradefieldSelect:[],
  276. siteid:''
  277. }
  278. },
  279. props:['data','disabled','rowData'],
  280. methods:{
  281. editBtn () {
  282. this.drawer = true
  283. this.siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
  284. this.form = Object.assign({},this.form,this.data)
  285. this.form.enterprisename = this.data.enterprisename_customer
  286. this.form.province = [this.form.province,this.form.city,this.form.county]
  287. this.form.sat_campaignid = this.$route.query.id
  288. console.log(this.form.cluesource,'dddd')
  289. this.form.totalinvestment !== 0 ? this.form.totalinvestment = this.tool.formatAmount(this.form.totalinvestment,2): this.form.totalinvestment =''
  290. this.form.costofconstruction !== 0 ? this.form.costofconstruction = this.tool.formatAmount(this.form.costofconstruction,2): this.form.costofconstruction =''
  291. if ((this.form.phonenumber.indexOf('-')) != '-1'){
  292. this.form.isTelephone = '1'
  293. this.form.areaCode = this.data.phonenumber.substring(0,this.form.phonenumber.indexOf('-'))
  294. this.form.telephone = this.data.phonenumber.substring(this.form.areaCode.length+1)
  295. this.form.phonenumber = ''
  296. }else {
  297. this.form.isTelephone = '0'
  298. this.form.areaCode = ''
  299. this.form.telephone = ''
  300. }
  301. this.queryTradefield()
  302. this.queryUnitname()
  303. },
  304. add () {
  305. if (this.form.begdate_due !== ''){
  306. const data = new Date(this.form.begdate_due)
  307. if (data.getMonth() +1 < 10){
  308. this.form.begdate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
  309. }else {
  310. this.form.begdate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
  311. }
  312. }else {
  313. this.form.begdate_due = ''
  314. }
  315. if (this.form.enddate_due !== ''){
  316. const data = new Date(this.form.enddate_due)
  317. if (data.getMonth() +1 < 10){
  318. this.form.enddate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
  319. }else {
  320. this.form.enddate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
  321. }
  322. }else {
  323. this.form.enddate_due = ''
  324. }
  325. this.$refs['form'].validate(async (valid) => {
  326. if (!valid) {
  327. this.$notify({
  328. title: '警告',
  329. message: '请按照要求输入信息',
  330. type: 'warning'
  331. });
  332. return false
  333. }else if (this.form.enterprisename === '' && this.form.projectname === ''){
  334. this.$notify({
  335. title: '警告',
  336. message: '客户名称或项目名称不能为空',
  337. type: 'warning'
  338. });
  339. return false
  340. }
  341. if(this.form.province.length > 0) {
  342. this.form.city = this.form.province[1]
  343. this.form.county = this.form.province[2]
  344. this.form.province = this.form.province[0]
  345. }
  346. if (this.form.isTelephone == '1'){
  347. this.form.phonenumber = this.form.areaCode + "-" + this.form.telephone
  348. }
  349. const res = await this.$api.requested({
  350. "id": 20221205162402,
  351. "content": this.form
  352. })
  353. this.tool.showMessage(res,()=>{
  354. this.drawer = false
  355. this.$refs.form.resetFields()
  356. this.$refs.sourceRef.option = []
  357. this.$refs.sourceRef.value = ''
  358. this.$emit('onSuccess')
  359. })
  360. });
  361. },
  362. cascaderChange(val) {
  363. this.form.province = val
  364. },
  365. centerChange(data) {
  366. this.form.campaign_name = data[0].name
  367. this.form.sat_campaignid = data[0].sat_campaignid
  368. this.activityVisible = false
  369. },
  370. /*工商信息*/
  371. businessSelect(val, regProvince) {
  372. this.$confirm('是否以查询的工商信息更新客户信息?', '提示', {
  373. confirmButtonText: '确定',
  374. cancelButtonText: '取消',
  375. type: 'warning'
  376. }).then(() => {
  377. this.$refs.businessRef.businessShow = false;
  378. this.form.enterprisename = val.companyName;
  379. this.form.address = val.address === "-" ? '' : val.address;
  380. this.form.province = [regProvince, val.regCity, val.regArea];
  381. this.form.city = val.regCity;
  382. this.form.county = val.regArea;
  383. }).catch(() => {
  384. this.$refs.businessRef.businessShow = false;
  385. this.$message({
  386. type: 'info',
  387. message: '已取消更新'
  388. });
  389. })
  390. },
  391. onClose() {
  392. this.drawer = false
  393. this.$refs.sourceRef.option = []
  394. this.$refs.sourceRef.value = ''
  395. },
  396. /*获取领域*/
  397. queryTradefield() {
  398. this.$store.dispatch('optiontypeselect', 'tradefield').then(res => {
  399. this.tradefieldSelect = res.data
  400. })
  401. },
  402. /*获取单位*/
  403. queryUnitname() {
  404. this.$store.dispatch('optiontypeselect', 'scaleunitname').then(res => {
  405. if (this.form.scale === '') {
  406. this.form.unitname = res.data[0].value
  407. }
  408. this.unitnameList = res.data
  409. })
  410. },
  411. /*联系人选择*/
  412. contactSelect(val){
  413. if (val){
  414. this.form.name = val.name
  415. if (val.phonenumber.indexOf('-') != '-1'){
  416. this.form.isTelephone = '1'
  417. this.form.areaCode = val.phonenumber.substring(0,val.phonenumber.indexOf('-'))
  418. this.form.telephone = val.phonenumber.substring(this.form.areaCode.length+1)
  419. this.form.phonenumber = ''
  420. }else {
  421. this.form.isTelephone = '0'
  422. this.form.phonenumber = val.phonenumber
  423. this.form.areaCode = ''
  424. this.form.telephone = ''
  425. }
  426. }else {
  427. this.form.name = this.$refs.contactsRef.name
  428. }
  429. },
  430. inputChange(val){
  431. this.form.name = val
  432. },
  433. contactData(val){
  434. this.form.name = val.name
  435. if (val.phonenumber.indexOf('-') != '-1'){
  436. this.form.isTelephone = '1'
  437. this.form.areaCode = val.phonenumber.substring(0,val.phonenumber.indexOf('-'))
  438. this.form.telephone = val.phonenumber.substring(this.form.areaCode.length+1)
  439. this.form.phonenumber = ''
  440. }else {
  441. this.form.isTelephone = '0'
  442. this.form.phonenumber = val.phonenumber
  443. this.form.areaCode = ''
  444. this.form.telephone = ''
  445. }
  446. },
  447. selectSource(data){
  448. this.form.cluesource = data
  449. }
  450. }
  451. }
  452. </script>
  453. <style scoped>
  454. .dialog-footer{
  455. margin-top:32px;
  456. text-align: center;
  457. }
  458. </style>