user-edit.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. <!-- 用户编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. width="1060px"
  5. :visible="visible"
  6. v-if="visible"
  7. :append-to-body="true"
  8. :close-on-click-modal="false"
  9. custom-class="ele-dialog-form"
  10. :title="isUpdate ? '修改工艺路线' : '添加工艺路线'"
  11. @update:visible="updateVisible"
  12. :maxable="true"
  13. >
  14. <header-title title="基本信息"> </header-title>
  15. <el-form ref="form" :model="form" :rules="rules" label-width="140px">
  16. <el-row>
  17. <el-col :span="8">
  18. <el-form-item label="工艺路线编码:">
  19. <el-input
  20. clearable
  21. disabled
  22. v-model="form.code"
  23. placeholder="请输入"
  24. />
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="8">
  28. <el-form-item label="工艺路线名称:" prop="name">
  29. <el-input v-model="form.name" clearable placeholder="请输入" />
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="8">
  33. <el-form-item label="所属工厂:" prop="factoryId">
  34. <el-select
  35. v-model="form.factoryId"
  36. placeholder="请选择"
  37. filterable
  38. :disabled="isUpdate"
  39. >
  40. <el-option
  41. v-for="item in fList"
  42. :key="item.id"
  43. :label="item.name"
  44. :value="item.id"
  45. >
  46. </el-option>
  47. </el-select>
  48. </el-form-item>
  49. </el-col>
  50. <!-- <el-col :span="8">
  51. <el-form-item label="工艺类型:" prop="produceVersionId">
  52. <el-select v-model="form.produceVersionId" filterable placeholder="请选择" :style="{ width: '100%' }"
  53. :disabled="isUpdate">
  54. <el-option v-for="item in versionList" :key="item.code" :label="item.code + '-' + item.name"
  55. :value="item.id">
  56. </el-option>
  57. </el-select>
  58. </el-form-item>
  59. </el-col> -->
  60. <el-col :span="8">
  61. <el-form-item label="工艺路线版本:" prop="version">
  62. <el-input disabled v-model="form.version" />
  63. </el-form-item>
  64. </el-col>
  65. <el-col :span="8">
  66. <el-form-item label="状态:" prop="status">
  67. <el-select v-model="form.status" placeholder="" filterable>
  68. <el-option
  69. v-for="item in statusList"
  70. :key="item.value"
  71. :label="item.label"
  72. :value="item.value"
  73. >
  74. </el-option>
  75. </el-select>
  76. </el-form-item>
  77. </el-col>
  78. <el-col :span="8" v-if="isUpdate">
  79. <el-form-item label="版本是否升级:" prop="versionUpgradeType">
  80. <el-select v-model="form.versionUpgradeType" placeholder="请选择">
  81. <el-option label="不升级" :value="0" />
  82. <el-option label="小版本" :value="1" />
  83. <el-option label="大版本" :value="2" />
  84. </el-select>
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="8">
  88. <el-form-item label="排序:" prop="sort">
  89. <el-input v-model="form.sort" type="number" />
  90. </el-form-item>
  91. </el-col>
  92. <!-- <el-col :span="8">
  93. <el-form-item label="类型:" prop="routeType">
  94. <el-select v-model="form.routeType" placeholder="请选择">
  95. <el-option label="生产" :value="1" />
  96. <el-option label="委外" :value="2" />
  97. <el-option label="质检" :value="3" />
  98. </el-select>
  99. </el-form-item>
  100. </el-col> -->
  101. </el-row>
  102. </el-form>
  103. <user-taskinstance
  104. :isEdit="isUpdate"
  105. ref="taskRef"
  106. :taskInfo="form"
  107. @taskList="taskList"
  108. @remove="remove"
  109. />
  110. <template v-slot:footer>
  111. <el-button type="primary" v-click-once @click="save"> 确定 </el-button>
  112. </template>
  113. </ele-modal>
  114. </template>
  115. <script>
  116. import route from '@/api/technology/route';
  117. import { pageList } from '@/api/technology/version/version.js';
  118. import UserTaskinstance from './user-taskinstance.vue';
  119. export default {
  120. components: {
  121. UserTaskinstance
  122. },
  123. props: {
  124. // 弹窗是否打开
  125. visible: Boolean,
  126. isUpdate: Boolean,
  127. // 修改回显的数据
  128. data: Object,
  129. isBomRoute: {
  130. type: Boolean,
  131. default: false
  132. }
  133. },
  134. data() {
  135. const defaultForm = {
  136. code: '',
  137. name: '',
  138. factoryId: '',
  139. status: 1,
  140. categoryId: '',
  141. produceVersionId: '',
  142. version: '1.0',
  143. id: '',
  144. // routeType: '',
  145. versionUpgradeType: 0
  146. };
  147. return {
  148. defaultForm,
  149. fList: [], //仓库列表
  150. // 表单数据
  151. form: { ...defaultForm },
  152. statusList: [
  153. { label: '草稿', value: -1 },
  154. { label: '失效', value: 0 },
  155. { label: '生效', value: 1 }
  156. ],
  157. // 表单验证规则
  158. rules: {
  159. name: [
  160. { required: true, message: '请输入工艺路线名称', trigger: 'blur' }
  161. ],
  162. code: [
  163. { required: true, message: '请输入工艺路线编码', trigger: 'blur' }
  164. ],
  165. factoryId: [
  166. { required: true, message: '请输入工艺路线', trigger: 'blur' }
  167. ],
  168. status: [
  169. { required: true, message: '请输入工艺路线版本', trigger: 'blur' }
  170. ],
  171. version: [
  172. { required: true, message: '请输入工艺路线版本', trigger: 'blur' }
  173. ],
  174. produceVersionId: [
  175. { required: true, message: '请输入工艺类型', trigger: 'blur' }
  176. ]
  177. // routeType: [
  178. // { required: true, message: '请选择类型', trigger: 'blur' }
  179. // ]
  180. },
  181. versionList: [],
  182. // 提交状态
  183. // 是否是修改
  184. isUpdate: false,
  185. taskInstanceList: [],
  186. removeList: []
  187. };
  188. },
  189. mounted() {
  190. console.log(this.isBomRoute, 'isBomRoute');
  191. if (this.isBomRoute) {
  192. this.form.status = 1;
  193. }
  194. },
  195. computed: {
  196. statusTitle() {
  197. return this.isUpdate ? '修改' : '保存';
  198. },
  199. // 是否开启响应式布局
  200. styleResponsive() {
  201. return this.$store.state.theme.styleResponsive;
  202. }
  203. },
  204. methods: {
  205. /* 保存编辑 */
  206. save() {
  207. this.$refs.form.validate((valid) => {
  208. if (!valid) {
  209. return false;
  210. }
  211. this.$refs.taskRef.getTaskList();
  212. if (!this.data) {
  213. delete this.form.id;
  214. }
  215. if (this.taskInstanceList.length == 0) {
  216. this.$message.warning('至少配置一条工序才能保存');
  217. return;
  218. }
  219. const isValid = this.validateFieldUniqueness(
  220. this.taskInstanceList,
  221. 'orderNum'
  222. );
  223. if (!isValid) {
  224. return;
  225. }
  226. let isFalse = this.hasPropertyEqualToSeven(
  227. this.taskInstanceList,
  228. 'type'
  229. );
  230. if (isFalse) {
  231. let _arr = JSON.parse(JSON.stringify(this.taskInstanceList));
  232. _arr.sort((a, b) => a.orderNum - b.orderNum);
  233. if (_arr[0].type != 7) {
  234. this.$message.warning('有生产准备工序,请将生产准备放在首位');
  235. return;
  236. }
  237. }
  238. let param = {
  239. taskInstanceList: this.taskInstanceList,
  240. routingInfo: this.form,
  241. removeList: this.removeList
  242. };
  243. route
  244. .taskinstanceSave(param)
  245. .then((res) => {
  246. console.log(res, 'msg77777');
  247. // if (msg) {
  248. this.$message.success(res.message);
  249. this.updateVisible(false);
  250. this.$emit('done', res.data);
  251. // }
  252. })
  253. .finally(() => {});
  254. });
  255. },
  256. hasPropertyEqualToSeven(arr, property) {
  257. for (let i = 0; i < arr.length; i++) {
  258. if (
  259. Object.prototype.hasOwnProperty.call(arr[i], property) &&
  260. arr[i][property] === 7
  261. ) {
  262. return true; // 找到属性等于7的对象
  263. }
  264. }
  265. return false; // 没有找到属性等于7的对象
  266. },
  267. validateFieldUniqueness(array, fieldName) {
  268. const seenValues = new Set();
  269. for (const item of array) {
  270. if (!item[fieldName]) {
  271. this.$message.warning(` 排序不能为空,`);
  272. return false;
  273. }
  274. if (seenValues.has(item[fieldName])) {
  275. this.$message.warning(`排序不能重复,`);
  276. return false;
  277. }
  278. seenValues.add(item[fieldName]);
  279. }
  280. return true;
  281. },
  282. async getVersionList() {
  283. const res = await pageList({
  284. pageNum: 1,
  285. size: 100
  286. });
  287. this.versionList = res.list;
  288. },
  289. /* 更新visible */
  290. updateVisible(value) {
  291. this.$emit('update:visible', value);
  292. },
  293. taskList(list) {
  294. this.taskInstanceList = list;
  295. },
  296. remove(list) {
  297. this.removeList = list;
  298. }
  299. },
  300. watch: {
  301. async visible(visible) {
  302. if (visible) {
  303. this.getVersionList();
  304. const res = await route.Flist({
  305. pageNum: 1,
  306. size: -1,
  307. type: 1
  308. });
  309. this.fList = res.list;
  310. if (this.data) {
  311. const res = await route.getById(this.data.id);
  312. this.$util.assignObject(this.form, {
  313. ...res,
  314. versionUpgradeType: 0
  315. });
  316. this.isUpdate = true;
  317. } else {
  318. // const res = await route.getCode();
  319. // this.form.code = res;
  320. // this.isUpdate = false;
  321. }
  322. this.$nextTick(() => {
  323. this.$refs.taskRef.getList();
  324. });
  325. } else {
  326. this.$refs.form.clearValidate();
  327. this.form = { ...this.defaultForm };
  328. }
  329. },
  330. isUpdate(v) {
  331. console.log(v, 66666);
  332. this.isUpdate = v;
  333. }
  334. }
  335. };
  336. </script>