user-edit.vue 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <!-- 用户编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. width="960px"
  5. :visible="visible"
  6. :append-to-body="true"
  7. :close-on-click-modal="true"
  8. custom-class="ele-dialog-form"
  9. :title="isUpdate ? '修改工序' : '添加工序'"
  10. @update:visible="updateVisible"
  11. >
  12. <header-title title="基本信息"></header-title>
  13. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  14. <el-row>
  15. <el-col :span="8">
  16. <el-form-item label="工序编码:" prop="code">
  17. <el-input
  18. clearable
  19. disabled
  20. v-model="form.code"
  21. placeholder="请输入"
  22. />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="8">
  26. <el-form-item label="工序名称:" prop="name">
  27. <el-input v-model="form.name" clearable placeholder="请输入" />
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="8">
  31. <el-form-item label="控制码:" prop="controlId">
  32. <el-input v-model="form.controlId" placeholder="请输入" />
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="8">
  36. <el-form-item label="工作中心:" prop="workCenterId">
  37. <el-input placeholder="请输入" v-model="form.workCenterId" />
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="8">
  41. <el-form-item label="工序时间单位:" prop="timeUnit">
  42. <el-select v-model="form.timeUnit">
  43. <el-option
  44. v-for="item in timeType"
  45. :key="item.code"
  46. :label="item.label"
  47. :value="item.code"
  48. >
  49. </el-option>
  50. </el-select>
  51. </el-form-item>
  52. </el-col>
  53. </el-row>
  54. </el-form>
  55. <header-title title="工序节拍时间"></header-title>
  56. <el-form :model="form" label-width="120px">
  57. <el-row>
  58. <el-col :span="8">
  59. <el-form-item label="工序休息时长:">
  60. <el-input v-model="form.workBeat.restTimes" placeholder="请输入" />
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="8">
  64. <el-form-item label="工序准备时长:">
  65. <el-input
  66. v-model="form.workBeat.preTimes"
  67. clearable
  68. placeholder="请输入"
  69. />
  70. </el-form-item>
  71. </el-col>
  72. <el-col :span="8">
  73. <el-form-item label="设备生产时长:">
  74. <el-input v-model="form.workBeat.proTimes" placeholder="请输入" />
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="8">
  78. <el-form-item label="其他时长:">
  79. <el-input placeholder="请输入" v-model="form.workBeat.otherTimes" />
  80. </el-form-item>
  81. </el-col>
  82. <el-col :span="8">
  83. <el-form-item label="节拍时间:">
  84. <el-input disabled :value="totalTime"></el-input>
  85. </el-form-item>
  86. </el-col>
  87. </el-row>
  88. </el-form>
  89. <header-title title="工序间隔时间"></header-title>
  90. <el-form :model="form" label-width="200px">
  91. <el-row>
  92. <el-col :span="24">
  93. <el-col :span="12">
  94. <el-form-item label="间隔策略:">
  95. <el-select v-model="form.intervalTime.tactics">
  96. <el-option
  97. v-for="item in tacticsType"
  98. :key="item.code"
  99. :label="item.label"
  100. :value="item.code"
  101. >
  102. </el-option>
  103. </el-select>
  104. </el-form-item>
  105. </el-col>
  106. </el-col>
  107. <el-col :span="12">
  108. <el-form-item label="下工序标准准备时间:">
  109. <el-input
  110. v-model="form.intervalTime.nextStandardPreTime"
  111. placeholder="请输入"
  112. />
  113. </el-form-item>
  114. </el-col>
  115. <el-col :span="12">
  116. <el-form-item label="下工序最短准备时间:">
  117. <el-input
  118. v-model="form.intervalTime.nextShortPreTime"
  119. placeholder="请输入"
  120. />
  121. </el-form-item>
  122. </el-col>
  123. <el-col :span="12">
  124. <el-form-item label="本工序标准等待时间:">
  125. <el-input
  126. v-model="form.intervalTime.thisStandardWaitTime"
  127. placeholder="请输入"
  128. />
  129. </el-form-item>
  130. </el-col>
  131. <el-col :span="12">
  132. <el-form-item label="本工序最短准备时间:">
  133. <el-input
  134. v-model="form.intervalTime.thisShortPreTime"
  135. placeholder="请输入"
  136. />
  137. </el-form-item>
  138. </el-col>
  139. <el-col :span="12">
  140. <el-form-item label="本工序结束后标准周转时间:">
  141. <el-input
  142. v-model="form.intervalTime.thisStandardBoatTime"
  143. placeholder="请输入"
  144. />
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="12">
  148. <el-form-item label="本工序结束后周转最短时间:">
  149. <el-input
  150. v-model="form.intervalTime.thisShortBoatTime"
  151. placeholder="请输入"
  152. />
  153. </el-form-item>
  154. </el-col>
  155. </el-row>
  156. </el-form>
  157. <template v-slot:footer>
  158. <el-button @click="updateVisible(false)">取消</el-button>
  159. <el-button type="primary" :loading="loading" @click="save">
  160. 保存
  161. </el-button>
  162. </template>
  163. </ele-modal>
  164. </template>
  165. <script>
  166. import producetask from '@/api/technology/production';
  167. export default {
  168. props: {
  169. // 弹窗是否打开
  170. visible: Boolean,
  171. // 修改回显的数据
  172. data: Object
  173. },
  174. data() {
  175. const defaultForm = {
  176. id: null,
  177. code: '',
  178. name: '',
  179. controlId: '',
  180. workCenterId: '',
  181. timeUnit: '',
  182. intervalTime: {
  183. nextShortPreTime: '', // 时间单位转换后的下一个短周期的时间,格式为YYYY-MM-DDTHH'
  184. nextStandardPreTime: '', // 时间单位转换后的下一个正式的周期的时间,格式为YYYY-MM-DD'
  185. tactics: 1, // 周期工艺描述,格式为JSON字符串或数组形式的对象形式的数据类
  186. thisShortBoatTime: '',
  187. thisShortPreTime: '',
  188. thisStandardBoatTime: '',
  189. thisStandardWaitTime: ''
  190. },
  191. workBeat: {
  192. beatTimes: '',
  193. otherTimes: '',
  194. preTimes: '',
  195. proTimes: '',
  196. restTimes: ''
  197. }
  198. };
  199. return {
  200. defaultForm,
  201. // 表单数据
  202. form: { ...defaultForm },
  203. timeType: [
  204. { code: 1, label: '分' },
  205. { code: 2, label: '时' }
  206. ],
  207. tacticsType: [
  208. { code: 1, label: '标准时间' },
  209. { code: 2, label: '最短时间' }
  210. ],
  211. // 表单验证规则
  212. rules: {
  213. name: [
  214. { required: true, message: '请输入工序名称', trigger: 'blur' }
  215. ],
  216. code: [{ required: true, trigger: 'change' }],
  217. controlId: [
  218. { required: true, message: '请选择控制码', trigger: 'blur' }
  219. ],
  220. workCenterId: [
  221. { required: true, message: '请选择工作中心', trigger: 'blur' }
  222. ],
  223. timeUnit: [
  224. { required: true, message: '请选择时间单位', trigger: 'blur' }
  225. ]
  226. },
  227. // 提交状态
  228. loading: false,
  229. // 是否是修改
  230. isUpdate: false
  231. };
  232. },
  233. computed: {
  234. totalTime() {
  235. let to =
  236. (-this.form.workBeat.restTimes +
  237. -this.form.workBeat.preTimes +
  238. -this.form.workBeat.proTimes +
  239. -this.form.workBeat.otherTimes) *
  240. -1;
  241. return to;
  242. },
  243. // 是否开启响应式布局
  244. styleResponsive() {
  245. return this.$store.state.theme.styleResponsive;
  246. }
  247. },
  248. methods: {
  249. /* 保存编辑 */
  250. save() {
  251. this.$refs.form.validate((valid) => {
  252. if (!valid) {
  253. return false;
  254. }
  255. if (!this.isUpdate) {
  256. delete this.form.id;
  257. }
  258. this.form.workBeat.beatTimes = this.totalTime;
  259. this.loading = true;
  260. producetask
  261. .save(this.form)
  262. .then((msg) => {
  263. this.form = {};
  264. this.loading = false;
  265. this.$message.success(msg);
  266. this.updateVisible(false);
  267. this.$emit('done');
  268. })
  269. .catch((e) => {
  270. this.loading = false;
  271. // this.$message.error(e.message);
  272. });
  273. });
  274. },
  275. /* 更新visible */
  276. updateVisible(value) {
  277. this.$emit('update:visible', value);
  278. }
  279. },
  280. watch: {
  281. async visible(visible) {
  282. if (visible) {
  283. if (this.data) {
  284. console.log(111111);
  285. const res = await producetask.getById(this.data.id);
  286. this.$util.assignObject(this.form, {
  287. ...res
  288. });
  289. this.isUpdate = true;
  290. } else {
  291. const res = await producetask.getCode();
  292. this.form.code = res;
  293. this.isUpdate = false;
  294. }
  295. } else {
  296. this.$refs.form.clearValidate();
  297. this.form = { ...this.defaultForm };
  298. }
  299. }
  300. }
  301. };
  302. </script>