node-edit-normal.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. <template>
  2. <!-- 开始、生产节点 -->
  3. <div>
  4. <el-form
  5. :model="form"
  6. ref="form"
  7. :rules="rules"
  8. label-width="100px"
  9. >
  10. <el-form-item label="工时单价">
  11. <el-input
  12. v-model="form.quotedPrice"
  13. placeholder="工时单价"
  14. :disabled="disabled"
  15. ></el-input>
  16. </el-form-item>
  17. <el-form-item label="备注" prop="notes">
  18. <el-input
  19. v-model="form.notes"
  20. :disabled="disabled || selectOperator"
  21. ></el-input>
  22. </el-form-item>
  23. <el-form-item label="工序要求" prop="require">
  24. <el-input
  25. v-model="form.require"
  26. :disabled="disabled || selectOperator"
  27. ></el-input>
  28. </el-form-item>
  29. <el-form-item label="工序特性" prop="process">
  30. <el-input
  31. v-model="form.process"
  32. :disabled="disabled || selectOperator"
  33. ></el-input>
  34. </el-form-item>
  35. <el-form-item
  36. label="所需工时"
  37. prop="preTaskTime"
  38. >
  39. <el-input
  40. v-model="form.preTaskTime"
  41. :disabled="disabled || selectOperator"
  42. oninput="value=value.replace(/[^0-9.]/g,'')"
  43. >
  44. <i slot="suffix" style="font-style: normal; margin-right: 10px">h</i>
  45. </el-input>
  46. </el-form-item>
  47. <el-form-item label="是否编程" prop="isProgramme" v-if="!disabled && !selectOperator">
  48. <el-radio-group v-model="form.isProgramme">
  49. <el-radio :label="2">是</el-radio>
  50. <el-radio :label="1">否</el-radio>
  51. </el-radio-group>
  52. </el-form-item>
  53. <el-form-item label="要求完成时间" prop="planCompletionTime" v-if="selectOperator">
  54. <el-date-picker
  55. v-model="form.planCompletionTime"
  56. value-format="yyyy-MM-dd"
  57. type="date"
  58. >
  59. </el-date-picker>
  60. </el-form-item>
  61. <el-form-item label="操作人" v-if="form.operatorName && !selectOperator">
  62. <el-input
  63. :disabled="disabled && selectOperator || !isEdit"
  64. v-model="form.operatorName"
  65. ></el-input>
  66. </el-form-item>
  67. <el-form-item
  68. label="操作人"
  69. prop="operatorId"
  70. v-if="selectOperator"
  71. >
  72. <el-select
  73. v-model="form.operatorId"
  74. :disabled="disabled && selectOperator || !isEdit"
  75. multiple
  76. placeholder="请选择"
  77. style="width: 100%"
  78. >
  79. <el-option
  80. v-for="item in operatorIdOptions"
  81. :key="item.userId"
  82. :label="item.name"
  83. :value="item.userId"
  84. ></el-option>
  85. </el-select>
  86. </el-form-item>
  87. <el-form-item label="附件" prop="attachList" v-if="!disabled && !selectOperator">
  88. <upload-component
  89. :accept="'*'"
  90. v-model="form.attachList"
  91. :file-obj-list="form.attachList"
  92. />
  93. </el-form-item>
  94. <el-form-item v-else prop="attachList">
  95. <upload-component
  96. :display="true"
  97. :accept="'*'"
  98. v-model="form.attachList"
  99. />
  100. </el-form-item>
  101. </el-form>
  102. </div>
  103. </template>
  104. <script>
  105. import { getWorkType } from '@/api/crafts'
  106. import { workTypeMasterList } from '@/api/worktype'
  107. import UploadComponent from '@/views/modules/common/upload-component-v2'
  108. export default {
  109. name: 'nodeEdit',
  110. components: { UploadComponent },
  111. props: {
  112. data: {
  113. type: Object,
  114. default: () => {}
  115. },
  116. disabled: {
  117. type: Boolean,
  118. default: false
  119. },
  120. // 是否选择操作人,当选择操作人时,其他字段不可编辑
  121. selectOperator: {
  122. type: Boolean,
  123. default: false
  124. },
  125. isEdit: {
  126. type: Boolean,
  127. default: false
  128. }
  129. },
  130. data () {
  131. return {
  132. // 工种列表
  133. workTypeOptions: [],
  134. // 操作人列表
  135. operatorIdOptions: [],
  136. node: {},
  137. form: {
  138. nodeName: '',
  139. workTypeId: '',
  140. operatorId: [],
  141. prodProductionRequireList: [{}],
  142. planCompletionTime: '',
  143. attachList: []
  144. },
  145. fileList: [],
  146. inspectionMethodOptions: [
  147. { value: '1', name: '游标卡尺' },
  148. { value: '2', name: '千分尺' },
  149. { value: '3', name: '高度尺' },
  150. { value: '4', name: '百分表' },
  151. { value: '5', name: 'R规' },
  152. { value: '6', name: '环规、塞规' },
  153. { value: '7', name: '游标角度尺' },
  154. { value: '8', name: '三坐标' },
  155. { value: '9', name: '模具' },
  156. { value: '10', name: '样板' },
  157. { value: '11', name: '夹具' },
  158. { value: '12', name: '目测' },
  159. { value: '13', name: '组合测量' },
  160. { value: '14', name: '精密测量' },
  161. { value: '15', name: '敲击' },
  162. { value: '16', name: '测厚仪' },
  163. { value: '17', name: '其他' }
  164. ],
  165. rules: {
  166. attachList: [
  167. { required: true, message: '请上传附件', trigger: 'change' }
  168. ],
  169. preTaskTime: [
  170. { required: true, message: '请输入所需工时', trigger: 'blur' }
  171. ],
  172. pageNo: [{ required: true, message: '请输入', trigger: 'blur' }],
  173. inspectionParam: [
  174. { required: true, message: '请输入', trigger: 'blur' }
  175. ],
  176. inspectionMethod: [
  177. { required: true, message: '请选择', trigger: 'blur' }
  178. ],
  179. allowValues: [{ required: true, message: '请输入', trigger: 'blur' }],
  180. isProgramme: [{ required: true, message: '请选择', trigger: 'change' }]
  181. }
  182. }
  183. },
  184. watch: {
  185. data (val) {
  186. console.log('node-edit-normal watch', val)
  187. this.node = val
  188. this.form = {
  189. ...this.form,
  190. ...this.node
  191. }
  192. if (this.node.operatorId) {
  193. this.form.operatorId = this.node.operatorId.split(',')
  194. }
  195. // 附件
  196. // if (this.node.attachList) {
  197. // this.$nextTick(() => {
  198. // this.fileList = []
  199. // this.node.attachList.forEach((item) => {
  200. // this.fileList.push({
  201. // name: item.fileName,
  202. // url: item.url,
  203. // id: item.url
  204. // })
  205. // })
  206. // })
  207. // } else {
  208. // this.form.attachList = []
  209. // }
  210. },
  211. disabled (val) {
  212. this.disabled = val
  213. },
  214. isEdit (val) {
  215. this.isEdit = val
  216. }
  217. },
  218. activated () {},
  219. created () {
  220. this.getWorkTypeOptions()
  221. },
  222. computed: {},
  223. mounted () {
  224. this.node = this.data
  225. this.form = {
  226. ...this.form,
  227. ...this.node
  228. }
  229. if (this.node.operatorId) {
  230. this.form.operatorId = this.node.operatorId.split(',')
  231. }
  232. // 附件
  233. // if (this.node.attachList) {
  234. // this.fileList = []
  235. // this.node.attachList.forEach((item) => {
  236. // this.fileList.push({
  237. // name: item.fileName,
  238. // url: item.url,
  239. // id: item.url
  240. // })
  241. // })
  242. // }
  243. this.getOperatorList()
  244. },
  245. methods: {
  246. getWorkTypeOptions () {
  247. this.workTypeOptions = []
  248. getWorkType().then(({ data }) => {
  249. if (data && data.code === '200') {
  250. this.workTypeOptions = data.data
  251. }
  252. })
  253. },
  254. onChage (val) {
  255. this.workTypeOptions.forEach((v) => {
  256. if (v.typeId === val) {
  257. this.form.quotedPrice = Number(v.quotedPrice || 0).toFixed(2)
  258. }
  259. })
  260. },
  261. // 按工种ID查询操作人列表
  262. getOperatorList () {
  263. if (this.node.workTypeId) {
  264. workTypeMasterList(this.node.workTypeId).then(({ data }) => {
  265. if (data && data.code === '200') {
  266. this.operatorIdOptions = []
  267. data.data.forEach((item) => {
  268. this.operatorIdOptions.push(item)
  269. })
  270. this.onChage(this.node.workTypeId)
  271. }
  272. })
  273. }
  274. },
  275. // 校验表单
  276. validateFormData () {
  277. return new Promise((resolve, reject) => {
  278. this.$refs['form'].validate((valid) => {
  279. if (!valid) {
  280. // eslint-disable-next-line prefer-promise-reject-errors
  281. reject()
  282. return
  283. }
  284. resolve()
  285. })
  286. })
  287. },
  288. // 获取表单数据
  289. formData () {
  290. const form = { ...this.form, operatorName: '' }
  291. if (this.form.operatorId != null) {
  292. form.operatorId = this.form.operatorId.toString()
  293. this.form.operatorId.forEach((id) => {
  294. let op = this.operatorIdOptions.find((t) => t.userId === id)
  295. if (op.name != null) {
  296. form.operatorName += op.name + ' '
  297. }
  298. })
  299. }
  300. // // 填充附件
  301. // let fList = this.fileList
  302. // if (fList.length > 0) {
  303. // form.attachList = []
  304. // for (let i = 0; i < fList.length; i++) {
  305. // form.attachList.push({
  306. // fileName: fList[i].name,
  307. // url: fList[i].url
  308. // })
  309. // }
  310. // }
  311. return form
  312. }
  313. }
  314. }
  315. </script>
  316. <style scoped></style>