Edit.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. <template>
  2. <el-dialog
  3. :close-on-click-modal="false"
  4. :close-on-press-escape="false"
  5. :title="title"
  6. :append-to-body="true"
  7. :visible.sync="isVisible"
  8. :width="width"
  9. top="50px"
  10. >
  11. <el-form
  12. ref="form"
  13. :model="maintenance"
  14. :rules="rules"
  15. label-position="right"
  16. label-width="130px"
  17. >
  18. <!--下次维保时间-->
  19. <el-form-item
  20. :label="$t(&quot;resource.table.repair.maintenanceTime&quot;)"
  21. prop="maintenanceTime"
  22. >
  23. <el-date-picker
  24. v-model="maintenance.maintenanceTime"
  25. type="datetime"
  26. value-format="yyyy-MM-dd"
  27. :placeholder="$t(&quot;common.pleaseSelect&quot;)"
  28. style="width: 50%;"
  29. :picker-options="pickerOptions"
  30. />
  31. </el-form-item>
  32. <el-form-item
  33. :label="$t(&quot;resource.table.repair.maintenanceContent&quot;)"
  34. prop="nextWork"
  35. >
  36. <el-input
  37. v-model="maintenance.remark"
  38. type="textarea"
  39. :rows="3"
  40. style="width: 93%;"
  41. />
  42. <el-tooltip
  43. class="item"
  44. :content="$t(&quot;project.rules.noMoreThan1024&quot;)"
  45. effect="dark"
  46. placement="top-end"
  47. >
  48. <i class="el-icon-question" />
  49. </el-tooltip>
  50. </el-form-item>
  51. <el-form-item
  52. :label="$t(&quot;resource.table.repair.maintenanceUser&quot;)"
  53. prop="maintenanceUserList"
  54. >
  55. <el-select
  56. v-model="maintenance.maintenanceUser"
  57. filterable
  58. clearable
  59. :placeholder="$t(&quot;common.pleaseEnter&quot;)"
  60. class="selectCurrt"
  61. style="width: 50%;"
  62. @change="maintenanceUserChange($event)"
  63. >
  64. <el-option
  65. v-for="(item, index) in maintenanceUserList"
  66. :key="index"
  67. :label="item.name"
  68. :value="item.id"
  69. />
  70. </el-select>
  71. </el-form-item>
  72. <!--状态-->
  73. <el-form-item
  74. :label="$t(&quot;resource.table.repair.maintenanceStatus&quot;)"
  75. prop="status"
  76. >
  77. <template>
  78. <el-radio
  79. v-model="maintenance.status"
  80. label="1"
  81. >
  82. 正常
  83. </el-radio>
  84. <el-radio
  85. v-model="maintenance.status"
  86. label="0"
  87. >
  88. 暂停使用
  89. </el-radio>
  90. </template>
  91. </el-form-item>
  92. </el-form>
  93. <div
  94. slot="footer"
  95. class="dialog-footer"
  96. >
  97. <el-button
  98. plain
  99. type="warning"
  100. @click="isVisible = false"
  101. >
  102. {{ $t('common.cancel') }}
  103. </el-button>
  104. <el-button
  105. plain
  106. type="primary"
  107. :disabled="confirmDisabled"
  108. @click="submitForm"
  109. >
  110. {{ $t('common.confirm') }}
  111. </el-button>
  112. </div>
  113. </el-dialog>
  114. </template>
  115. <script>
  116. // 【维保计划管理】-API
  117. // 【维保详情管理】-API
  118. import repairDetailApi from "@/api/resourceProductMgr/repairDetail"
  119. export default {
  120. name: 'MaintenanceEdit',
  121. props: {
  122. dialogVisible: {
  123. type: Boolean,
  124. default: false
  125. },
  126. title: {
  127. type: String,
  128. default: ''
  129. }
  130. },
  131. data() {
  132. return {
  133. pickerOptions: {
  134. disabledDate(time) {
  135. return time.getTime() <= Date.now() - 1 * 24 * 3600 * 1000
  136. }
  137. },
  138. type: 'add',
  139. maintenance: this.initMaintenance(),
  140. screenWidth: 0,
  141. width: this.initWidth(),
  142. confirmDisabled: false,
  143. rules: {
  144. maintenanceTime: [
  145. {required: true, message: this.$t("rules.require"), trigger: 'blur'}
  146. ]
  147. },
  148. maintenanceUserList: [],
  149. }
  150. },
  151. computed: {
  152. isVisible: {
  153. get() {
  154. return this.dialogVisible
  155. },
  156. set() {
  157. this.close()
  158. this.reset()
  159. }
  160. }
  161. },
  162. created() {
  163. // 查询【所有用户】信息
  164. repairDetailApi.getUserList(this.project).then(response => {
  165. const res = response.data;
  166. if (res.isSuccess) {
  167. this.maintenanceUserList = response.data.data
  168. }
  169. });
  170. },
  171. mounted() {
  172. window.onresize = () => {
  173. return (() => {
  174. this.width = this.initWidth()
  175. })()
  176. }
  177. },
  178. methods: {
  179. initMaintenance() {
  180. return {
  181. status: '1',
  182. maintenanceUserList: [],
  183. maintenanceUsers: "",
  184. maintenanceStartTime: '',
  185. maintenanceEndTime: '',
  186. remark: '',
  187. }
  188. },
  189. initWidth() {
  190. this.screenWidth = document.body.clientWidth
  191. if (this.screenWidth < 991) {
  192. return '90%'
  193. } else if (this.screenWidth < 1400) {
  194. return '45%'
  195. } else {
  196. return '800px'
  197. }
  198. },
  199. setMaintenanceInfo(data,opeType) {
  200. console.log(data)
  201. this.type = opeType
  202. if(opeType==='add'){
  203. this.maintenance.repairId = data
  204. }else if(opeType==='edit'){
  205. this.maintenance = {...data}
  206. }
  207. },
  208. close() {
  209. this.$emit('close')
  210. },
  211. reset() {
  212. // 先清除校验,再清除表单,不然有奇怪的bug
  213. this.$refs.form.clearValidate()
  214. this.$refs.form.resetFields()
  215. this.maintenance = this.initMaintenance()
  216. },
  217. submitForm() {
  218. this.$refs.form.validate((valid) => {
  219. if (valid) {
  220. this.confirmDisabled = true
  221. if (this.type === 'add') {
  222. this.save()
  223. } else {
  224. this.update()
  225. }
  226. } else {
  227. return false
  228. }
  229. })
  230. },
  231. save() {
  232. console.log(this.maintenance)
  233. repairDetailApi.save(this.maintenance)
  234. .then((response) => {
  235. const res = response.data
  236. if (res.isSuccess) {
  237. this.isVisible = false
  238. this.$message({
  239. message: this.$t('tips.createSuccess'),
  240. type: 'success'
  241. })
  242. // 通知列表
  243. this.$emit("success");
  244. // 通知列表-并关闭弹出框
  245. this.$emit("close");
  246. }
  247. }).finally(() => {
  248. this.confirmDisabled = false
  249. return true
  250. })
  251. },
  252. update() {
  253. repairDetailApi.update(this.maintenance)
  254. .then((response) => {
  255. const res = response.data
  256. if (res.isSuccess) {
  257. this.isVisible = false
  258. this.$message({
  259. message: this.$t('tips.updateSuccess'),
  260. type: 'success'
  261. })
  262. // 通知列表
  263. this.$emit("success");
  264. // 通知列表-并关闭弹出框
  265. this.$emit("close");
  266. }
  267. }).finally(() => {
  268. this.confirmDisabled = false
  269. return true
  270. })
  271. },
  272. maintenanceUserChange (val) {
  273. this.maintenance.maintenanceName = "" //初始化数据
  274. this.maintenanceUserList.find((item)=>{ //这里的options就是数据源
  275. if(item.id == val){
  276. this.maintenance.maintenanceName = this.maintenance.maintenanceName + "," + item.name//这里的label我改成了roleName
  277. }
  278. });
  279. if(this.maintenance.maintenanceName.length > 0){
  280. this.maintenance.maintenanceName = this.maintenance.maintenanceName.substr(1);
  281. }
  282. },
  283. }
  284. }
  285. </script>
  286. <style lang="scss">
  287. .avatar-uploader .el-upload {
  288. border: 1px dashed #d9d9d9;
  289. border-radius: 6px;
  290. cursor: pointer;
  291. position: relative;
  292. overflow: hidden;
  293. }
  294. .avatar-uploader .el-upload:hover {
  295. border-color: #409eff;
  296. }
  297. .avatar-uploader-icon {
  298. font-size: 28px;
  299. color: #8c939d;
  300. width: 100px;
  301. height: 100px;
  302. line-height: 100px;
  303. text-align: center;
  304. }
  305. .avatar {
  306. width: 100px;
  307. height: 100px;
  308. display: block;
  309. }
  310. .checkUsed {
  311. display: inline-block;
  312. margin-left: 10px;
  313. color: #1890ff;
  314. }
  315. </style>