GY06.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <template>
  2. <div class="form-wrap">
  3. <div class="cardwrap">
  4. <div class="title-area">
  5. <span><i class="el-icon-s-order mr5"></i>请选择工艺文件</span>
  6. <div class="search ml10">
  7. <el-input
  8. v-model="search"
  9. placeholder="请输入内容"
  10. suffix-icon="el-icon-search"
  11. ></el-input>
  12. </div>
  13. </div>
  14. <div class="table-area">
  15. <el-table :data="[]" border stripe>
  16. <el-table-column type="index" width="50" />
  17. <el-table-column
  18. v-for="col in columns"
  19. :prop="col.prop"
  20. :key="col.prop"
  21. :label="col.label"
  22. >
  23. </el-table-column>
  24. </el-table>
  25. </div>
  26. </div>
  27. <div class="cardwrap">
  28. <div class="title-area">
  29. <span><i class="el-icon-document mr5"></i>材料信息</span>
  30. </div>
  31. <div class="table-area">
  32. <el-table :data="[]" border stripe>
  33. <el-table-column type="index" width="50" />
  34. <el-table-column
  35. v-for="col in material"
  36. :prop="col.prop"
  37. :key="col.prop"
  38. :label="col.label"
  39. >
  40. </el-table-column>
  41. </el-table>
  42. </div>
  43. </div>
  44. <div class="cardwrap">
  45. <div class="title-area">
  46. <span><i class="el-icon-help mr5"></i>工序</span>
  47. </div>
  48. <div class="node-list">
  49. <div
  50. :class="{
  51. node: true,
  52. currentNode: item.nodeId == currentNodeKey,
  53. }"
  54. v-for="(item, index) of nodeList"
  55. :key="item.num"
  56. @click="shiftNode(item)"
  57. >
  58. <span class="num">>{{ index + 1 }}</span>
  59. <span class="title">{{ item.nodeInfo.name }}</span>
  60. <span class="time">1分钟</span>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. </template>
  66. <script>
  67. import getNodeSequence from "@/utils/bpmn/getNodeSequence";
  68. import { xmlStr2XmlObj } from "@/utils/bpmn/xml";
  69. export default {
  70. name: "GY01",
  71. props: ["formData", "row"],
  72. components: {},
  73. data() {
  74. return {
  75. search: "",
  76. nodeList: [],
  77. currentNodeKey: "",
  78. resFormData: {},
  79. columns: [
  80. {
  81. label: "编号",
  82. prop: "id",
  83. },
  84. {
  85. label: "编者",
  86. prop: "editor",
  87. },
  88. {
  89. label: "时间",
  90. prop: "time",
  91. },
  92. ],
  93. material: [
  94. {
  95. label: "名称",
  96. prop: "name",
  97. },
  98. {
  99. label: "尺寸",
  100. prop: "size",
  101. },
  102. {
  103. label: "规格",
  104. prop: "model",
  105. },
  106. {
  107. label: "数量",
  108. prop: "num",
  109. },
  110. {
  111. label: "备注",
  112. prop: "note",
  113. },
  114. ],
  115. };
  116. },
  117. watch: {
  118. myFormData: {
  119. handler(val) {},
  120. deep: true,
  121. immediate: true,
  122. },
  123. myRow: {
  124. handler(val) {
  125. this.currentNodeKey = val.benTaskNodeKey;
  126. if (val?.bepTaskProcessXmlContent) {
  127. this.nodeList = getNodeSequence(
  128. xmlStr2XmlObj(val.bepTaskProcessXmlContent)
  129. )?.filter((item) => item.nodeInfo.localName != "exceptionTask");
  130. // this.nodeList = getNodeSequence(
  131. // xmlStr2XmlObj(val.bepTaskProcessXmlContent)
  132. // );
  133. console.log(this.nodeList);
  134. }
  135. },
  136. deep: true,
  137. immediate: true,
  138. },
  139. },
  140. computed: {
  141. myFormData() {
  142. return this.formData;
  143. },
  144. myRow() {
  145. return this.row;
  146. },
  147. },
  148. methods: {
  149. async getFormData() {
  150. let formData = {
  151. flag: false,
  152. msg: "",
  153. };
  154. return {
  155. flag: true,
  156. data: this.resFormData,
  157. };
  158. // if(){}
  159. // try {
  160. // let valid = await this.$refs.form.validate();
  161. // if (valid) {
  162. // formData.flag = true;
  163. // formData.data = this.form;
  164. // return formData;
  165. // } else {
  166. // formData.msg = "表单校验异常,请规范填写表单数据";
  167. // return formData;
  168. // }
  169. // } catch (error) {
  170. // // console.log(error);
  171. // formData.msg = "表单校验异常,请规范填写表单数据";
  172. // return formData;
  173. // }
  174. },
  175. async shiftNode(item) {
  176. if (item.nodeId == this.currentNodeKey) return;
  177. this.resFormData = {
  178. taskProcessKey: this.row.bepTaskKey,
  179. taskNodeKey: this.currentNodeKey,
  180. taskBackNodeKey: item.nodeId,
  181. };
  182. this.currentNodeKey = item.nodeId;
  183. // try {
  184. // let res = await this.$modal.confirm(
  185. // "是否确认切换流程至<" + item.nodeInfo.name + ">异常?"
  186. // );
  187. // console.log(res, item, this.row);
  188. // let payLoad = {
  189. // taskProcessKey: this.row.bepTaskKey,
  190. // taskNodeKey: this.currentNodeKey,
  191. // taskBackNodeKey: item.nodeId,
  192. // };
  193. // } catch (error) {
  194. // this.$message.info("取消成功");
  195. // }
  196. },
  197. },
  198. };
  199. </script>
  200. <style scoped lang="scss">
  201. .form-wrap {
  202. display: flex;
  203. flex-direction: column;
  204. width: 100%;
  205. .cardwrap {
  206. display: flex;
  207. flex-direction: column;
  208. width: 100%;
  209. padding-bottom: 20px;
  210. .title-area {
  211. display: flex;
  212. align-items: center;
  213. padding-bottom: 5px;
  214. font-size: 16px;
  215. border-bottom: 2px solid rgba(0, 0, 0, 0.404);
  216. box-sizing: border-box;
  217. }
  218. .table-area {
  219. padding-top: 10px;
  220. }
  221. .node-list {
  222. display: flex;
  223. flex-wrap: wrap;
  224. padding-top: 10px;
  225. .node {
  226. width: 33.3333%;
  227. height: 50px;
  228. display: flex;
  229. align-items: center;
  230. border-bottom: 1px dotted gray;
  231. padding: 0 5px;
  232. &:hover {
  233. border: 1px dotted rgb(0, 195, 255);
  234. background-color: rgba(70, 194, 231, 0.63);
  235. }
  236. .num {
  237. color: #40c3a8;
  238. font-size: 16px;
  239. margin-right: 5px;
  240. }
  241. .title {
  242. /* // color: #ececee34; */
  243. font-size: 14px;
  244. flex: 1;
  245. /* // ma */
  246. }
  247. .time {
  248. font-size: 12px;
  249. color: rgba(48, 44, 44, 0.247);
  250. margin-right: 10px;
  251. }
  252. }
  253. .currentNode {
  254. background-color: #7dec8f !important;
  255. }
  256. }
  257. }
  258. }
  259. </style>