user-edit.vue 10 KB

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