detail.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  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="['工序详情','确认单','详细信息']"
  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" >
  81. <taskDetail :data="nodes">
  82. <template v-slot:detail="scope">
  83. <taskListDetail v-if="tool.checkAuth($route.name,'workDetail')" 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" >
  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" >
  98. <detailInfo :more="true" :data="detailInfo"></detailInfo>
  99. </div>
  100. </basicDetails>
  101. </div>
  102. </template>
  103. <script>
  104. import detailInfo from '@/components/detailInfo/index'
  105. import taskDetail from './taskDetail/index'
  106. import taskListDetail from './taskDetail/taskListDetail'
  107. import taskListEdit from './taskDetail/taskListEdit'
  108. import checkBill from './checkBill/index'
  109. export default {
  110. name: "detail",
  111. data() {
  112. return {
  113. mainData:'',
  114. mainAreaData:{},
  115. detailInfo:'',
  116. nodes:[]
  117. }
  118. },
  119. components:{
  120. detailInfo,
  121. taskDetail,
  122. taskListDetail,
  123. taskListEdit,
  124. checkBill
  125. },
  126. methods:{
  127. async queryMainData(id) {
  128. const res = await this.$api.requested({
  129. "id":20230208140103,
  130. "content": {
  131. "sa_workorderid": this.$route.query.id
  132. }
  133. })
  134. this.mainData = res.data
  135. this.changeDataStructure()
  136. console.log(res.data.nodes);
  137. this.nodes = this.createTreeData(res.data.nodes)
  138. console.log(this.nodes);
  139. },
  140. downLoadBill (data) {
  141. if(data.attinfos.length == 0) return this.$message({
  142. type:'warning',
  143. message:'暂无单据信息'
  144. })
  145. window.open(data.attinfos[0].url,'_self')
  146. },
  147. changeDataStructure() {
  148. let that = this
  149. this.mainAreaData = [
  150. {
  151. label:'单号',
  152. value:this.mainData.billno
  153. },
  154. {
  155. label:'服务申请单号',
  156. value:this.mainData.servicebillno
  157. },
  158. {
  159. label:'工单类型',
  160. value:this.mainData.type
  161. },
  162. {
  163. label:'负责人',
  164. value:this.mainData.projectleader
  165. },
  166. {
  167. label:'状态',
  168. value:this.mainData.status,
  169. style:function () {
  170. let style = {}
  171. switch (that.mainData.status) {
  172. case '进行中':
  173. style = {color:'#52c41a'}
  174. break;
  175. case '待处理':
  176. style = {color:'#3874f6'}
  177. break;
  178. case '新建':
  179. style = {color:'#333333'}
  180. break;
  181. case '提交':
  182. style = {color:'#3874f6'}
  183. break;
  184. case '待指派':
  185. style = {color:'#fa8c16'}
  186. break;
  187. case '已完成':
  188. style = {color:'#fa8c16'}
  189. break;
  190. default:
  191. break;
  192. }
  193. return style
  194. }
  195. },
  196. {
  197. label:'经销商编号',
  198. value:this.mainData.agentnum
  199. },
  200. {
  201. label:'经销商',
  202. value:this.mainData.enterprisename
  203. },
  204. {
  205. label:'省市县',
  206. value:this.mainData.province
  207. },
  208. {
  209. label:'地址',
  210. value:this.mainData.address
  211. },
  212. {
  213. label:'创建时间',
  214. value:this.mainData.createdate
  215. },
  216. {
  217. label:'结束时间',
  218. value:this.mainData.enddate
  219. }
  220. ]
  221. this.detailInfo = [
  222. {
  223. title:'基本信息',
  224. info: [
  225. {label:'单号',value:this.mainData.billno},
  226. {label:'申请单号',value:this.mainData.servicebillno},
  227. {label:'状态',value:this.mainData.status},
  228. {label:'经销商编号',value:this.mainData.agentnum},
  229. {label:'经销商',value:this.mainData.enterprise},
  230. {label:'业务员',value:this.mainData.scenecontact},
  231. {label:'业务员电话',value:this.mainData.scenecontactphonenumber},
  232. {label:'工单负责人',value:this.mainData.scenecontact},
  233. {label:'工单类型',value:this.mainData.type},
  234. {label:'工单模板',value:this.mainData.name},
  235. {label:'省市县',value:`${this.mainData.province}-${this.mainData.city}-${this.mainData.county}`},
  236. {label:'地址',value:this.mainData.address},
  237. {label:'创建人',value:this.mainData.createby},
  238. {label:'创建时间',value:this.mainData.createdate},
  239. ]
  240. },
  241. {
  242. title:'工单物料',
  243. info: [
  244. {label:'编码',value:this.mainData.billno},
  245. {label:'名称',value:this.mainData.billdate},
  246. {label:'型号',value:this.mainData.status},
  247. {label:'规格',value:this.mainData.agentnum},
  248. {label:'数量',value:this.mainData.enterprise},
  249. ]
  250. },
  251. {
  252. title:'确认单',
  253. info: [
  254. {label:'确认单号',value:this.mainData.billno},
  255. {label:'创建时间',value:this.mainData.billdate},
  256. {label:'状态',value:this.mainData.status},
  257. ]
  258. },
  259. ]
  260. },
  261. createTreeData (array) {
  262. var that = this
  263. let arr = []
  264. function convertToElementTree(node) {
  265. // 新节点
  266. var elNode = {
  267. amount:node['amount'],
  268. attinfos:node['attinfos'],
  269. changeby: node["changeby"],
  270. changedate:node['changedate'],
  271. changeuserid:node['changeuserid'],
  272. confirm_value:node['confirm_value'],
  273. finishby:node['finishby'],
  274. parentid:node['parentid'],
  275. remarks:node['remarks'],
  276. sa_workorder_nodeid:node['sa_workorder_nodeid'],
  277. sa_workorderid:node['sa_workorderid'],
  278. sequence:node['sequence'],
  279. status:node['status'],
  280. textcontent:node['textcontent'],
  281. workname:node['workpresetjson'].workname,
  282. additem:node['workpresetjson'].additem,
  283. addperson:node['workpresetjson'].amountpay,
  284. confirm_options:node['workpresetjson'].confirm_options,
  285. confirm:node['workpresetjson'].confirm,
  286. contractupload:node['workpresetjson'].contractupload,
  287. fileupload:node['workpresetjson'].fileupload,
  288. itemtype:node['workpresetjson'].itemtype,
  289. remarks:node['workpresetjson'].remarks,
  290. required:node['workpresetjson'].required,
  291. textedit:node['workpresetjson'].textedit,
  292. children: [],
  293. }
  294. if (node.child && node.child.length > 0) {
  295. // 如果存在子节点
  296. for (var index = 0; index < node.child.length; index++) {
  297. // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
  298. elNode.children.push(convertToElementTree(node.child[index]));
  299. }
  300. }
  301. return elNode;
  302. }
  303. array.forEach((element) => {
  304. arr.push(convertToElementTree(element))
  305. });
  306. return arr
  307. },
  308. // 监听切换数据,上一页,下一页
  309. pageChange (id,rowindex,tabIndex) {
  310. this.flag = false
  311. tabIndex = this.$route.query.tabIndex
  312. this.$router.replace({path:'/workorderDetail',query:{id:id,rowindex:rowindex,tabIndex:tabIndex}})
  313. this.queryMainData(id)
  314. },
  315. onSuccess(){
  316. this.visible = false
  317. this.queryMainData(this.$route.query.id)
  318. this.$emit('onSuccess')
  319. }
  320. },
  321. mounted () {
  322. this.queryMainData(this.$route.query.id)
  323. },
  324. created() {
  325. }
  326. }
  327. </script>
  328. <style scoped>
  329. </style>