detail.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. <template>
  2. <div>
  3. <basicDetails
  4. v-if="Object.keys(mainData).length > 0"
  5. ref="details"
  6. :titleText="mainData.billno"
  7. :editData="mainData"
  8. :mainAreaData="mainAreaData"
  9. turnPageId="20221121201502"
  10. idname="sa_contractid"
  11. ownertable="sa_contract"
  12. :tabs="mainData.type == '项目' ? ['产品清单','合同条款','角色信息'] : mainData.type == '框架' ? ['产品明细折扣','产品类别折扣','业绩目标'] : mainData.type == '居间' ? null : ['工具清单','合同条款']"
  13. @pageChange="pageChange"
  14. @onEditSuccess="queryMainData($route.query.id)">
  15. <div slot="tags">
  16. </div>
  17. <div slot="customOperation" >
  18. <editBtn :modelList="modelList" v-if="tool.checkAuth($route.name,'update')" :disabled="mainData.status != '新建' || !isLeader" @onSuccess="queryMainData();$refs.billno.listData()" :data="mainData" class="inline-16"/>
  19. <submit-check :disabled="!isLeader" :data="mainData" @onSuccess="queryMainData" />
  20. <reverseCheck @onSuccess="queryMainData()" :data="mainData" v-if="tool.checkAuth($route.name,'reverseCheck') && mainData.status == '审核'" />
  21. <contractOver v-if="tool.checkAuth($route.name,'contractOver') && mainData.status != '已终止' && mainData.status != '审核' && isLeader" :disabled="!isLeader" :id="mainData.sa_contractid" @onSuccess="queryMainData"/>
  22. <Del :idName="20221121202502" :id="mainData.sa_contractid" idKey="sa_contractids" class="inline-16" v-if="tool.checkAuth($route.name,'delete') && mainData.type == '新建' && isLeader"/>
  23. </div>
  24. <div slot="slot0" >
  25. <!--产品清单表-->
  26. <productBillno ref="billno" @priceChange="queryMainData" v-if="mainData.type == '项目'">
  27. <addProduct v-if="tool.checkAuth($route.name,'addProduct')" :disabled="mainData.status != '新建' || !isLeader" slot="addProduct" @onSuccess="$refs.billno.listData()"/>
  28. <template v-slot:edit="scope">
  29. <el-button
  30. v-if="tool.checkAuth($route.name,'insert')"
  31. class="inline-16"
  32. :disabled="mainData.status != '新建' || !isLeader"
  33. type="text" size="mini" slot="edit"
  34. @click="$refs.billno.editIndex = scope.data.sa_contract_itemsid;$refs.billno.form = Object.assign({},$refs.billno.form,scope.data)"
  35. >编 辑</el-button>
  36. </template>
  37. <template v-slot:del="scope">
  38. <delete-btn :nameId="20221123164502" :disabled="mainData.status != '新建' || !isLeader" nameKey="sa_contract_itemsids" :id="scope.data.sa_contract_itemsid" @deleteSuccess="$refs.billno.listData()"></delete-btn>
  39. </template>
  40. </productBillno>
  41. <!--产品明细折扣表-->
  42. <productDetailList ref="productDetailList" v-if="mainData.type == '框架'" @priceChange="queryMainData">
  43. <addProductDetail :disabled="mainData.status != '新建' || !isLeader" slot="addProduct" v-if="tool.checkAuth($route.name,'addProductDetail')" @onSuccess="$refs.productDetailList.listData()"/>
  44. <template v-slot:edit="scope">
  45. <el-button
  46. v-if="tool.checkAuth($route.name,'update')"
  47. class="inline-16"
  48. :disabled="mainData.status != '新建' || !isLeader"
  49. type="text"
  50. size="mini"
  51. slot="edit"
  52. @click="$refs.productDetailList.editIndex = scope.data.sa_contract_itemsid;$refs.productDetailList.form = Object.assign({},$refs.productDetailList.form,scope.data)"
  53. >编 辑</el-button>
  54. </template>
  55. <template v-slot:del="scope">
  56. <delete-btn v-if="tool.checkAuth($route.name,'delete')" :nameId="20221123164502" :disabled="mainData.status != '新建' || !isLeader" nameKey="sa_contract_itemsids" :id="scope.data.sa_contract_itemsid" @deleteSuccess="$refs.productDetailList.listData()"></delete-btn>
  57. </template>
  58. </productDetailList>
  59. <!--工具清单-->
  60. <toolList ref="toolList" v-if="mainData.type == '工具借用'" @priceChange="queryMainData">
  61. <addTool v-if="tool.checkAuth($route.name,'addTool')" :disabled="mainData.status != '新建' || !isLeader" slot="addProduct" @onSuccess="$refs.toolList.listData()"/>
  62. <template v-slot:edit="scope">
  63. <el-button
  64. v-if="tool.checkAuth($route.name,'update')"
  65. class="inline-16"
  66. :disabled="mainData.status != '新建' || !isLeader"
  67. type="text"
  68. size="mini"
  69. slot="edit"
  70. @click="$refs.toolList.editIndex = scope.data.sa_contract_itemsid;$refs.toolList.form = Object.assign({},$refs.toolList.form,scope.data)"
  71. >编 辑</el-button>
  72. </template>
  73. <template v-slot:del="scope">
  74. <delete-btn v-if="tool.checkAuth($route.name,'delete')" :nameId="20221123164502" :disabled="mainData.status != '新建' || !isLeader" nameKey="sa_contract_itemsids" :id="scope.data.sa_contract_itemsid" @deleteSuccess="$refs.toolList.listData()"></delete-btn>
  75. </template>
  76. </toolList>
  77. </div>
  78. <div slot="slot1" >
  79. <!--产品类别折扣表-->
  80. <productClassList ref="classList" @priceChange="queryMainData" v-if="mainData.type == '框架'">
  81. <addClass v-if="tool.checkAuth($route.name,'addClass')" :disabled="mainData.status != '新建' || !isLeader" slot="addProduct" @onSuccess="$refs.classList.listData()"/>
  82. <template v-slot:edit="scope">
  83. <el-button
  84. v-if="tool.checkAuth($route.name,'update')"
  85. class="inline-16"
  86. :disabled="mainData.status != '新建' || !isLeader"
  87. type="text" size="mini" slot="edit"
  88. @click="$refs.classList.currentEdit = scope.data;$refs.classList.form = Object.assign({},$refs.classList.form,scope.data)"
  89. >编 辑</el-button>
  90. </template>
  91. <template v-slot:del="scope">
  92. <delete-btn v-if="tool.checkAuth($route.name,'delete')" :nameId="20221124111202" :disabled="mainData.status != '新建' || !isLeader" nameKey="sa_contract_itemsaleclassids" :id="scope.data.sa_contract_itemsaleclassid" @deleteSuccess="$refs.classList.listData()"></delete-btn>
  93. </template>
  94. </productClassList>
  95. <!--合同条款-->
  96. <contractClause :disabled="mainData.status != '新建' || !isLeader" ref="Claus" v-if="mainData.type == '项目' || mainData.type == '工具借用'">
  97. <el-button
  98. v-if="tool.checkAuth($route.name,'addClaus')"
  99. size="small"
  100. type="primary"
  101. slot="addProduct"
  102. class="inline-16"
  103. @click="$refs.Claus.list.unshift({content:'',sa_contract_clauseid:0}),$refs.Claus.editIndex=0,$refs.Claus.form.sa_contract_clauseid=0"
  104. :disabled="mainData.status != '新建' || !isLeader"
  105. >添 加</el-button>
  106. <template v-slot:edit="scope">
  107. <el-button
  108. v-if="tool.checkAuth($route.name,'update')"
  109. class="inline-16"
  110. :disabled="mainData.status != '新建' || scope.data.editable != 1 || !isLeader"
  111. type="text" size="mini" slot="edit"
  112. @click="$refs.Claus.currentEdit = scope.data;$refs.Claus.form = Object.assign({},$refs.Claus.form,scope.data)"
  113. >编 辑</el-button>
  114. </template>
  115. <template v-slot:del="scope">
  116. <delete-btn
  117. :nameId="20221128160302"
  118. nameKey="sa_contract_clauseids"
  119. :id="scope.data.sa_contract_clauseid" @deleteSuccess="$refs.Claus.listData()"
  120. v-if="scope.data.sa_contract_clauseid == 0"
  121. ></delete-btn>
  122. </template>
  123. </contractClause>
  124. </div>
  125. <div slot="slot2">
  126. <!--业绩目标-->
  127. <taskTarget ref="taskTarget" v-if="Object.keys(mainData).length > 0" :data="mainData">
  128. <template v-slot:edit="scope">
  129. <edit-target :disabled="mainData.status != '新建' || !isLeader" v-if="tool.checkAuth($route.name,'update')" :data="scope.data" :salerId="mainData" @onSuccess="$refs.taskTarget.queryData()"/>
  130. </template>
  131. </taskTarget>
  132. </div>
  133. </basicDetails>
  134. </div>
  135. </template>
  136. <script>
  137. import Del from '../components/delete'
  138. import editBtn from '../components/editContract'
  139. import SubmitCheck from '../components/submitCheck'
  140. import productBillno from '../components/productList/productBillno'
  141. import productDetailList from '../components/productDetailList/productDetailList'
  142. import addProduct from '../components/productList/addProduct'
  143. import addProductDetail from '../components/productDetailList/addProduct'
  144. import addTool from '../components/toolList/addTool'
  145. import toolList from '../components/toolList/toolList'
  146. import addClass from '../components/productClassList/addProduct'
  147. import productClassList from '../components/productClassList/productClassList'
  148. import contractClause from '../components/contractClause/contractClause'
  149. import editTarget from '../components/taskTarget/editTarget'
  150. import taskTarget from '../components/taskTarget//taskTarget'
  151. import contractOver from '../components/contractOver'
  152. import reverseCheck from '../components/reverseCheck'
  153. export default {
  154. name: "detail",
  155. data() {
  156. return {
  157. mainData:{},
  158. mainAreaData:{},
  159. modelList:[],
  160. isLeader:false
  161. }
  162. },
  163. components:{
  164. Del,
  165. SubmitCheck,
  166. editBtn,
  167. productBillno,
  168. addProduct,
  169. productDetailList,
  170. addProductDetail,
  171. addTool,
  172. toolList,
  173. addClass,
  174. productClassList,
  175. contractClause,
  176. editTarget,
  177. taskTarget,
  178. contractOver,
  179. reverseCheck
  180. },
  181. watch: {
  182. mainData: {
  183. handler (val) {
  184. this.isLeader = val.leader ? JSON.parse(window.sessionStorage.getItem('active_account')).userid == val.leader[0].userid : false
  185. },
  186. deep:true,
  187. immediate:true
  188. }
  189. },
  190. methods:{
  191. async queryMainData(id) {
  192. const res = await this.$api.requested({
  193. "id":20221121195102,
  194. "content": {
  195. "sa_contractid": this.$route.query.id
  196. }
  197. })
  198. this.mainData = res.data
  199. console.log(this.mainData);
  200. this.mainData.type == '项目'
  201. ? this.mainData.typemx == '直销'
  202. ? this.$router.replace({path:'/contractDetail',query:{id:this.$route.query.id,rowindex:this.$route.query.rowindex,type:'直销项目'}}) : this.$router.replace({path:'/contractDetail',query:{id:this.$route.query.id,rowindex:this.$route.query.rowindex,type:'经销项目'}})
  203. : this.$router.replace({path:'/contractDetail',query:{id:this.$route.query.id,rowindex:this.$route.query.rowindex,type:this.mainData.type}})
  204. this.changeDataStructure()
  205. },
  206. changeDataStructure() {
  207. let that = this
  208. this.mainData.type == '项目'
  209. ? this.mainData.typemx == '直销'
  210. ? this.mainAreaData = [
  211. /* 直销信息 */
  212. {
  213. label:'合同编号',
  214. value:this.mainData.billno
  215. },
  216. {
  217. label:'标题',
  218. value:this.mainData.title
  219. },
  220. {
  221. label:'合同模板',
  222. value:this.mainData.modelname
  223. },
  224. {
  225. label:'客户',
  226. value:this.mainData.enterprisename
  227. },
  228. {
  229. label:'项目名称',
  230. value:this.mainData.projectname
  231. },
  232. {
  233. label:'合同类型',
  234. value:this.mainData.type == '项目' ? this.mainData.typemx == '直销' ? '直销项目协议' : '经销项目协议' : ''
  235. },
  236. {
  237. label:'业务员',
  238. value:this.mainData.salername
  239. },
  240. {
  241. label:'合同有效期',
  242. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  243. },
  244. {
  245. label:'签约日期',
  246. value:this.mainData.signdate
  247. },
  248. {
  249. label:'签约金额(元)',
  250. value:this.mainData.signamount
  251. },
  252. {
  253. label:'创建时间',
  254. value:this.mainData.createdate
  255. },
  256. {
  257. label:'创建人',
  258. value:this.mainData.createby
  259. },
  260. {
  261. label:'状态',
  262. value:this.mainData.status,
  263. style:function () {
  264. let style = {}
  265. switch (that.mainData.status) {
  266. case '新建':
  267. style = {color:'#3874f6'}
  268. break;
  269. case '提交':
  270. style = {color:'#52c41a'}
  271. break;
  272. case '审核':
  273. style = {color:'#333333'}
  274. break;
  275. default:
  276. break;
  277. }
  278. return style
  279. }
  280. },
  281. {
  282. label:'合同描述',
  283. value:this.mainData.remarks
  284. },
  285. ] : this.mainAreaData = [
  286. /* 经销信息 */
  287. {
  288. label:'合同编号',
  289. value:this.mainData.billno
  290. },
  291. {
  292. label:'标题',
  293. value:this.mainData.title
  294. },
  295. {
  296. label:'合同模板',
  297. value:this.mainData.modelname
  298. },
  299. {
  300. label:'经销商',
  301. value:this.mainData.enterprisename
  302. },
  303. {
  304. label:'项目名称',
  305. value:this.mainData.projectname
  306. },
  307. {
  308. label:'合同类型',
  309. value:this.mainData.type == '项目' ? this.mainData.typemx == '直销' ? '直销项目协议' : '经销项目协议' : ''
  310. },
  311. {
  312. label:'业务员',
  313. value:this.mainData.salername
  314. },
  315. {
  316. label:'合同有效期',
  317. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  318. },
  319. {
  320. label:'签约日期',
  321. value:this.mainData.signdate
  322. },
  323. {
  324. label:'签约金额(元)',
  325. value:this.mainData.signamount
  326. },
  327. {
  328. label:'创建时间',
  329. value:this.mainData.createdate
  330. },
  331. {
  332. label:'创建人',
  333. value:this.mainData.createby
  334. },
  335. {
  336. label:'状态',
  337. value:this.mainData.status,
  338. style:function () {
  339. let style = {}
  340. switch (that.mainData.status) {
  341. case '新建':
  342. style = {color:'#3874f6'}
  343. break;
  344. case '提交':
  345. style = {color:'#52c41a'}
  346. break;
  347. case '审核':
  348. style = {color:'#333333'}
  349. break;
  350. default:
  351. break;
  352. }
  353. return style
  354. }
  355. },
  356. {
  357. label:'合同描述',
  358. value:this.mainData.remarks
  359. },
  360. ] : this.mainData.type == '框架'
  361. ? this.mainAreaData = [
  362. /* 合作协议 */
  363. {
  364. label:'合同编号',
  365. value:this.mainData.billno
  366. },
  367. {
  368. label:'标题',
  369. value:this.mainData.title
  370. },
  371. {
  372. label:'合同模板',
  373. value:this.mainData.modelname
  374. },
  375. {
  376. label:'经销商',
  377. value:this.mainData.enterprisename
  378. },
  379. {
  380. label:'业务员',
  381. value:this.mainData.salername
  382. },
  383. {
  384. label:'合同类型',
  385. value:'经销商合作协议'
  386. },
  387. {
  388. label:'折扣(%)',
  389. value:this.mainData.discountrate
  390. },
  391. {
  392. label:'合同有效期',
  393. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  394. },
  395. {
  396. label:'签约日期',
  397. value:this.mainData.signdate
  398. },
  399. {
  400. label:'签约金额(元)',
  401. value:this.mainData.signamount
  402. },
  403. {
  404. label:'创建时间',
  405. value:this.mainData.createdate
  406. },
  407. {
  408. label:'创建人',
  409. value:this.mainData.createby
  410. },
  411. {
  412. label:'状态',
  413. value:this.mainData.status,
  414. style:function () {
  415. let style = {}
  416. switch (that.mainData.status) {
  417. case '新建':
  418. style = {color:'#3874f6'}
  419. break;
  420. case '提交':
  421. style = {color:'#52c41a'}
  422. break;
  423. case '审核':
  424. style = {color:'#333333'}
  425. break;
  426. default:
  427. break;
  428. }
  429. return style
  430. }
  431. },
  432. {
  433. label:'合同描述',
  434. value:this.mainData.remarks
  435. },
  436. ] : this.mainData.type == '工具借用'
  437. ? this.mainAreaData = [
  438. /* 工具借用 */
  439. {
  440. label:'合同编号',
  441. value:this.mainData.billno
  442. },
  443. {
  444. label:'标题',
  445. value:this.mainData.title
  446. },
  447. {
  448. label:'合同模板',
  449. value:this.mainData.modelname
  450. },
  451. {
  452. label:'客户',
  453. value:this.mainData.enterprisename
  454. },
  455. {
  456. label:'合同类型',
  457. value:'工具借用协议'
  458. },
  459. {
  460. label:'业务员',
  461. value:this.mainData.salername
  462. },
  463. {
  464. label:'合同有效期',
  465. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  466. },
  467. {
  468. label:'签约日期',
  469. value:this.mainData.signdate
  470. },
  471. {
  472. label:'单套价格(元)',
  473. value:this.mainData.signamount
  474. },
  475. {
  476. label:'创建时间',
  477. value:this.mainData.createdate
  478. },
  479. {
  480. label:'创建人',
  481. value:this.mainData.createby
  482. },
  483. {
  484. label:'状态',
  485. value:this.mainData.status,
  486. style:function () {
  487. let style = {}
  488. switch (that.mainData.status) {
  489. case '新建':
  490. style = {color:'#3874f6'}
  491. break;
  492. case '提交':
  493. style = {color:'#52c41a'}
  494. break;
  495. case '审核':
  496. style = {color:'#333333'}
  497. break;
  498. default:
  499. break;
  500. }
  501. return style
  502. }
  503. },
  504. {
  505. label:'合同描述',
  506. value:this.mainData.remarks
  507. },
  508. ] : this.mainAreaData = [
  509. /* 居间协议 */
  510. {
  511. label:'合同编号',
  512. value:this.mainData.billno
  513. },
  514. {
  515. label:'标题',
  516. value:this.mainData.title
  517. },
  518. {
  519. label:'合同模板',
  520. value:this.mainData.modelname
  521. },
  522. {
  523. label:'居间服务商',
  524. value:this.mainData.enterprisename
  525. },
  526. {
  527. label:'项目名称',
  528. value:this.mainData.projectname
  529. },
  530. {
  531. label:'合同类型',
  532. value:'居间协议'
  533. },
  534. {
  535. label:'业务员',
  536. value:this.mainData.salername
  537. },
  538. {
  539. label:'合同有效期',
  540. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  541. },
  542. {
  543. label:'签约日期',
  544. value:this.mainData.signdate
  545. },
  546. {
  547. label:'佣金比例(%)',
  548. value:this.mainData.kickback
  549. },
  550. {
  551. label:'创建时间',
  552. value:this.mainData.createdate
  553. },
  554. {
  555. label:'创建人',
  556. value:this.mainData.createby
  557. },
  558. {
  559. label:'状态',
  560. value:this.mainData.status,
  561. style:function () {
  562. let style = {}
  563. switch (that.mainData.status) {
  564. case '新建':
  565. style = {color:'#3874f6'}
  566. break;
  567. case '提交':
  568. style = {color:'#52c41a'}
  569. break;
  570. case '审核':
  571. style = {color:'#333333'}
  572. break;
  573. default:
  574. break;
  575. }
  576. return style
  577. }
  578. },
  579. {
  580. label:'合同描述',
  581. value:this.mainData.remarks
  582. },
  583. ]
  584. },
  585. // 监听切换数据,上一页,下一页
  586. pageChange (id,rowindex,tabIndex) {
  587. this.flag = false
  588. tabIndex = this.$route.query.tabIndex
  589. this.$router.replace({path:'/contractDetail',query:{id:id,rowindex:rowindex,tabIndex:tabIndex}})
  590. this.queryMainData(id)
  591. },
  592. onSuccess(){
  593. this.visible = false
  594. this.queryMainData(this.$route.query.id)
  595. this.$emit('onSuccess')
  596. },
  597. async getModelList () {
  598. let res = await this.$api.requested({
  599. "id": 20221121155801,
  600. "content": {
  601. "pageNumber": 1,
  602. "pageSize": 999999,
  603. "where":{
  604. "condition":""
  605. }
  606. }
  607. })
  608. this.modelList = res.data
  609. console.log(this.modelList);
  610. },
  611. },
  612. mounted () {
  613. this.queryMainData(this.$route.query.id)
  614. this.getModelList()
  615. },
  616. created() {
  617. }
  618. }
  619. </script>
  620. <style scoped>
  621. </style>