create.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. <template>
  2. <ele-modal :visible.sync="visible" :title="title" width="45vw" append-to-body @close="cancel">
  3. <div class="switch" v-if="type=='detail'">
  4. <div class="switch_left">
  5. <ul>
  6. <li
  7. v-for="item in tabOptions"
  8. :key="item.key"
  9. :class="{ active: activeComp == item.key }"
  10. @click="activeComp = item.key"
  11. >
  12. {{ item.name }}
  13. </li>
  14. </ul>
  15. </div>
  16. </div>
  17. <el-form
  18. ref="form"
  19. :model="form"
  20. :rules="rules"
  21. label-width="100px"
  22. class="create-form"
  23. v-if="activeComp=='main'"
  24. >
  25. <headerTitle title="基本信息" style="margin-top: 15px"></headerTitle>
  26. <el-row :gutter="15">
  27. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  28. <el-form-item label="类型:" prop="type">
  29. <DictSelection
  30. dictName="异常类型"
  31. v-model="form.type"
  32. :disabled="type == 'detail'"
  33. ></DictSelection>
  34. </el-form-item>
  35. </el-col>
  36. <el-col v-bind="styleResponsive ? { lg: 8, md: 24 } : { span: 8 }">
  37. <el-form-item label="编码:" prop="code">
  38. <el-input v-model="form.code" disabled />
  39. </el-form-item>
  40. </el-col>
  41. <el-col v-bind="styleResponsive ? { lg: 16, md: 24 } : { span: 16 }">
  42. <el-form-item label="名称:" prop="name">
  43. <el-input v-model="form.name" :disabled="type == 'detail'" />
  44. </el-form-item>
  45. </el-col>
  46. <el-col v-bind="styleResponsive ? { lg: 16, md: 24 } : { span: 16 }">
  47. <el-form-item label="异常描述:">
  48. <el-input
  49. v-model="form.describes"
  50. type="textarea"
  51. :rows="2"
  52. :disabled="type == 'detail'"
  53. />
  54. </el-form-item>
  55. </el-col>
  56. <el-col v-bind="styleResponsive ? { lg: 16, md: 24 } : { span: 16 }">
  57. <el-form-item label="关联:" prop="relationType">
  58. <el-select
  59. :disabled="type == 'detail'"
  60. v-model="form.relationType"
  61. placeholder="请选择"
  62. style="width: 100%"
  63. clearable
  64. @input="addProduct"
  65. >
  66. <el-option
  67. v-for="item in options"
  68. :key="item.value"
  69. :label="item.label"
  70. :value="item.value"
  71. >
  72. </el-option>
  73. </el-select>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="16">
  77. <el-form-item prop="accessory" label="上传附件">
  78. <fileUpload
  79. v-model="form.accessory"
  80. module="main"
  81. :limit="5"
  82. :disabled="type == 'detail'"
  83. :showLib="false"
  84. />
  85. </el-form-item>
  86. </el-col>
  87. </el-row>
  88. <headerTitle
  89. v-if="form.relationJson.code"
  90. style="margin-top: 15px"
  91. :title="getTitle() + '信息'"
  92. ></headerTitle>
  93. <el-row :gutter="15" v-if="form.relationJson.code">
  94. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  95. <el-form-item :label="'生产' + getTitle() + '号'">
  96. <el-input v-model="form.relationJson.code" disabled />
  97. </el-form-item>
  98. </el-col>
  99. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  100. <el-form-item label="计划编号">
  101. <el-input v-model="form.relationJson.productionPlanCode" disabled />
  102. </el-form-item>
  103. </el-col>
  104. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  105. <el-form-item label="计划类型">
  106. <el-input v-model="form.relationJson.planTypeName" disabled />
  107. </el-form-item>
  108. </el-col>
  109. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  110. <el-form-item label="工艺路线">
  111. <el-input v-model="form.relationJson.produceRoutingName" disabled />
  112. </el-form-item>
  113. </el-col>
  114. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  115. <el-form-item label="工序">
  116. <el-input v-model="form.relationJson.produceVersionName" disabled />
  117. </el-form-item>
  118. </el-col>
  119. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  120. <el-form-item label="产品编码">
  121. <el-input v-model="form.relationJson.productCode" disabled />
  122. </el-form-item>
  123. </el-col>
  124. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  125. <el-form-item label="产品名称">
  126. <el-input v-model="form.relationJson.productName" disabled />
  127. </el-form-item>
  128. </el-col>
  129. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  130. <el-form-item label="牌号">
  131. <el-input v-model="form.relationJson.brandNo" disabled />
  132. </el-form-item>
  133. </el-col>
  134. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  135. <el-form-item label="型号">
  136. <el-input v-model="form.relationJson.model" disabled />
  137. </el-form-item>
  138. </el-col>
  139. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  140. <el-form-item label="批号">
  141. <el-input v-model="form.relationJson.batchNo" disabled />
  142. </el-form-item>
  143. </el-col>
  144. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  145. <el-form-item label="要求生产数量">
  146. <el-input v-model="form.relationJson.requiredFormingNum" disabled />
  147. </el-form-item>
  148. </el-col>
  149. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  150. <el-form-item label="要求生产重量">
  151. <el-input v-model="form.relationJson.sumOrderWeight" disabled />
  152. </el-form-item>
  153. </el-col>
  154. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  155. <el-form-item label="计划开始时间">
  156. <el-input v-model="form.relationJson.reqMoldTime" disabled />
  157. </el-form-item>
  158. </el-col>
  159. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  160. <el-form-item label="已生产数量">
  161. <el-input v-model="form.relationJson.formedNum" disabled />
  162. </el-form-item>
  163. </el-col>
  164. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  165. <el-form-item label="已生产重量">
  166. <el-input v-model="form.relationJson.formedWeight" disabled />
  167. </el-form-item>
  168. </el-col>
  169. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  170. <el-form-item label="计划结束时间">
  171. <el-input v-model="form.relationJson.deliveryTime" disabled />
  172. </el-form-item>
  173. </el-col>
  174. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  175. <el-form-item label="状态">
  176. <el-input v-model="form.relationJson.status" disabled />
  177. </el-form-item>
  178. </el-col>
  179. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  180. <el-form-item label="班组">
  181. <el-input v-model="form.relationJson.teamName" disabled />
  182. </el-form-item>
  183. </el-col>
  184. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  185. <el-form-item label="优先级">
  186. <el-input v-model="form.relationJson.priority" disabled />
  187. </el-form-item>
  188. </el-col>
  189. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  190. <el-form-item label="创建人">
  191. <el-input v-model="form.relationJson.createUserName" disabled />
  192. </el-form-item>
  193. </el-col>
  194. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  195. <el-form-item label="创建时间">
  196. <el-input v-model="form.relationJson.createTime" disabled />
  197. </el-form-item>
  198. </el-col>
  199. </el-row>
  200. <headerTitle
  201. v-if="form.approvalProcess.length > 0"
  202. title="异常判定结果"
  203. style="margin-top: 15px"
  204. ></headerTitle>
  205. <el-row
  206. :gutter="15"
  207. v-for="(item, index) in form.approvalProcess"
  208. :key="index"
  209. >
  210. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  211. <el-form-item label="审核人:">
  212. <el-input :value="item.auditor" disabled />
  213. </el-form-item>
  214. </el-col>
  215. <el-col v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }">
  216. <el-form-item label="异常判定:">
  217. <el-input :value="item.exceptionDetermine" disabled />
  218. </el-form-item>
  219. </el-col>
  220. <el-col
  221. v-if="item.exceptionDispose"
  222. v-bind="styleResponsive ? { lg: 8, md: 12 } : { span: 8 }"
  223. >
  224. <el-form-item label="异常处置:">
  225. <el-input :value="item.exceptionDispose" disabled />
  226. </el-form-item> </el-col
  227. ></el-row>
  228. </el-form>
  229. <template v-slot:footer>
  230. <el-button @click="cancel">取消</el-button>
  231. <el-button
  232. type="primary"
  233. @click="save"
  234. :loading="loading"
  235. v-if="type != 'detail'"
  236. >
  237. 确定
  238. </el-button>
  239. </template>
  240. <detail v-if="activeComp === 'bpm' && form.processInstanceId"
  241. :id="form.processInstanceId"></detail>
  242. <productionPlan ref="productionPlanRef" @choose="choose" />
  243. <workOrder ref="workOrderRef" @choose="choose" />
  244. <produceOrder ref="produceOrderRef" @choose="choose" />
  245. </ele-modal>
  246. </template>
  247. <script>
  248. import { save } from '@/api/exceptionManagement/index';
  249. import { transitionData } from './transition';
  250. import productionPlan from './productionPlan';
  251. import workOrder from './workOrder';
  252. import produceOrder from './produceOrder';
  253. import fileUpload from '@/components/upload/fileUpload';
  254. import detail from '@/views/bpm/processInstance/detail.vue';
  255. const defaultForm = function () {
  256. return {
  257. accessory: [],
  258. images: [],
  259. code: '',
  260. type: '',
  261. relationType: '', //关联类型 1 计划 2订单 3工单
  262. relationId: '', //关联id
  263. relationCode: '',
  264. exceptionDetermine: '', //异常判定
  265. exceptionDispose: '', //异常处置
  266. approvalStatus: '', //审批状态
  267. approvalOpinion: '', //审批意见
  268. exceptionClose: '', //异常关闭 0否 1 是
  269. createUserName: '', //创建人名称
  270. id: '',
  271. describes: '',
  272. createTime: '',
  273. relationJson: [],
  274. approvalProcess:[]
  275. };
  276. };
  277. export default {
  278. components: { fileUpload, productionPlan, workOrder, produceOrder, detail },
  279. data() {
  280. return {
  281. visible: false,
  282. loading: false,
  283. activeComp: 'main',
  284. tabOptions: [
  285. { key: 'main', name: '异常详情' },
  286. { key: 'bpm', name: '流程详情' }
  287. ],
  288. form: { ...defaultForm() },
  289. // 表单验证规则
  290. rules: {
  291. type: [{ required: true, message: '请选择', trigger: 'change' }],
  292. name: [{ required: true, message: '请选择', trigger: 'change' }],
  293. relationType: [{ required: true, message: '请选择', trigger: 'change' }]
  294. },
  295. type: '',
  296. title: '创建',
  297. options: [
  298. { label: '生产计划', value: 1 },
  299. { label: '生产订单', value: 2 },
  300. { label: '生产工单', value: 3 }
  301. ],
  302. planType: [
  303. { label: '所有计划类型', value: null },
  304. { label: '内销计划', value: '1' },
  305. { label: '外销计划', value: '2' },
  306. { label: '预制计划', value: '3' }
  307. ]
  308. };
  309. },
  310. computed: {
  311. // 是否开启响应式布局
  312. styleResponsive() {
  313. return this.$store.state.theme.styleResponsive;
  314. }
  315. },
  316. created() {},
  317. methods: {
  318. getTitle() {
  319. return this.form.relationType == 1
  320. ? '计划'
  321. : this.form.relationType == 2
  322. ? '订单'
  323. : '工单';
  324. },
  325. open(type, row) {
  326. this.visible = true;
  327. this.activeComp= 'main',
  328. this.type = type;
  329. if (type != 'add') {
  330. this.form = JSON.parse(JSON.stringify(row));
  331. this.form.relationJson = this.form.relationJson[0];
  332. this.form.type = this.form.type + '';
  333. }
  334. this.title = type == 'add' ? '新增' : type == 'edit' ? '修改' : '详情';
  335. },
  336. addProduct() {
  337. if (this.form.relationType == 1) {
  338. this.$refs.productionPlanRef.open();
  339. } else if (this.form.relationType == 2) {
  340. this.$refs.workOrderRef.open();
  341. } else if (this.form.relationType == 3) {
  342. this.$refs.produceOrderRef.open();
  343. }
  344. },
  345. cancel() {
  346. this.form = { ...defaultForm() };
  347. this.visible = false;
  348. },
  349. choose(data) {
  350. this.form.relationJson = JSON.parse(
  351. JSON.stringify(transitionData(data, this.form.relationType))
  352. );
  353. this.form.relationId = data.relationId;
  354. this.form.relationCode = data.code;
  355. },
  356. /* 保存编辑 */
  357. save() {
  358. this.$refs.form.validate((valid) => {
  359. if (!valid) {
  360. return false;
  361. }
  362. if (!this.form.relationJson.code) {
  363. this.$message.error('请选择' + this.getTitle());
  364. return;
  365. }
  366. // for (let key in this.form) {
  367. // if (key.includes('create')) {
  368. // this.form[key] = '';
  369. // }
  370. // }
  371. this.loading = true;
  372. let data = JSON.parse(JSON.stringify(this.form));
  373. data.relationJson = [data.relationJson];
  374. save(data)
  375. .then((res) => {
  376. this.loading = false;
  377. this.$message.success('成功');
  378. this.cancel();
  379. this.$emit('refresh');
  380. })
  381. .catch((e) => {
  382. this.loading = false;
  383. });
  384. });
  385. }
  386. }
  387. };
  388. </script>
  389. <style lang="scss" scoped>
  390. .basic-details-title {
  391. margin: 10px 0;
  392. }
  393. .add-product {
  394. width: 100%;
  395. display: flex;
  396. align-items: center;
  397. justify-content: flex-end;
  398. font-size: 30px;
  399. color: #1890ff;
  400. margin: 10px 0;
  401. cursor: pointer;
  402. }
  403. .create-form .el-form-item {
  404. margin-bottom: 15px !important;
  405. }
  406. </style>