createError.vue 14 KB

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