detail.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. <template>
  2. <div>
  3. <basicDetails
  4. ref="details"
  5. :titleText="mainData.billno"
  6. :oldFormPath="{edit:'HDrpManagement/serveWorkBill/components'}"
  7. :editData="mainData"
  8. :mainAreaData="mainAreaData"
  9. turnPageId="20221031141102"
  10. idname="sa_workorderid"
  11. ownertable="sa_workorder"
  12. tags=""
  13. :tabs="mainData.actiontype == '工序模板' ? ['工序详情','确认单','服务团队','工单物料','详细信息'] : ['服务商品','确认单','服务团队','详细信息']"
  14. @pageChange="pageChange"
  15. @onEditSuccess="queryMainData($route.query.id)">
  16. <div slot="tags">
  17. </div>
  18. <div slot="customOperation" >
  19. <!-- <customBtn
  20. btnName="接单"
  21. message="确认接单当前服务工单吗?"
  22. idName="20230210101103"
  23. keyName="sa_workorderid"
  24. :id="$route.query.id"
  25. @onSuccess="queryMainData"
  26. class="inline-16"
  27. v-if="mainData.status == '新建' && tool.checkAuth($route.name,'join')"
  28. />
  29. <customBtn
  30. btnName="开始"
  31. message="确认开始当前服务工单吗?"
  32. idName="20230209144503"
  33. keyName="sa_workorderid"
  34. :id="$route.query.id"
  35. @onSuccess="queryMainData"
  36. class="inline-16"
  37. v-if="mainData.status == '待开始' && tool.checkAuth($route.name,'start')"
  38. /> -->
  39. <customBtn
  40. btnName="暂停"
  41. message="确认暂停当前服务工单吗?"
  42. idName="20230209144603"
  43. keyName="sa_workorderid"
  44. :id="$route.query.id"
  45. @onSuccess="queryMainData"
  46. class="inline-16"
  47. v-if="mainData.status == '进行中' && tool.checkAuth($route.name,'stop')"
  48. />
  49. <customBtn
  50. btnName="启用"
  51. message="确认启用当前服务工单吗?"
  52. idName="20230209144703"
  53. keyName="sa_workorderid"
  54. :id="$route.query.id"
  55. @onSuccess="queryMainData"
  56. class="inline-16"
  57. v-if="mainData.status == '暂停' && tool.checkAuth($route.name,'used')"
  58. />
  59. <!-- <customBtn
  60. btnName="完结"
  61. message="确认完结当前服务工单吗?"
  62. idName="20230209144903"
  63. keyName="sa_workorderid"
  64. :id="$route.query.id"
  65. @onSuccess="queryMainData"
  66. class="inline-16"
  67. v-if="mainData.status != '新建' && tool.checkAuth($route.name,'complete')"
  68. /> -->
  69. <customBtn
  70. btnName="作废"
  71. message="确认作废当前服务工单吗?"
  72. idName="20230209144803"
  73. keyName="sa_workorderid"
  74. :id="$route.query.id"
  75. @onSuccess="queryMainData"
  76. class="inline-16"
  77. v-if="mainData.status != '完结' && tool.checkAuth($route.name,'delete')"
  78. />
  79. </div>
  80. <div slot="slot0" v-if="mainData.actiontype == '工序模板'">
  81. <taskDetail :data="nodes">
  82. <template v-slot:detail="scope">
  83. <taskListDetail class="inline-16" :data="scope.data"></taskListDetail>
  84. </template>
  85. <!-- <template v-slot:edit="scope">
  86. <taskListEdit class="inline-16" :data="scope.data"/>
  87. </template> -->
  88. </taskDetail>
  89. </div>
  90. <div slot="slot1" v-if="mainData.actiontype == '工序模板'">
  91. <checkBill>
  92. <template v-slot:download="scope">
  93. <el-button v-if="tool.checkAuth($route.name,'checkBillDetail')" type="text" size="mini" @click="downLoadBill(scope.data)">单 据 下 载</el-button>
  94. </template>
  95. </checkBill>
  96. </div>
  97. <div slot="slot2" v-if="mainData.actiontype == '工序模板'">
  98. <teamList v-if="tool.checkAuth($route.name,'teamList')" ref="teamList" :data="mainData.team">
  99. <selectTeam ref="team" @teamChange="teamChange" slot="add">
  100. <el-button v-if="tool.checkAuth($route.name,'teamHandle')" class="button-new-tag" size="small" type="primary" @click="$refs.team.dialogFormVisible=true">添 加</el-button>
  101. </selectTeam>
  102. </teamList>
  103. </div>
  104. <div slot="slot3" v-if="mainData.actiontype == '工序模板'">
  105. <Items :data="mainData"></Items>
  106. </div>
  107. <div slot="slot4" v-if="mainData.actiontype == '工序模板'">
  108. <detailInfo :more="true" :data="detailInfo"></detailInfo>
  109. </div>
  110. <div slot="slot0" v-if="mainData.actiontype != '工序模板'">
  111. <Items :data="mainData"></Items>
  112. </div>
  113. <div slot="slot1" v-if="mainData.actiontype != '工序模板'">
  114. <checkBill>
  115. <template v-slot:download="scope">
  116. <el-button v-if="tool.checkAuth($route.name,'checkBillDetail')" type="text" size="mini" @click="downLoadBill(scope.data)">单 据 下 载</el-button>
  117. </template>
  118. </checkBill>
  119. </div>
  120. <div slot="slot2" v-if="mainData.actiontype != '工序模板'">
  121. <teamList v-if="tool.checkAuth($route.name,'teamList')" ref="teamList" :data="mainData.team">
  122. <selectTeam ref="team" @teamChange="teamChange" slot="add">
  123. <el-button v-if="tool.checkAuth($route.name,'teamHandle')" class="button-new-tag" size="small" type="primary" @click="$refs.team.dialogFormVisible=true">添 加</el-button>
  124. </selectTeam>
  125. </teamList>
  126. </div>
  127. <div slot="slot3" v-if="mainData.actiontype != '工序模板'">
  128. <detailInfo :more="true" :data="detailInfo"></detailInfo>
  129. </div>
  130. </basicDetails>
  131. </div>
  132. </template>
  133. <script>
  134. import detailInfo from '@/components/detailInfo/index'
  135. import taskDetail from './taskDetail/index'
  136. import taskListDetail from './taskDetail/taskListDetail'
  137. import taskListEdit from './taskDetail/taskListEdit'
  138. import checkBill from './checkBill/index'
  139. import teamList from './teamList/index'
  140. import Items from './items/index'
  141. import selectTeam from '../components/teamSelect'
  142. import { log } from '@antv/g2plot/lib/utils'
  143. export default {
  144. name: "detail",
  145. data() {
  146. return {
  147. mainData:'',
  148. mainAreaData:{},
  149. detailInfo:'',
  150. nodes:[]
  151. }
  152. },
  153. components:{
  154. detailInfo,
  155. taskDetail,
  156. taskListDetail,
  157. taskListEdit,
  158. checkBill,
  159. teamList,
  160. Items,
  161. selectTeam
  162. },
  163. methods:{
  164. async queryMainData(id) {
  165. const res = await this.$api.requested({
  166. "id":20230208140103,
  167. "content": {
  168. "sa_workorderid": this.$route.query.id
  169. }
  170. })
  171. this.mainData = res.data
  172. this.changeDataStructure()
  173. console.log(res.data);
  174. this.nodes = this.createTreeData(res.data.nodes)
  175. console.log(this.nodes);
  176. },
  177. downLoadBill (data) {
  178. let result = data.attinfos.filter(item => item.usetype == "comfirmbill")
  179. if(result.length == 0) return this.$message({
  180. type:'warning',
  181. message:'暂无单据信息'
  182. })
  183. window.open(result[0].url,'_self')
  184. },
  185. async teamChange (data) {
  186. let result = data.map(item => {
  187. return item.userid
  188. })
  189. const res = await this.$api.requested({
  190. "id": 20220930103603,
  191. "content": {
  192. "ownertable":'sa_workorder',
  193. "ownerid":this.$route.query.id,
  194. "justuserids":false,
  195. "userids": result
  196. }
  197. })
  198. this.tool.showMessage(res,() => {
  199. this.$refs.team.dialogFormVisible = false
  200. this.$refs.teamList.listData()
  201. })
  202. },
  203. changeDataStructure() {
  204. let that = this
  205. this.mainAreaData = [
  206. {
  207. label:'单号',
  208. value:this.mainData.billno
  209. },
  210. {
  211. label:'服务申请单号',
  212. value:this.mainData.servicebillno
  213. },
  214. {
  215. label:'工单类型',
  216. value:this.mainData.type
  217. },
  218. {
  219. label:'负责人',
  220. value:this.mainData.projectleader
  221. },
  222. {
  223. label:'状态',
  224. value:this.mainData.status,
  225. style:function () {
  226. let style = {}
  227. switch (that.mainData.status) {
  228. case '进行中':
  229. style = {color:'#52c41a'}
  230. break;
  231. case '待开始':
  232. style = {color:'#3874f6'}
  233. break;
  234. case '暂停':
  235. style = {color:'#333333'}
  236. break;
  237. /* case '提交':
  238. style = {color:'#3874f6'}
  239. break; */
  240. case '待接单':
  241. style = {color:'#fa8c16'}
  242. break;
  243. case '已完成':
  244. style = {color:'#fa8c16'}
  245. break;
  246. default:
  247. break;
  248. }
  249. return style
  250. }
  251. },
  252. {
  253. label:'经销商编号',
  254. value:this.mainData.agentnum
  255. },
  256. {
  257. label:'经销商',
  258. value:this.mainData.enterprisename
  259. },
  260. {
  261. label:'省市县',
  262. value:this.mainData.province + this.mainData.city + this.mainData.county
  263. },
  264. {
  265. label:'业务员',
  266. value:this.mainData.saler_name
  267. },
  268. {
  269. label:'业务员电话',
  270. value:this.mainData.salerphonenumber
  271. },
  272. {
  273. label:'地址',
  274. value:this.mainData.address
  275. },
  276. {
  277. label:'创建时间',
  278. value:this.mainData.createdate
  279. },
  280. {
  281. label:'结束时间',
  282. value:this.mainData.enddate
  283. },
  284. {
  285. label:'操作类型',
  286. value:this.mainData.actiontype
  287. }
  288. ]
  289. this.detailInfo = [
  290. {
  291. title:'基本信息',
  292. info: [
  293. {label:'单号',value:this.mainData.billno},
  294. {label:'申请单号',value:this.mainData.servicebillno},
  295. {
  296. label:'状态',
  297. value:this.mainData.status,
  298. style:function () {
  299. let style = {}
  300. switch (that.mainData.status) {
  301. case '进行中':
  302. style = {color:'#52c41a'}
  303. break;
  304. case '待开始':
  305. style = {color:'#3874f6'}
  306. break;
  307. case '暂停':
  308. style = {color:'#333333'}
  309. break;
  310. /* case '提交':
  311. style = {color:'#3874f6'}
  312. break; */
  313. case '待接单':
  314. style = {color:'#fa8c16'}
  315. break;
  316. case '已完成':
  317. style = {color:'#fa8c16'}
  318. break;
  319. default:
  320. break;
  321. }
  322. return style
  323. }
  324. },
  325. {label:'经销商编号',value:this.mainData.agentnum},
  326. {label:'经销商',value:this.mainData.enterprise},
  327. {label:'现场联系人',value:this.mainData.scenecontact},
  328. {label:'联系人电话',value:this.mainData.scenecontactphonenumber},
  329. {label:'工单负责人',value:this.mainData.projectleader},
  330. {label:'工单类型',value:this.mainData.type},
  331. {label:'工单模板',value:this.mainData.name},
  332. {label:'省市县',value:`${this.mainData.province}-${this.mainData.city}-${this.mainData.county}`},
  333. {label:'地址',value:this.mainData.address},
  334. {label:'创建人',value:this.mainData.createby},
  335. {label:'创建时间',value:this.mainData.createdate},
  336. ]
  337. },
  338. ]
  339. },
  340. createTreeData (array) {
  341. var that = this
  342. let arr = []
  343. function convertToElementTree(node) {
  344. // 新节点
  345. var elNode = {
  346. amount:node['amount'],
  347. attinfos:node['attinfos'],
  348. changeby: node["changeby"],
  349. changedate:node['changedate'],
  350. changeuserid:node['changeuserid'],
  351. confirm_value:node['confirm_value'],
  352. finishby:node['finishby'],
  353. parentid:node['parentid'],
  354. remarks:node['remarks'],
  355. sa_workorder_nodeid:node['sa_workorder_nodeid'],
  356. sa_workorderid:node['sa_workorderid'],
  357. sequence:node['sequence'],
  358. status:node['status'],
  359. textcontent:node['textcontent'],
  360. workname:node['workpresetjson'].workname,
  361. additem:node['workpresetjson'].additem,
  362. addperson:node['workpresetjson'].amountpay,
  363. confirm_options:node['workpresetjson'].confirm_options,
  364. confirm:node['workpresetjson'].confirm,
  365. contractupload:node['workpresetjson'].contractupload,
  366. fileupload:node['workpresetjson'].fileupload,
  367. itemtype:node['workpresetjson'].itemtype,
  368. remarks:node['workpresetjson'].remarks,
  369. required:node['workpresetjson'].required,
  370. textedit:node['workpresetjson'].textedit,
  371. children: [],
  372. }
  373. if (node.child && node.child.length > 0) {
  374. // 如果存在子节点
  375. for (var index = 0; index < node.child.length; index++) {
  376. // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
  377. elNode.children.push(convertToElementTree(node.child[index]));
  378. }
  379. }
  380. return elNode;
  381. }
  382. array.forEach((element) => {
  383. arr.push(convertToElementTree(element))
  384. });
  385. return arr
  386. },
  387. // 监听切换数据,上一页,下一页
  388. pageChange (id,rowindex,tabIndex) {
  389. this.flag = false
  390. tabIndex = this.$route.query.tabIndex
  391. this.$router.replace({path:'/workorderDetail',query:{id:id,rowindex:rowindex,tabIndex:tabIndex}})
  392. this.queryMainData(id)
  393. },
  394. onSuccess(){
  395. this.visible = false
  396. this.queryMainData(this.$route.query.id)
  397. this.$emit('onSuccess')
  398. }
  399. },
  400. mounted () {
  401. this.queryMainData(this.$route.query.id)
  402. },
  403. created() {
  404. }
  405. }
  406. </script>
  407. <style scoped>
  408. </style>