detail.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  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 && $refs.billno.listData()" :data="mainData" class="inline-16"/>
  19. <submit-check :disabled="!isLeader" ref="submit" :data="mainData" @onSuccess="queryMainData" />
  20. <reverseCheck @onSuccess="queryMainData();$refs.submit.refreshFun()" :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,'addProductList')" :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,'editProductList')"
  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 v-if="tool.checkAuth($route.name,'delProductList')" :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,'addProductDiscount')" @onSuccess="$refs.productDetailList.listData()"/>
  44. <template v-slot:edit="scope">
  45. <el-button
  46. v-if="tool.checkAuth($route.name,'editProductDiscount')"
  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,'delProductDiscount')" :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,'editTool')"
  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,'delTool')" :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,'addProductClassDiscount')" :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,'editProductClassDiscount')"
  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,'delProductClassDiscount')" :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,'addContractClaus')"
  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,'editContractClaus')"
  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 && mainData.type == '框架'" :data="mainData">
  128. <template v-slot:edit="scope">
  129. <edit-target :disabled="mainData.status != '新建' || !isLeader" v-if="tool.checkAuth($route.name,'editTaskTarget')" :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. if (Object.keys(JSON.parse(window.sessionStorage.getItem('userInfo'))).length > 0) {
  185. console.log('负责人逻辑');
  186. this.isLeader = val.leader ? JSON.parse(window.sessionStorage.getItem('active_account')).userid == val.leader[0].userid : false
  187. console.log(this.isLeader);
  188. } else {
  189. this.isLeader = true
  190. }
  191. },
  192. deep:true,
  193. immediate:true
  194. }
  195. },
  196. methods:{
  197. async queryMainData(id) {
  198. const res = await this.$api.requested({
  199. "id":20221121195102,
  200. "content": {
  201. "sa_contractid": this.$route.query.id
  202. }
  203. })
  204. this.mainData = res.data
  205. console.log(this.mainData);
  206. this.mainData.type == '项目'
  207. ? this.mainData.typemx == '直销'
  208. ? 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:'经销项目'}})
  209. : this.$router.replace({path:'/contractDetail',query:{id:this.$route.query.id,rowindex:this.$route.query.rowindex,type:this.mainData.type}})
  210. this.changeDataStructure()
  211. },
  212. changeDataStructure() {
  213. let that = this
  214. this.mainData.type == '项目'
  215. ? this.mainData.typemx == '直销'
  216. ? this.mainAreaData = [
  217. /* 直销信息 */
  218. {
  219. label:'合同编号',
  220. value:this.mainData.billno
  221. },
  222. {
  223. label:'标题',
  224. value:this.mainData.title
  225. },
  226. {
  227. label:'合同模板',
  228. value:this.mainData.modelname
  229. },
  230. {
  231. label:'客户',
  232. value:this.mainData.enterprisename
  233. },
  234. {
  235. label:'项目名称',
  236. value:this.mainData.projectname
  237. },
  238. {
  239. label:'合同类型',
  240. value:this.mainData.type == '项目' ? this.mainData.typemx == '直销' ? '直销项目协议' : '经销项目协议' : ''
  241. },
  242. {
  243. label:'业务员',
  244. value:this.mainData.salername
  245. },
  246. {
  247. label:'合同有效期',
  248. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  249. },
  250. {
  251. label:'签约日期',
  252. value:this.mainData.signdate
  253. },
  254. {
  255. label:'签约金额(元)',
  256. value:this.mainData.signamount
  257. },
  258. {
  259. label:'创建时间',
  260. value:this.mainData.createdate
  261. },
  262. {
  263. label:'创建人',
  264. value:this.mainData.createby
  265. },
  266. {
  267. label:'状态',
  268. value:this.mainData.status,
  269. style:function () {
  270. let style = {}
  271. switch (that.mainData.status) {
  272. case '新建':
  273. style = {color:'#3874f6'}
  274. break;
  275. case '提交':
  276. style = {color:'#52c41a'}
  277. break;
  278. case '审核':
  279. style = {color:'#333333'}
  280. break;
  281. default:
  282. break;
  283. }
  284. return style
  285. }
  286. },
  287. {
  288. label:'合同描述',
  289. value:this.mainData.remarks
  290. },
  291. ] : this.mainAreaData = [
  292. /* 经销信息 */
  293. {
  294. label:'合同编号',
  295. value:this.mainData.billno
  296. },
  297. {
  298. label:'标题',
  299. value:this.mainData.title
  300. },
  301. {
  302. label:'合同模板',
  303. value:this.mainData.modelname
  304. },
  305. {
  306. label:'经销商',
  307. value:this.mainData.enterprisename
  308. },
  309. {
  310. label:'项目名称',
  311. value:this.mainData.projectname
  312. },
  313. {
  314. label:'合同类型',
  315. value:this.mainData.type == '项目' ? this.mainData.typemx == '直销' ? '直销项目协议' : '经销项目协议' : ''
  316. },
  317. {
  318. label:'业务员',
  319. value:this.mainData.salername
  320. },
  321. {
  322. label:'合同有效期',
  323. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  324. },
  325. {
  326. label:'签约日期',
  327. value:this.mainData.signdate
  328. },
  329. {
  330. label:'签约金额(元)',
  331. value:this.mainData.signamount
  332. },
  333. {
  334. label:'创建时间',
  335. value:this.mainData.createdate
  336. },
  337. {
  338. label:'创建人',
  339. value:this.mainData.createby
  340. },
  341. {
  342. label:'状态',
  343. value:this.mainData.status,
  344. style:function () {
  345. let style = {}
  346. switch (that.mainData.status) {
  347. case '新建':
  348. style = {color:'#3874f6'}
  349. break;
  350. case '提交':
  351. style = {color:'#52c41a'}
  352. break;
  353. case '审核':
  354. style = {color:'#333333'}
  355. break;
  356. default:
  357. break;
  358. }
  359. return style
  360. }
  361. },
  362. {
  363. label:'合同描述',
  364. value:this.mainData.remarks
  365. },
  366. ] : this.mainData.type == '框架'
  367. ? this.mainAreaData = [
  368. /* 合作协议 */
  369. {
  370. label:'合同编号',
  371. value:this.mainData.billno
  372. },
  373. {
  374. label:'标题',
  375. value:this.mainData.title
  376. },
  377. {
  378. label:'合同模板',
  379. value:this.mainData.modelname
  380. },
  381. {
  382. label:'经销商',
  383. value:this.mainData.enterprisename
  384. },
  385. {
  386. label:'业务员',
  387. value:this.mainData.salername
  388. },
  389. {
  390. label:'合同类型',
  391. value:'经销商合作协议'
  392. },
  393. {
  394. label:'折扣(%)',
  395. value:this.mainData.discountrate * 100
  396. },
  397. {
  398. label:'合同有效期',
  399. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  400. },
  401. {
  402. label:'签约日期',
  403. value:this.mainData.signdate
  404. },
  405. {
  406. label:'签约金额(元)',
  407. value:this.mainData.signamount
  408. },
  409. {
  410. label:'创建时间',
  411. value:this.mainData.createdate
  412. },
  413. {
  414. label:'创建人',
  415. value:this.mainData.createby
  416. },
  417. {
  418. label:'状态',
  419. value:this.mainData.status,
  420. style:function () {
  421. let style = {}
  422. switch (that.mainData.status) {
  423. case '新建':
  424. style = {color:'#3874f6'}
  425. break;
  426. case '提交':
  427. style = {color:'#52c41a'}
  428. break;
  429. case '审核':
  430. style = {color:'#333333'}
  431. break;
  432. default:
  433. break;
  434. }
  435. return style
  436. }
  437. },
  438. {
  439. label:'合同描述',
  440. value:this.mainData.remarks
  441. },
  442. ] : this.mainData.type == '工具借用'
  443. ? this.mainAreaData = [
  444. /* 工具借用 */
  445. {
  446. label:'合同编号',
  447. value:this.mainData.billno
  448. },
  449. {
  450. label:'标题',
  451. value:this.mainData.title
  452. },
  453. {
  454. label:'合同模板',
  455. value:this.mainData.modelname
  456. },
  457. {
  458. label:'客户',
  459. value:this.mainData.enterprisename
  460. },
  461. {
  462. label:'合同类型',
  463. value:'工具借用协议'
  464. },
  465. {
  466. label:'业务员',
  467. value:this.mainData.salername
  468. },
  469. {
  470. label:'合同有效期',
  471. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  472. },
  473. {
  474. label:'签约日期',
  475. value:this.mainData.signdate
  476. },
  477. {
  478. label:'单套价格(元)',
  479. value:this.mainData.signamount
  480. },
  481. {
  482. label:'创建时间',
  483. value:this.mainData.createdate
  484. },
  485. {
  486. label:'创建人',
  487. value:this.mainData.createby
  488. },
  489. {
  490. label:'状态',
  491. value:this.mainData.status,
  492. style:function () {
  493. let style = {}
  494. switch (that.mainData.status) {
  495. case '新建':
  496. style = {color:'#3874f6'}
  497. break;
  498. case '提交':
  499. style = {color:'#52c41a'}
  500. break;
  501. case '审核':
  502. style = {color:'#333333'}
  503. break;
  504. default:
  505. break;
  506. }
  507. return style
  508. }
  509. },
  510. {
  511. label:'合同描述',
  512. value:this.mainData.remarks
  513. },
  514. ] : this.mainAreaData = [
  515. /* 居间协议 */
  516. {
  517. label:'合同编号',
  518. value:this.mainData.billno
  519. },
  520. {
  521. label:'标题',
  522. value:this.mainData.title
  523. },
  524. {
  525. label:'合同模板',
  526. value:this.mainData.modelname
  527. },
  528. {
  529. label:'项目合同',
  530. value:this.mainData.ascription_title
  531. },
  532. {
  533. label:'居间服务商',
  534. value:this.mainData.enterprisename
  535. },
  536. {
  537. label:'项目名称',
  538. value:this.mainData.projectname
  539. },
  540. {
  541. label:'合同类型',
  542. value:'居间协议'
  543. },
  544. {
  545. label:'业务员',
  546. value:this.mainData.salername
  547. },
  548. {
  549. label:'合同有效期',
  550. value:`${this.mainData.begdate}-${this.mainData.enddate}`
  551. },
  552. {
  553. label:'签约日期',
  554. value:this.mainData.signdate
  555. },
  556. {
  557. label:this.mainData.calculatemodel == 1 ? '订单金额比例(%)' : '产品折扣(%)',
  558. value:this.mainData.calculatemodel == 1 ? this.mainData.orderratio * 100 : this.mainData.productdiscount *100
  559. },
  560. {
  561. label:'创建时间',
  562. value:this.mainData.createdate
  563. },
  564. {
  565. label:'创建人',
  566. value:this.mainData.createby
  567. },
  568. {
  569. label:'状态',
  570. value:this.mainData.status,
  571. style:function () {
  572. let style = {}
  573. switch (that.mainData.status) {
  574. case '新建':
  575. style = {color:'#3874f6'}
  576. break;
  577. case '提交':
  578. style = {color:'#52c41a'}
  579. break;
  580. case '审核':
  581. style = {color:'#333333'}
  582. break;
  583. default:
  584. break;
  585. }
  586. return style
  587. }
  588. },
  589. {
  590. label:'合同描述',
  591. value:this.mainData.remarks
  592. },
  593. ]
  594. },
  595. // 监听切换数据,上一页,下一页
  596. pageChange (id,rowindex,tabIndex) {
  597. this.flag = false
  598. tabIndex = this.$route.query.tabIndex
  599. this.$router.replace({path:'/contractDetail',query:{id:id,rowindex:rowindex,tabIndex:tabIndex}})
  600. this.queryMainData(id)
  601. },
  602. onSuccess(){
  603. this.visible = false
  604. this.queryMainData(this.$route.query.id)
  605. this.$emit('onSuccess')
  606. },
  607. // async getModelList () {
  608. // let res = await this.$api.requested({
  609. // "id": 20221121155801,
  610. // "content": {
  611. // "pageNumber": 1,
  612. // "pageSize": 999999,
  613. // "where":{
  614. // "condition":""
  615. // }
  616. // }
  617. // })
  618. // this.modelList = res.data
  619. // console.log(this.modelList);
  620. // },
  621. },
  622. mounted () {
  623. this.queryMainData(this.$route.query.id)
  624. // this.getModelList()
  625. },
  626. created() {
  627. }
  628. }
  629. </script>
  630. <style scoped>
  631. </style>