Edit.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660
  1. <!--
  2. * @Author: liuzhenlin 461480418@qq.ocm
  3. * @Date: 2023-01-09 15:49:34
  4. * @LastEditors: niezch@dashoo.cn
  5. * @LastEditTime: 2023-04-04 16:18:50
  6. * @Description: file content
  7. * @FilePath: \opms_frontend\src\views\contract\components\Edit.vue
  8. -->
  9. <template>
  10. <el-dialog class="edit-container" :title="title" top="5vh" :visible.sync="editVisible" @close="handleClose">
  11. <div class="setp-wrap">
  12. <el-steps :active="stepActive" :align-center="true" finish-status="success">
  13. <el-step title="基础信息" />
  14. <el-step title="产品列表" />
  15. </el-steps>
  16. </div>
  17. <el-form v-show="stepActive == 0" ref="editForm" :model="editForm" :rules="editRules">
  18. <el-row :gutter="20">
  19. <el-col :span="12">
  20. <el-form-item label="合同编号" prop="contractCode">
  21. <el-input v-model="editForm.contractCode" disabled placeholder="根据编号规则自动生产" />
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="12">
  25. <el-form-item label="关联项目" prop="nboName">
  26. <el-input
  27. v-model="editForm.nboName"
  28. :disabled="businessData.length > 0"
  29. placeholder="请选择关联项目"
  30. readonly
  31. suffix-icon="el-icon-search"
  32. @focus="openProject" />
  33. </el-form-item>
  34. </el-col>
  35. </el-row>
  36. <el-row :gutter="20">
  37. <el-col :span="12">
  38. <el-form-item label="合同名称" prop="contractName">
  39. <el-input v-model="editForm.contractName" placeholder="请输入合同名称" />
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="12">
  43. <el-form-item label="客户名称" prop="nboId">
  44. <el-input v-model="editForm.custName" disabled />
  45. </el-form-item>
  46. </el-col>
  47. </el-row>
  48. <el-row :gutter="20">
  49. <el-col :span="12">
  50. <el-form-item label="合同开始时间" prop="contractStartTime">
  51. <el-date-picker
  52. v-model="editForm.contractStartTime"
  53. :picker-options="pickerOptionsStart"
  54. placeholder="选择开始日期"
  55. style="width: 100%"
  56. type="date"
  57. value-format="yyyy-MM-dd" />
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="12">
  61. <el-form-item label="合同结束时间" prop="contractEndTime">
  62. <el-date-picker
  63. v-model="editForm.contractEndTime"
  64. :picker-options="pickerOptionsEnd"
  65. placeholder="选择结束日期"
  66. style="width: 100%"
  67. type="date"
  68. value-format="yyyy-MM-dd" />
  69. </el-form-item>
  70. </el-col>
  71. </el-row>
  72. <el-row :gutter="20">
  73. <el-col :span="12">
  74. <el-form-item label="销售工程师" prop="inchargeName">
  75. <el-input
  76. v-model="editForm.inchargeName"
  77. :disabled="true"
  78. placeholder="请选择销售工程师"
  79. readonly
  80. suffix-icon="el-icon-search"
  81. @focus="openUser(false, 'inchargeId', 'inchargeName')" />
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="12">
  85. <el-form-item label="公司签约人" prop="signatoryName">
  86. <el-input
  87. ref="signatoryName"
  88. v-model="editForm.signatoryName"
  89. placeholder="请选择公司签约人"
  90. readonly
  91. suffix-icon="el-icon-search"
  92. @focus="openUser(false, 'signatoryId', 'signatoryName')" />
  93. </el-form-item>
  94. </el-col>
  95. </el-row>
  96. <el-row :gutter="20">
  97. <el-col :span="12">
  98. <el-form-item label="经销商/代理商" prop="distributorName">
  99. <el-input
  100. v-model="editForm.distributorName"
  101. placeholder="请选择经销商/代理商"
  102. readonly
  103. suffix-icon="el-icon-search"
  104. @focus="openDistributor" />
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="12">
  108. <el-form-item label="合同类型" prop="contractType">
  109. <el-select v-model="editForm.contractType" placeholder="合同类型" style="width: 100%">
  110. <el-option v-for="item in contractOptions" :key="item.value" :label="item.value" :value="item.key" />
  111. </el-select>
  112. </el-form-item>
  113. </el-col>
  114. </el-row>
  115. <el-row :gutter="20">
  116. <el-col :span="12">
  117. <el-form-item label="签订单位类型" prop="signatoryType">
  118. <el-select
  119. v-model="editForm.signatoryType"
  120. placeholder="签订单位类型"
  121. style="width: 100%"
  122. @change="signatoryTypeChange">
  123. <el-option v-for="item in signatoryOptions" :key="item.value" :label="item.value" :value="item.key" />
  124. </el-select>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="12">
  128. <el-form-item label="合同签订单位" prop="signatoryUnit">
  129. <el-input v-model="editForm.signatoryUnit" disabled placeholder="请选择合同签订单位" />
  130. </el-form-item>
  131. </el-col>
  132. </el-row>
  133. <el-row :gutter="20">
  134. <el-col :span="12">
  135. <el-form-item label="质量/履约保证金(元)" prop="earnestMoney">
  136. <el-input v-model.number="editForm.earnestMoney" clearable placeholder="请输入质量/履约保证金" />
  137. </el-form-item>
  138. <el-form-item label="客户签约人" prop="custSignatoryName">
  139. <el-input
  140. v-model="editForm.custSignatoryName"
  141. :disabled="!businessUserQueryParams.busId"
  142. placeholder="请选择客户签约人"
  143. readonly
  144. suffix-icon="el-icon-search"
  145. @focus="openContact" />
  146. </el-form-item>
  147. </el-col>
  148. <el-col :span="12">
  149. <el-form-item label="运维服务费约定" prop="serviceFeeAgreement">
  150. <el-input
  151. v-model="editForm.serviceFeeAgreement"
  152. placeholder="请输入运维服务费约定"
  153. :rows="5"
  154. type="textarea" />
  155. </el-form-item>
  156. </el-col>
  157. </el-row>
  158. <el-row :gutter="20">
  159. <el-col :span="12">
  160. <el-form-item label="软件运维期限(年)" prop="softwareMaintenanceLimit">
  161. <el-input-number
  162. v-model.number="editForm.softwareMaintenanceLimit"
  163. controls-position="right"
  164. :min="0"
  165. placeholder="请输入软件运维期限"
  166. :step="1"
  167. step-strictly
  168. style="width: 100%" />
  169. </el-form-item>
  170. <el-form-item label="硬件运维期限(年)" prop="hardwareMaintenanceLimit">
  171. <el-input-number
  172. v-model="editForm.hardwareMaintenanceLimit"
  173. controls-position="right"
  174. :min="0"
  175. placeholder="请输入软件运维期限"
  176. :step="1"
  177. style="width: 100%" />
  178. </el-form-item>
  179. </el-col>
  180. <el-col :span="12">
  181. <el-form-item label="运维条款" prop="maintenanceClause">
  182. <el-input v-model="editForm.maintenanceClause" placeholder="请输入运维条款" :rows="5" type="textarea" />
  183. </el-form-item>
  184. </el-col>
  185. </el-row>
  186. <el-row :gutter="20">
  187. <el-col :span="12">
  188. <el-form-item label="备注" prop="remark">
  189. <el-input v-model="editForm.remark" placeholder="请输入备注" :rows="5" type="textarea" />
  190. </el-form-item>
  191. </el-col>
  192. <el-col :span="12">
  193. <el-form-item label="合同签订时间" prop="contractSignTime">
  194. <el-date-picker
  195. v-model="editForm.contractSignTime"
  196. :picker-options="pickerOptionsSign"
  197. placeholder="选择签订日期"
  198. style="width: 100%"
  199. type="date"
  200. value-format="yyyy-MM-dd" />
  201. </el-form-item>
  202. </el-col>
  203. </el-row>
  204. </el-form>
  205. <!-- 产品分类 -->
  206. <el-row v-show="stepActive == 1">
  207. <el-row class="mb10" :gutter="20">
  208. <el-col :span="12">
  209. <p>产品:</p>
  210. </el-col>
  211. <el-col class="proj-col" :span="12">
  212. <el-button type="primary" @click="$refs.product.open()">选择产品</el-button>
  213. </el-col>
  214. </el-row>
  215. <el-row>
  216. <el-col :span="24">
  217. <product-table
  218. ref="productTable"
  219. :product-data="productData"
  220. @changeProductData="changeProductData"
  221. @delProductData="delProductData" />
  222. </el-col>
  223. </el-row>
  224. </el-row>
  225. <span slot="footer">
  226. <el-button v-show="stepActive == 0" type="primary" @click="setStep(1)">下一步</el-button>
  227. <el-button v-show="stepActive == 1" type="primary" @click="setStep(0)">上一步</el-button>
  228. <el-button v-show="!editForm.id && stepActive == 1" type="primary" @click="contractSave">保存</el-button>
  229. <el-button v-show="editForm.id && stepActive == 1" type="primary" @click="contractEdit">保存</el-button>
  230. <el-button @click="editVisible = false">取消</el-button>
  231. </span>
  232. <!-- 选择项目 -->
  233. <select-business ref="project" :multiple="false" @save="getBusinessInfo" />
  234. <!-- 选择经销商 -->
  235. <select-distributor ref="distributor" :multiple="false" @save="getDistributor" />
  236. <!-- 选择用户 -->
  237. <select-user ref="user" :label="label" :multiple="multiple" :property="property" @save="getUser" />
  238. <!-- 选择产品 -->
  239. <select-product ref="product" :multiple="true" @save="getProduct" />
  240. <!-- 选择联系人 -->
  241. <select-business-contact
  242. ref="contact"
  243. :multiple="false"
  244. :query-params="businessUserQueryParams"
  245. @save="getContact" />
  246. </el-dialog>
  247. </template>
  248. <script>
  249. import { mapGetters } from 'vuex'
  250. import to from 'await-to-js'
  251. import contractApi from '@/api/contract'
  252. import businessApi from '@/api/proj/business'
  253. import ProductTable from './ProductTable'
  254. import SelectBusiness from '@/components/select/SelectBusiness'
  255. import SelectDistributor from '@/components/select/SelectDistributor'
  256. import SelectUser from '@/components/select/SelectUser'
  257. import SelectProduct from '@/components/select/SelectProduct'
  258. import SelectBusinessContact from '@/components/select/SelectBusinessContact'
  259. export default {
  260. components: {
  261. ProductTable,
  262. SelectBusiness,
  263. SelectDistributor,
  264. SelectUser,
  265. SelectProduct,
  266. SelectBusinessContact,
  267. },
  268. props: {
  269. businessData: {
  270. type: Array,
  271. default: () => [],
  272. },
  273. },
  274. data() {
  275. return {
  276. stepActive: 0, //步骤
  277. title: '新增客户信息',
  278. editVisible: false,
  279. editForm: {
  280. contractCode: '', //合同编号
  281. contractName: '', //合同名称
  282. contractType: '', //合同类型
  283. nboId: null, //项目id
  284. nboName: '', //项目名称
  285. custName: '', // 客户名称
  286. inchargeId: null, //销售工程师
  287. inchargeName: '', //销售工程师姓名
  288. signatoryType: '',
  289. signatoryUnit: '',
  290. earnestMoney: 0,
  291. contractStartTime: '', //合同开始时间
  292. contractEndTime: '', //合同结束时间
  293. contractSignTime: '', //合同签订时间
  294. signatoryName: '', //公司签约人
  295. signatoryId: null, //公司签约人id
  296. distributorId: null, //经销商id
  297. distributorName: '', //经销商name
  298. custSignatoryId: null, //客户签约人id
  299. custSignatoryName: '', //客户签约人name
  300. remark: '', //备注
  301. serviceFeeAgreement: '', // 运维服务费约定
  302. softwareMaintenanceLimit: 1, // 软件运维期限(年)
  303. hardwareMaintenanceLimit: 1, // 硬件运维期限(年)
  304. maintenanceClause: '', // 运维条款
  305. },
  306. editRules: {
  307. contractName: [{ required: true, trigger: 'blur', message: '请输入合同名称' }],
  308. contractType: [{ required: true, trigger: 'change', message: '请选择合同类型' }],
  309. signatoryType: [{ required: true, trigger: 'change', message: '请选择签订单位类型' }],
  310. signatoryUnit: [{ required: true, trigger: 'change', message: '请选择合同签订单位' }],
  311. nboName: [{ required: true, trigger: 'change', message: '请选择关联项目' }],
  312. contractStartTime: [
  313. { required: true, trigger: 'change', validator: this.pickerOptionsStart, message: '请选择开始时间' },
  314. ],
  315. contractEndTime: [{ trigger: 'change', validator: this.pickerOptionsEnd, message: '请选择结束时间' }],
  316. contractSignTime: [
  317. { required: true, trigger: 'change', validator: this.pickerOptionsSign, message: '请选择签订时间' },
  318. ],
  319. inchargeId: [{ required: true, trigger: 'change', message: '请选择销售工程师' }],
  320. signatoryName: [{ required: true, trigger: 'change', message: '请选择公司签约人' }],
  321. distributorName: [{ trigger: 'change', message: '请选择经销商' }],
  322. softwareMaintenanceLimit: [{ required: true, trigger: 'change', message: '请输入软件运维期限' }],
  323. hardwareMaintenanceLimit: [{ required: true, trigger: 'change', message: '请输入硬件运维期限' }],
  324. maintenanceClause: [{ required: true, trigger: 'blur', message: '请输入运维条款' }],
  325. },
  326. pickerOptionsStart: {
  327. disabledDate: (time) => {
  328. let endDateVal = this.editForm.contractEndTime
  329. if (endDateVal) {
  330. return time.getTime() > new Date(endDateVal).getTime()
  331. }
  332. },
  333. },
  334. pickerOptionsEnd: {
  335. disabledDate: (time) => {
  336. let beginDateVal = this.editForm.contractStartTime
  337. if (beginDateVal) {
  338. return time.getTime() < new Date(beginDateVal).getTime() - 1 * 24 * 60 * 60 * 1000
  339. }
  340. },
  341. },
  342. pickerOptionsSign: {
  343. disabledDate: (time) => {
  344. return time.getTime() > new Date().getTime()
  345. },
  346. },
  347. contractOptions: [], //合同类型
  348. signatoryOptions: [
  349. {
  350. key: '10',
  351. value: '终端用户',
  352. },
  353. {
  354. key: '20',
  355. value: '经销商',
  356. },
  357. {
  358. key: '30',
  359. value: '代理商',
  360. },
  361. ], //合同类型
  362. productData: [],
  363. multiple: false,
  364. property: '',
  365. label: '',
  366. businessUserQueryParams: {}, //查询客户签约人参数
  367. }
  368. },
  369. computed: {
  370. ...mapGetters({
  371. userId: 'user/id',
  372. username: 'user/username',
  373. }),
  374. },
  375. mounted() {
  376. this.getOptions()
  377. },
  378. methods: {
  379. getOptions() {
  380. Promise.all([this.getDicts('contract_type')])
  381. .then(([contract]) => {
  382. this.contractOptions = contract.data.values || []
  383. })
  384. .catch((err) => console.log(err))
  385. },
  386. async init(id) {
  387. if (this.businessData[0]) this.getBusinessInfo(this.businessData)
  388. if (!id) {
  389. this.title = '新增合同信息'
  390. // 设置销售工程师默认为当前用户
  391. // this.editForm.inchargeId = this.userId
  392. // this.editForm.inchargeName = this.nickName
  393. this.editForm.signatoryId = this.userId
  394. this.editForm.signatoryName = this.nickName
  395. } else {
  396. this.title = '编辑合同'
  397. const [err, res] = await to(contractApi.getDetails({ id }))
  398. if (err) return
  399. if (res.data) {
  400. // eslint-disable-next-line no-unused-vars
  401. let { product, ...data } = res.data
  402. this.editForm = data
  403. this.businessUserQueryParams = { busId: data.nboId, custId: data.custId }
  404. this.productData =
  405. product.length > 0
  406. ? product.map((item) => ({
  407. prodCode: item.prodCode,
  408. id: item.prodId,
  409. prodName: item.prodName,
  410. prodClass: item.prodClass,
  411. guidPrice: item.sugSalesPrice,
  412. price: item.tranPrice,
  413. count: item.prodNum,
  414. }))
  415. : []
  416. }
  417. }
  418. this.editVisible = true
  419. },
  420. // 修改步骤
  421. async setStep(step) {
  422. if (step == 1) {
  423. const [valid] = await to(this.$refs.editForm.validate())
  424. if (valid == false) return
  425. }
  426. this.stepActive = step
  427. },
  428. // 打开选择项目
  429. openProject() {
  430. this.$refs.project.open()
  431. },
  432. signatoryTypeChange() {
  433. // 10: '终端用户'
  434. // 20: '经销商'
  435. // 30: '代理商'
  436. if (this.editForm.signatoryType == '10') {
  437. this.editForm.signatoryUnit = this.editForm.custName
  438. }
  439. if (this.editForm.signatoryType == '20') {
  440. this.editForm.signatoryUnit = this.editForm.distributorName
  441. }
  442. // 现在还没有代理商
  443. if (this.editForm.signatoryType == '30') {
  444. this.editForm.signatoryUnit = this.editForm.distributorName
  445. }
  446. },
  447. // 关闭选择项目获取项目信息
  448. getBusinessInfo(data) {
  449. let business = data[0] || null
  450. if (!business) return
  451. console.log(business, 'business')
  452. this.editForm.contractName = business.nboName
  453. this.editForm.custName = business.custName
  454. this.editForm.nboId = business.id
  455. this.editForm.nboName = business.nboName
  456. this.editForm.custSignatoryId = business.contactId
  457. this.editForm.custSignatoryName = business.contactName
  458. this.editForm.inchargeId = business.saleId
  459. this.editForm.inchargeName = business.saleName
  460. this.businessUserQueryParams = { busId: business.id, custId: business.custId }
  461. this.editForm.signatoryType = business.salesModel
  462. if (this.editForm.signatoryType == '20' || this.editForm.signatoryType == '30') {
  463. this.editForm.distributorName = business.distributorName
  464. this.editForm.distributorId = business.distributorId
  465. }
  466. this.signatoryTypeChange()
  467. // 获取产品信息
  468. this.getProjectInfo(business.id)
  469. },
  470. // 打开选择经销商
  471. openDistributor() {
  472. this.$refs.distributor.open()
  473. },
  474. // 关闭经销商获取经销商信息
  475. getDistributor(data) {
  476. let distributor = data[0] || null
  477. if (!distributor) return
  478. this.editForm.distributorName = distributor.distName
  479. this.editForm.distributorId = distributor.id
  480. this.signatoryTypeChange()
  481. },
  482. // 打开选择公司签约人
  483. openUser(multiple, property, label) {
  484. this.multiple = multiple
  485. this.property = property
  486. this.label = label
  487. if (this.editForm[property].length) {
  488. this.$refs.user.ids = this.editForm[property]
  489. } else if (this.editForm[property]) {
  490. this.$refs.user.ids = [this.editForm[property]]
  491. } else {
  492. this.$refs.user.ids = []
  493. }
  494. this.$refs.user.open()
  495. },
  496. // 获取签约人信息
  497. getUser(userList, property, label) {
  498. this.editForm[label] = userList.map((item) => item.nickName).join()
  499. if (this.multiple) {
  500. this.editForm[property] = userList.map((item) => item.id)
  501. } else {
  502. this.editForm[property] = userList[0] ? userList[0].id : ''
  503. }
  504. this.$forceUpdate()
  505. },
  506. // 打开选择公司签约人
  507. openContact() {
  508. this.$refs.contact.open()
  509. },
  510. // 获取签约人信息
  511. getContact(data) {
  512. let user = data[0] || null
  513. if (!user) return
  514. this.editForm['custSignatoryName'] = user.cuctName
  515. this.editForm['custSignatoryId'] = user.id
  516. },
  517. // 获取产品信息
  518. getProduct(data) {
  519. // 重构产品数据结构
  520. if (data.length > 0) this.setProductData(data)
  521. },
  522. // 根据项目id获取产品信息
  523. async getProjectInfo(id) {
  524. let params = { id }
  525. const [err, res] = await to(businessApi.getProductByBusinessId(params))
  526. if (err) return
  527. if (res.data && res.data.length > 0) this.setProductData(res.data)
  528. },
  529. setProductData(data) {
  530. let projData = data.map((item) => ({
  531. id: item.prodId ? item.prodId : item.id,
  532. prodName: item.prodName,
  533. prodCode: item.prodCode,
  534. prodClass: item.prodClass,
  535. guidPrice: item.guidPrice,
  536. count: item.prodNum,
  537. price: item.prodPrice ? item.prodPrice : item.guidPrice,
  538. }))
  539. this.productData.push(...projData)
  540. this.productData = this.removeDuplicateObj(this.productData)
  541. },
  542. // 数组对象去重
  543. removeDuplicateObj(arr) {
  544. let obj = {}
  545. arr = arr.reduce((newArr, next) => {
  546. obj[next.id] ? '' : (obj[next.id] = true && newArr.push(next))
  547. return newArr
  548. }, [])
  549. return arr
  550. },
  551. // 修改产品列表数据
  552. changeProductData(data) {
  553. this.productData = this.productData.map((item) => {
  554. return item.id === data.id ? data : item
  555. })
  556. },
  557. delProductData(data) {
  558. this.productData = this.productData.filter((item) => item.id != data.id)
  559. },
  560. // 保存合同
  561. async contractSave() {
  562. let product = this.productData.map((item) => ({
  563. prodId: item.id,
  564. prodNum: parseInt(item.count),
  565. maintTerm: 1,
  566. sugSalesPrice: item.guidPrice,
  567. tranPrice: item.price,
  568. remark: '',
  569. }))
  570. let params = Object.assign({ ...this.editForm }, { product })
  571. if (product.length == 0) return this.$message.warning('请选择产品信息')
  572. const [err, res] = await to(contractApi.addContract(params))
  573. if (err) return
  574. if (res.code == 200) this.$message.success(res.msg)
  575. else return
  576. this.editVisible = false
  577. this.$emit('contractSave')
  578. },
  579. // 编辑合同
  580. async contractEdit() {
  581. let product = this.productData.map((item) => ({
  582. prodId: item.id,
  583. prodNum: parseInt(item.count),
  584. maintTerm: 1,
  585. sugSalesPrice: item.guidPrice,
  586. tranPrice: item.price,
  587. remark: '',
  588. }))
  589. let params = Object.assign({ ...this.editForm }, { product })
  590. if (product.length == 0) return this.$message.warning('请选择产品信息')
  591. const [err, res] = await to(contractApi.updateContract(params))
  592. if (err) return
  593. if (res.code == 200) this.$message.success(res.msg)
  594. else return
  595. this.editVisible = false
  596. this.$emit('contractSave')
  597. },
  598. handleClose() {
  599. this.editForm = {
  600. contractCode: '', //合同编号
  601. contractName: '', //合同名称
  602. contractType: '', //合同类型
  603. nboId: null, //项目id
  604. nboName: '', //项目名称
  605. custName: '', // 客户名称
  606. inchargeId: null, //销售工程师
  607. inchargeName: '', //销售工程师名称
  608. signatoryType: '',
  609. contractStartTime: '', //合同开始时间
  610. contractEndTime: '', //合同结束时间
  611. signatoryName: '', //公司签约人
  612. signatoryId: null, //公司签约人id
  613. distributorId: null, //经销商id
  614. distributorName: '', //经销商name
  615. remark: '', //备注
  616. serviceFeeAgreement: '', //运维服务费约定
  617. softwareMaintenanceLimit: 1, // 软件运维期限(年)
  618. hardwareMaintenanceLimit: 1, // 硬件运维期限(年)
  619. maintenanceClause: '', // 运维条款
  620. }
  621. this.productData = []
  622. this.stepActive = 0
  623. this.businessUserQueryParams = {}
  624. this.$refs.editForm.resetFields()
  625. },
  626. },
  627. }
  628. </script>
  629. <style lang="scss" scoped>
  630. $base: '.edit-container';
  631. #{$base} {
  632. .mb10 {
  633. margin-bottom: 10px;
  634. }
  635. .proj-col {
  636. text-align: right;
  637. }
  638. // 进度条样式
  639. // ::v-deep .el-steps {
  640. // .el-step__line {
  641. // top: 17px;
  642. // }
  643. // .el-step__icon {
  644. // width: 35px;
  645. // height: 35px;
  646. // font-size: 18px;
  647. // }
  648. // .is-process {
  649. // .el-step__icon {
  650. // background: #2e51ff;
  651. // color: #fff;
  652. // border-color: #2e51ff;
  653. // }
  654. // }
  655. // }
  656. }
  657. </style>