edit.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. <template>
  2. <div>
  3. <el-button size="mini" :type="data.status === '已过期'?'':'primary'" @click="onShow" :disabled="data.status === '已过期'">编 辑</el-button>
  4. <el-drawer title="编辑线索" append-to-body :visible.sync="dialogFormVisible" :show-close="false" size="800px" @close="onClose">
  5. <div class="drawer__panel">
  6. <el-row :gutter="10">
  7. <el-form :model="form" :rules="rule" ref="form" label-position="right" label-width="120px" size="small">
  8. <el-col :span="20">
  9. <el-form-item label="客户名称:" prop="enterprisename">
  10. <el-input v-model="form.enterprisename" placeholder="请填写客户名称"></el-input>
  11. </el-form-item>
  12. </el-col>
  13. <el-col :span="4">
  14. <el-form-item label-width="0" >
  15. <businessMessage ref="businessMessage" :keyWord="form.enterprisename" @businessData="businessData"></businessMessage>
  16. </el-form-item>
  17. </el-col>
  18. <el-col :span="24">
  19. <el-form-item label="联系人:" prop="name">
  20. <!-- <contactsTemplate ref="contactsRef" @contactSelect="contactSelect" :name="form.name"></contactsTemplate>-->
  21. <contactsNewTemplate ownertable="" ownerid="" @contactData="contactData" :name="form.name" @inputChange="inputChange"></contactsNewTemplate>
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="24">
  25. <el-form-item>
  26. <el-radio v-model="form.isTelephone" label="0" >手机号</el-radio>
  27. <el-radio v-model="form.isTelephone" label="1">座机电话</el-radio>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="24" v-if="form.isTelephone == '1'">
  31. <el-form-item label="联系方式:" prop="telephone" >
  32. <el-input v-model="form.areaCode" style="width: 25%" autocomplete="on" placeholder="请填写区号"></el-input>
  33. <span style="color: #999999">——</span>
  34. <el-input v-model="form.telephone" style="width: 68%" autocomplete="on" placeholder="请填写座机电话"></el-input>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="24" >
  38. <el-form-item v-if="form.isTelephone == '0'" label="联系方式:" prop="phonenumber" :rules="[
  39. { required: true, message: '手机号码不能为空'},
  40. { pattern:/^1[3-9][0-9]\d{8}$/, message: '请输入正确手机号码',trigger: 'change' }
  41. ]">
  42. <el-input v-model="form.phonenumber" autocomplete="on" placeholder="请填写手机号码"></el-input>
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="24">
  46. <el-form-item label="微信:" prop="wechatnum">
  47. <el-input v-model="form.wechatnum" placeholder="请填写微信"></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="24">
  51. <el-form-item label="省市县:" prop="province">
  52. <el-cascader
  53. style="width:100%"
  54. class="width-240"
  55. v-model="form.province"
  56. :options="basicData.data().areaData"
  57. @change="cascaderChange">
  58. </el-cascader>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="24">
  62. <el-form-item label="地址:">
  63. <el-input v-model="form.address" autocomplete="off" placeholder="请填写地址"></el-input>
  64. </el-form-item>
  65. </el-col>
  66. <el-col :span="24">
  67. <el-form-item label="项目名称:" prop="projectname">
  68. <el-input v-model="form.projectname" placeholder="请填写项目名称"></el-input>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="20">
  72. <el-form-item label="项目规模:" prop="scale" >
  73. <el-input v-model="form.scale" placeholder="请填写数值" class="inline-16"></el-input>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="4">
  77. <el-select v-model="form.unitname" placeholder="请选择单位" size="mini" >
  78. <el-option
  79. v-for="item in unitnameList"
  80. :key="item.value"
  81. :label="item.value"
  82. :value="item.value">
  83. </el-option>
  84. </el-select>
  85. </el-col>
  86. <el-col :span="24" v-if="siteid !== 'HY'">
  87. <el-form-item label="总投资额(万元):" prop="totalinvestment">
  88. <el-input v-model="form.totalinvestment" placeholder="请填写金额(万元)"></el-input>
  89. </el-form-item>
  90. </el-col>
  91. <el-col :span="24" v-if="siteid !== 'HY'">
  92. <el-form-item label="造价(万元):" prop="costofconstruction">
  93. <el-input v-model="form.costofconstruction" placeholder="请填写金额(万元)"></el-input>
  94. </el-form-item>
  95. </el-col>
  96. <el-col :span="24">
  97. <el-form-item label="预计开工时间:" prop="begdate_due">
  98. <el-date-picker
  99. style="width: 100%"
  100. v-model="form.begdate_due"
  101. type="month"
  102. placeholder="选择月"
  103. >
  104. </el-date-picker>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="24">
  108. <el-form-item label="预计完工时间:" prop="enddate_due">
  109. <el-date-picker
  110. style="width: 100%"
  111. v-model="form.enddate_due"
  112. type="month"
  113. placeholder="选择月"
  114. >
  115. </el-date-picker>
  116. </el-form-item>
  117. </el-col>
  118. <el-col :span="24">
  119. <el-form-item label="市场活动:" prop="sat_campaignid">
  120. <el-popover
  121. placement="bottom"
  122. trigger="manual"
  123. v-model="activityVisible"
  124. width="400">
  125. <selectActivity ref="member" :radio="true" @onSelect="centerChange" @onCancel="activityVisible = false"></selectActivity>
  126. <el-input readonly type="text" slot="reference" @focus="activityVisible=true" v-model="form.campaign_name" placeholder="请填写市场活动"></el-input>
  127. </el-popover>
  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. <el-input v-model="form.cluesource" autocomplete="off" placeholder="请填写来源"></el-input>
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="24">
  148. <el-form-item label="线索概况:">
  149. <el-input v-model="form.notes" type="textarea" autocomplete="off" 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="onSubmit" 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";
  165. import contactsTemplate from '@/template/contactsTemplate/index'
  166. import contactsNewTemplate from '@/template/contactsNewTemplate/index'
  167. export default {
  168. components: {selectActivity,businessMessage,contactsTemplate,contactsNewTemplate},
  169. props:['data','type'],
  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. activityVisible:false,
  216. dialogFormVisible:false,
  217. unitnameList:[],
  218. rule:{
  219. phonenumber:[
  220. { required: true, message: '请输入联系人手机号', trigger: 'blur' },
  221. { pattern:/^1[3-9]\d{9}$/, message: '请输入正确手机号码',trigger: 'change' }
  222. ],
  223. begdate_due:[
  224. { required: false, validator: begdateTime, trigger: 'change' }
  225. ],
  226. enddate_due:[
  227. { required: false, validator: enddateTime, trigger: 'change' }
  228. ],
  229. tradefield:[
  230. { required: true, message: '请选择领域', trigger: 'change'}
  231. ],
  232. name:[
  233. { required: true, message: '请输入联系人', trigger: 'change,blur'}
  234. ],
  235. scale:[
  236. {required: false,pattern:/^\d+(.\d{1,2})?$/, message: '请输入数字值', trigger: 'blur'}
  237. ],
  238. totalinvestment:[
  239. {required: false,pattern:/^\d+(.\d{1,2})?$/, message: '请输入数字值', trigger: 'blur'}
  240. ],
  241. costofconstruction:[
  242. {required: false,pattern:/^\d+(.\d{1,2})?$/, message: '请输入数字值', trigger: 'blur'}
  243. ],
  244. telephone:[
  245. { required: true, validator: telephone, trigger: 'change' }
  246. ],
  247. },
  248. form:{},
  249. arealist:[],
  250. tradefieldSelect:[],
  251. siteid:''
  252. }
  253. },
  254. methods:{
  255. onShow () {
  256. this.dialogFormVisible = true
  257. this.form = Object.assign({},this.form,this.data)
  258. this.form.province = [this.data.province, this.data.city, this.data.county]
  259. this.form.enterprisename = this.data.enterprisename_customer
  260. this.form.totalinvestment !== 0 ? this.form.totalinvestment = this.tool.formatAmount(this.form.totalinvestment,2): this.form.totalinvestment =''
  261. this.form.costofconstruction !== 0 ? this.form.costofconstruction = this.tool.formatAmount(this.form.costofconstruction,2): this.form.costofconstruction =''
  262. if ((this.form.phonenumber.indexOf('-')) != '-1'){
  263. this.form.isTelephone = '1'
  264. this.form.areaCode = this.data.phonenumber.substring(0,this.form.phonenumber.indexOf('-'))
  265. this.form.telephone = this.data.phonenumber.substring(this.form.areaCode.length+1)
  266. this.form.phonenumber = ''
  267. }else {
  268. this.form.isTelephone = '0'
  269. this.form.areaCode = ''
  270. this.form.telephone = ''
  271. }
  272. this.queryTradefield()
  273. this.queryUnitname()
  274. this.siteid = JSON.parse(sessionStorage.getItem('active_account')).siteid
  275. },
  276. async onSubmit () {
  277. if (this.form.begdate_due !== ''){
  278. const data = new Date(this.form.begdate_due)
  279. if (data.getMonth() +1 < 10){
  280. this.form.begdate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
  281. }else {
  282. this.form.begdate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
  283. }
  284. }else {
  285. this.form.begdate_due = ''
  286. }
  287. if (this.form.enddate_due !== ''){
  288. const data = new Date(this.form.enddate_due)
  289. if (data.getMonth() +1 < 10){
  290. this.form.enddate_due = data.getFullYear() + '-0' + (data.getMonth() + 1)
  291. }else {
  292. this.form.enddate_due = data.getFullYear() + '-' + (data.getMonth() + 1)
  293. }
  294. }else {
  295. this.form.enddate_due = ''
  296. }
  297. this.$refs['form'].validate(async (valid) => {
  298. if (!valid) {
  299. this.$notify({
  300. title: '警告',
  301. message: '请按照要求输入信息',
  302. type: 'warning'
  303. });
  304. return false
  305. }else if (this.form.enterprisename === '' && this.form.projectname === ''){
  306. this.$notify({
  307. title: '警告',
  308. message: '客户名称或项目名称不能为空',
  309. type: 'warning'
  310. });
  311. return false
  312. }
  313. this.form.city = this.form.province[1]
  314. this.form.county = this.form.province[2]
  315. this.form.province = this.form.province[0]
  316. if (this.form.isTelephone == '1'){
  317. this.form.phonenumber = this.form.areaCode + "-" + this.form.telephone
  318. }
  319. const res = await this.$api.requested({
  320. "classname": "webmanage.saletool.orderclue.publicclue.PublicClue",
  321. "method": "edit",
  322. "content":this.form
  323. })
  324. this.tool.showMessage(res,()=>{
  325. this.dialogFormVisible = false
  326. this.$emit('onSuccess')
  327. })
  328. });
  329. },
  330. cascaderChange (val) {
  331. this.form.province = val
  332. },
  333. centerChange (data) {
  334. this.form.campaign_name = data[0].name
  335. this.form.sat_campaignid = data[0].sat_campaignid
  336. this.activityVisible = false
  337. },
  338. /*工商信息*/
  339. businessData(val){
  340. console.log(val)
  341. this.form.enterprisename = val.companyName
  342. this.form.address = val.address === '-' ? '' : val.address
  343. this.form.province = [val.regProvince,val.regCity,val.regArea]
  344. },
  345. onClose(){
  346. this.dialogFormVisible = false
  347. this.$refs.businessMessage.businessShow = false
  348. this.activityVisible = false
  349. },
  350. /*获取领域*/
  351. queryTradefield(){
  352. this.$store.dispatch('optiontypeselect','tradefield').then(res=>{
  353. this.tradefieldSelect = res.data
  354. })
  355. },
  356. /*获取单位*/
  357. queryUnitname(){
  358. this.$store.dispatch('optiontypeselect','scaleunitname').then(res=>{
  359. if (this.form.scale === ''){
  360. this.form.unitname = res.data[0].value
  361. }
  362. this.unitnameList = res.data
  363. })
  364. },
  365. /*联系人选择*/
  366. contactSelect(val){
  367. if (val){
  368. this.form.name = val.name
  369. if (val.phonenumber.indexOf('-') != '-1'){
  370. this.form.isTelephone = '1'
  371. this.form.areaCode = val.phonenumber.substring(0,val.phonenumber.indexOf('-'))
  372. this.form.telephone = val.phonenumber.substring(this.form.areaCode.length+1)
  373. this.form.phonenumber = ''
  374. }else {
  375. this.form.isTelephone = '0'
  376. this.form.phonenumber = val.phonenumber
  377. this.form.areaCode = ''
  378. this.form.telephone = ''
  379. }
  380. }else {
  381. this.form.name = this.$refs.contactsRef.name
  382. }
  383. },
  384. inputChange(val){
  385. this.form.name = val
  386. },
  387. contactData(val){
  388. this.form.name = val.name
  389. if (val.phonenumber.indexOf('-') != '-1'){
  390. this.form.isTelephone = '1'
  391. this.form.areaCode = val.phonenumber.substring(0,val.phonenumber.indexOf('-'))
  392. this.form.telephone = val.phonenumber.substring(this.form.areaCode.length+1)
  393. this.form.phonenumber = ''
  394. }else {
  395. this.form.isTelephone = '0'
  396. this.form.phonenumber = val.phonenumber
  397. this.form.areaCode = ''
  398. this.form.telephone = ''
  399. }
  400. },
  401. },
  402. mounted () {
  403. }
  404. }
  405. </script>
  406. <style>
  407. </style>