businessDetail.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <template>
  2. <div class="business-detail-wrap">
  3. <div class="business-detail">
  4. <Steps
  5. :activeStep="step"
  6. :stepsArr="stepsArr"
  7. @changeActiveStep="changeActiveStep"
  8. />
  9. <div class="first-step-form-wrap" v-show="step===1">
  10. <el-form
  11. :model="firstFormData"
  12. ref="firstFormEl"
  13. label-width="120px"
  14. inline
  15. :rules="rules"
  16. :disabled="true"
  17. class="first-step-form"
  18. >
  19. <div class="form-line">
  20. <el-form-item label="商家名称" prop="BusinessName">
  21. <el-input disabled placeholder="请输入商家名称" v-model="firstFormData.BusinessName"/>
  22. </el-form-item>
  23. <el-form-item label="商家ID" prop="BusinessCode">
  24. <el-input disabled placeholder="请输入商家ID" v-model="firstFormData.BusinessCode"/>
  25. </el-form-item>
  26. </div>
  27. <div class="form-line">
  28. <el-form-item label="所属区域" prop="RegionType">
  29. <el-radio-group v-model="firstFormData.RegionType" disabled>
  30. <el-radio label="国内" border>国内</el-radio>
  31. <el-radio label="海外" border>海外</el-radio>
  32. </el-radio-group>
  33. </el-form-item>
  34. <el-form-item label="商家地址" prop="address">
  35. <el-cascader
  36. v-model="firstFormData.address"
  37. :props="locationProps"
  38. clearable
  39. :options="locationOptions"
  40. @change="selectRegion"
  41. placeholder="请选择客户地址"
  42. />
  43. </el-form-item>
  44. </div>
  45. <div class="form-line">
  46. <el-form-item label="社会信用码" prop="CreditCode">
  47. <el-input disabled placeholder="请输入社会信用码" v-model="firstFormData.CreditCode"/>
  48. </el-form-item>
  49. <el-form-item label="研究团队规模" prop="ResearchTeamSize">
  50. <el-select
  51. v-model="firstFormData.ResearchTeamSize"
  52. placeholder="请选择研究团队规模"
  53. clearable
  54. >
  55. <el-option
  56. v-for="item in teamSizeOpts"
  57. :key="item.val"
  58. :label="item.label"
  59. :value="item.val">
  60. </el-option>
  61. </el-select>
  62. </el-form-item>
  63. </div>
  64. <div class="form-line">
  65. <el-form-item label="决策人" prop="Leader">
  66. <el-input placeholder="请输入决策人" v-model="firstFormData.Leader"/>
  67. </el-form-item>
  68. <el-form-item label="所属行业" prop="IndustryId">
  69. <el-select
  70. v-model="firstFormData.IndustryId"
  71. placeholder="请选择行业"
  72. clearable
  73. >
  74. <el-option
  75. v-for="item in tradeArr"
  76. :key="item.IndustryId"
  77. :label="item.IndustryName"
  78. :value="item.IndustryId">
  79. </el-option>
  80. </el-select>
  81. </el-form-item>
  82. </div>
  83. <div class="form-line">
  84. <el-form-item label="资金规模" prop="CapitalScale">
  85. <el-input placeholder="请输入资金规模" v-model="firstFormData.CapitalScale"/>
  86. </el-form-item>
  87. <el-form-item label="用户上限" prop="UserMax">
  88. <el-input type="number" placeholder="请输入用户上限" v-model="firstFormData.UserMax"/>
  89. </el-form-item>
  90. </div>
  91. <div class="form-line">
  92. <el-form-item label="所属销售" prop="SellerName">
  93. <el-input disabled placeholder="请输入销售" v-model="firstFormData.SellerName"/>
  94. </el-form-item>
  95. </div>
  96. </el-form>
  97. </div>
  98. <div class="second-step-form-wrap" v-show="step===2">
  99. <el-table :data="recordData" border>
  100. <el-table-column
  101. v-for="item in tableColOpts"
  102. :key="item.key"
  103. :prop="item.key"
  104. :label="item.label"
  105. align="center"
  106. >
  107. </el-table-column>
  108. </el-table>
  109. </div>
  110. </div>
  111. <div class="business-other">
  112. <div class="btn-wrap">
  113. <el-button type="primary" @click="$router.push({
  114. path:'/editETABusiness',
  115. query:{
  116. id:firstFormData.EtaBusinessId
  117. }
  118. })">编辑</el-button>
  119. </div>
  120. <div class="time-line-wrap">
  121. <el-timeline>
  122. <el-timeline-item
  123. v-for="(activity, index) in activities"
  124. :key="index"
  125. color="#409EFF"
  126. :timestamp="activity.CreateTime">
  127. <template slot="dot">
  128. <div class="dot-wrap">
  129. <div class="dot-inner"></div>
  130. </div>
  131. </template>
  132. {{activity.OperationRemark}}
  133. </el-timeline-item>
  134. </el-timeline>
  135. </div>
  136. </div>
  137. <!-- 添加续约 -->
  138. <el-dialog
  139. title="添加续约"
  140. :visible.sync="showRenewal"
  141. :modal-append-to-body="false"
  142. :close-on-click-modal="false"
  143. @closed="showRenewal=false"
  144. width="580px"
  145. >
  146. <AddRenewal
  147. @addRenewal="handleAddRenewal"
  148. @close="showRenewal=false"/>
  149. </el-dialog>
  150. </div>
  151. </template>
  152. <script>
  153. import { customInterence , businessCustomInterence} from '@/api/api.js'
  154. import Steps from "./components/Steps.vue";
  155. import AddRenewal from "./components/AddRenewal";
  156. import {locationOptions} from "@/views/custom_manage/customList/location"
  157. export default {
  158. components: {Steps,AddRenewal},
  159. data() {
  160. return {
  161. locationOptions,
  162. locationProps:{
  163. value:'name',
  164. children:'city',
  165. label:'name'
  166. },
  167. step:1,//第几步
  168. teamSizeOpts:[
  169. {
  170. val:'50人及以下',
  171. label:'50人及以下'
  172. },
  173. {
  174. val:'200人及以下',
  175. label:'200人及以下'
  176. },
  177. {
  178. val:'超过200人',
  179. label:'超过200人'
  180. }
  181. ],
  182. tradeArr:[],
  183. firstFormData:{
  184. RegionType:'',//1国内 2国外
  185. BusinessName:'',
  186. CreditCode:'',
  187. Address:'',
  188. Leader:'',
  189. ResearchTeamSize:'',
  190. CapitalScale:'',
  191. IndustryId:'',
  192. UserMax:'',
  193. SellerId:'',
  194. },
  195. rules:{
  196. address:[{ required: true, message: '请选择商家地址', trigger: 'change' },],
  197. decisionMaker:[{required: true, message: '请输入决策人', trigger: 'blur' },],
  198. teamSize:[{required: true, message: '请选择研究团队规模', trigger: 'change' },],
  199. industry:[{required: true, message: '请选择所属行业', trigger: 'change' },],
  200. userMax:[{required: true, message: '请输入用户上限', trigger: 'blur' },],
  201. saller:[{required: true, message: '请选择所属销售', trigger: 'change' },],
  202. },
  203. recordData:[],
  204. tableColOpts:[
  205. {
  206. label:'签约时间',
  207. key:'SigningTime'
  208. },{
  209. label:'到期时间',
  210. key:'ExpiredTime'
  211. },{
  212. label:'到期天数',
  213. key:'ExpireDay'
  214. }
  215. ],
  216. activities:[],
  217. }
  218. },
  219. created() {
  220. this.getIndustry()
  221. this.getBusinessDetail()
  222. },
  223. methods: {
  224. selectRegion(e){
  225. this.firstFormData.province=e[0]
  226. this.firstFormData.city=e[1]
  227. },
  228. /* 根据类型获取行业 */
  229. getIndustry() {
  230. customInterence.getindustry({
  231. Classify:'ficc'
  232. }).then(res => {
  233. if(res.Ret === 200) {
  234. this.tradeArr = res.Data.List || [];
  235. }
  236. })
  237. },
  238. changeActiveStep(index){
  239. this.step = index + 1
  240. },
  241. // 获取商家详情
  242. getBusinessDetail(){
  243. //query id
  244. businessCustomInterence.getBusinessDetail({
  245. EtaBusinessId:Number(this.$route.query.id)
  246. }).then(res=>{
  247. if(res.Ret !== 200)return
  248. this.firstFormData = res.Data||{}
  249. this.firstFormData.address = [res.Data.Province||'',res.Data.City||'']
  250. })
  251. //获取签约详情
  252. this.getTableData(Number(this.$route.query.id))
  253. //获取操作日志列表
  254. this.getTimeLineData(Number(this.$route.query.id))
  255. },
  256. // 获取签约详情
  257. getTableData(id){
  258. businessCustomInterence.getContractList({
  259. EtaBusinessId:id
  260. }).then(res=>{
  261. if(res.Ret !== 200) return
  262. this.recordData = res.Data||[]
  263. })
  264. },
  265. // 获取操作日志详情
  266. getTimeLineData(id){
  267. businessCustomInterence.getTimeLineList({
  268. EtaBusinessId:id
  269. }).then(res=>{
  270. if(res.Ret!==200) return
  271. this.activities = res.Data||[]
  272. })
  273. },
  274. },
  275. }
  276. </script>
  277. <style lang="scss" scoped>
  278. .business-detail-wrap{
  279. display: flex;
  280. background-color: #fff;
  281. min-width: 1100px;
  282. min-height: calc(100vh - 120px);
  283. padding:30px;
  284. box-sizing: border-box;
  285. gap:10%;
  286. .business-detail{
  287. width:70%;
  288. .first-step-form-wrap,.second-step-form-wrap{
  289. margin-top:60px;
  290. border-top: 1px solid #DCDCDC;
  291. }
  292. .el-form{
  293. .form-line{
  294. margin:30px 0;
  295. border-bottom: 1px solid #DCDCDC;
  296. .el-input,.el-select,.el-cascader,.el-radio-group{
  297. width:360px;
  298. }
  299. .el-radio-group{
  300. display: flex;
  301. justify-content: space-between;
  302. .el-radio{
  303. width: 165px;
  304. text-align: center;
  305. }
  306. }
  307. }
  308. }
  309. .el-table{
  310. margin-top: 30px;
  311. }
  312. }
  313. .business-other{
  314. flex: 1;
  315. .btn-wrap{
  316. display: flex;
  317. gap:30px;
  318. .el-button{
  319. flex:1;
  320. }
  321. }
  322. .time-line-wrap{
  323. margin-top:30px;
  324. border:1px solid #DCDFE6;
  325. border-radius: 4px;
  326. box-sizing: border-box;
  327. padding: 30px;
  328. max-height: calc(100vh - 250px);
  329. overflow-y: auto;
  330. .dot-wrap{
  331. width:12px;
  332. height:12px;
  333. border:6px solid #fff;
  334. background-color: #3385FF;
  335. position: absolute;
  336. left:-6px;
  337. top:0;
  338. border-radius: 50%;
  339. .dot-inner{
  340. position: absolute;
  341. left:3px;
  342. top:3px;
  343. width:6px;
  344. height: 6px;
  345. border-radius: 50%;
  346. background-color: #fff;
  347. }
  348. }
  349. }
  350. }
  351. }
  352. </style>