RepairManageForm.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <template>
  2. <a-spin :spinning="confirmLoading">
  3. <j-form-container :disabled="formDisabled">
  4. <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
  5. <a-row>
  6. <a-col :span="24">
  7. <a-form-model-item label="工单名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="repairname">
  8. <a-input v-model="model.repairname" placeholder="请输入工单名称" ></a-input>
  9. </a-form-model-item>
  10. </a-col>
  11. <a-col :span="24">
  12. <a-form-model-item label="选择设备" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentid">
  13. <!-- <j-search-select-tag v-model="model.equipmentid" placeholder="请选择设备" dict="tpm_equipment,equipmentname,id" /> -->
  14. <a-select
  15. v-model="model.equipmentid"
  16. placeholder="请输入设备名称或设备编号"
  17. show-search
  18. :filterOption="filterOptions"
  19. @change="clearOptions"
  20. @search="searchDevice"
  21. allowClear>
  22. <a-select-option v-for="(item, index) in deviceOptions" :key="index" :value="item.id" :label="item.equipmentname">
  23. <span>{{item.equipmentname}}</span>
  24. <span style="position: absolute;right: 2%;">{{ item.equipmentcode }}</span>
  25. </a-select-option>
  26. </a-select>
  27. </a-form-model-item>
  28. </a-col>
  29. <a-col :span="24">
  30. <a-form-model-item label="优先级" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="priority">
  31. <j-dict-select-tag v-model="model.priority" placeholder="请选择优先级" :type="'radio'" dictCode="repair_priority"/>
  32. </a-form-model-item>
  33. </a-col>
  34. <a-col :span="24">
  35. <a-form-model-item label="故障日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="faultdate">
  36. <j-date placeholder="请选择故障日期" v-model="model.faultdate" style="width: 100%" :show-time="true" date-format="YYYY-MM-DD HH:mm:ss"/>
  37. </a-form-model-item>
  38. </a-col>
  39. <a-col :span="24">
  40. <a-form-model-item label="故障描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="faultdesc">
  41. <a-textarea v-model="model.faultdesc" placeholder="请输入故障描述" ></a-textarea>
  42. </a-form-model-item>
  43. </a-col>
  44. <!-- <a-col :span="24">
  45. <a-form-model-item label="待办人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="repairuser">
  46. <a-input v-model="model.repairuser" placeholder="请输入待办人" ></a-input>
  47. </a-form-model-item>
  48. </a-col> -->
  49. <a-col :span="24">
  50. <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
  51. <a-textarea v-model="model.remark" placeholder="请输入备注" ></a-textarea>
  52. </a-form-model-item>
  53. </a-col>
  54. </a-row>
  55. </a-form-model>
  56. </j-form-container>
  57. </a-spin>
  58. </template>
  59. <script>
  60. import { httpAction, getAction } from '@/api/manage'
  61. import { validateDuplicateValue } from '@/utils/util'
  62. export default {
  63. name: 'RepairManageForm',
  64. components: {
  65. },
  66. props: {
  67. //表单禁用
  68. disabled: {
  69. type: Boolean,
  70. default: false,
  71. required: false
  72. }
  73. },
  74. data () {
  75. return {
  76. model:{
  77. },
  78. labelCol: {
  79. xs: { span: 24 },
  80. sm: { span: 5 },
  81. },
  82. wrapperCol: {
  83. xs: { span: 24 },
  84. sm: { span: 16 },
  85. },
  86. confirmLoading: false,
  87. validatorRules: {
  88. repairname: [
  89. { required: true, message: '请输入工单名称!'},
  90. ],
  91. equipmentid: [
  92. { required: true, message: '请选择设备!'},
  93. ],
  94. priority: [
  95. { required: true, message: '请选择优先级!'},
  96. ],
  97. faultdate: [
  98. { required: true, message: '请输入故障日期!'},
  99. ],
  100. faultdesc: [
  101. { required: true, message: '请输入故障描述!'},
  102. ],
  103. repairuser: [
  104. { required: true, message: '请输入待办人!'},
  105. ],
  106. repairdate: [
  107. { required: true, message: '请输入维修时间!'},
  108. ],
  109. feedback: [
  110. { required: true, message: '请输入维修反馈!'},
  111. ],
  112. result: [
  113. { required: true, message: '请输入维修结果!'},
  114. ],
  115. },
  116. url: {
  117. add: "/cmmsRepair/cmmsRepair/add",
  118. edit: "/cmmsRepair/cmmsRepair/edit",
  119. queryById: "/cmmsRepair/cmmsRepair/queryById"
  120. },
  121. deviceOptions: [],
  122. deviceOptionsAll: [],
  123. }
  124. },
  125. computed: {
  126. formDisabled(){
  127. return this.disabled
  128. },
  129. },
  130. created () {
  131. //备份model原始值
  132. this.modelDefault = JSON.parse(JSON.stringify(this.model));
  133. this.getDeviceOption();
  134. },
  135. methods: {
  136. // 获取设备下拉列表
  137. getDeviceOption(){
  138. getAction(`/tpmEquipment/tpmEquipment/selectEquipmentList`).then(res=>{
  139. console.log(111,res.result)
  140. this.deviceOptions = res.result.map((res) => {
  141. return {
  142. id: res.id,
  143. equipmentname: res.equipmentname,
  144. equipmentcode: res.equipmentcode,
  145. }
  146. })
  147. // 存一个完整的设备表
  148. this.deviceOptionsAll = this.deviceOptions
  149. console.log(7878,this.deviceOptionsAll)
  150. })
  151. },
  152. // 筛选设备
  153. searchDevice(value) {
  154. console.log(1212,value,value.trim().length)
  155. // 若输入的值删除,则重新赋完整的设备列表
  156. if (value.trim().length === 0) {
  157. this.deviceOptions = this.deviceOptionsAll
  158. }
  159. // 通过判断字符串中是数字还是文字进而判断是通过设备名筛选还是设备编号筛选
  160. let panDuan = isNaN(parseFloat(value))
  161. if (!panDuan) {
  162. // 数字
  163. console.log(777)
  164. let filteredArray = this.deviceOptionsAll.filter(item => item.equipmentcode.includes(value));
  165. this.deviceOptions = filteredArray
  166. } else {
  167. console.log(888)
  168. let filteredArray = this.deviceOptionsAll.filter(item => item.equipmentname.includes(value));
  169. this.deviceOptions = filteredArray
  170. }
  171. console.log(999,this.deviceOptions)
  172. },
  173. // 解决筛选后option不回显问题
  174. filterOptions(input, option) {
  175. return this.deviceOptions
  176. },
  177. // 解决筛选后删除option不回显问题
  178. clearOptions() {
  179. this.deviceOptions = this.deviceOptionsAll
  180. },
  181. add () {
  182. this.edit(this.modelDefault);
  183. },
  184. edit (record) {
  185. this.model = Object.assign({}, record);
  186. this.visible = true;
  187. },
  188. submitForm () {
  189. const that = this;
  190. // 触发表单验证
  191. this.$refs.form.validate(valid => {
  192. if (valid) {
  193. that.confirmLoading = true;
  194. let httpurl = '';
  195. let method = '';
  196. if(!this.model.id){
  197. httpurl+=this.url.add;
  198. method = 'post';
  199. }else{
  200. httpurl+=this.url.edit;
  201. method = 'put';
  202. }
  203. httpAction(httpurl,this.model,method).then((res)=>{
  204. if(res.success){
  205. that.$message.success(res.message);
  206. that.$emit('ok');
  207. }else{
  208. that.$message.warning(res.message);
  209. }
  210. }).finally(() => {
  211. that.confirmLoading = false;
  212. })
  213. }
  214. })
  215. },
  216. }
  217. }
  218. </script>