华西海圻ELN前端工程
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

185 lines
5.8 KiB

  1. <template>
  2. <div class="content-edit">
  3. <div class="edit-top">
  4. <div class="left-top">
  5. <img src="@/assets/images/back.png" @click="cancel()" />
  6. <div class="left-title">{{this.infoDialog.formData.id!=''?$t('page.business.study.study.xgsy'):$t('page.business.study.study.create')}}</div>
  7. </div>
  8. <div class="right-top">
  9. <el-button @click="cancel()">{{$t('page.business.study.study.cancel')}}</el-button>
  10. <el-button type="primary" @click="save(1)" plain v-if="!infoDialog.formData.status || infoDialog.formData.status===1">{{$t('page.business.study.study.save')}}</el-button>
  11. <el-button type="primary" @click="save(3)">{{$t('page.business.study.study.submit')}}</el-button>
  12. </div>
  13. </div>
  14. <div class="edit-content">
  15. <el-form ref="infoDialogForm" :model="infoDialog.formData" :rules="infoDialog.rules" label-width="150px" class="edit-form">
  16. <el-row>
  17. <el-col :span="24">
  18. <el-form-item :label="$t('page.business.study.study.name')+':'" prop="name">
  19. <el-input v-model="infoDialog.formData.name" :placeholder="$t('form.placeholderInput')" maxlength="100" />
  20. </el-form-item>
  21. </el-col>
  22. <el-col :span="24">
  23. <el-form-item :label="$t('page.business.study.study.sn')+':'" prop="sn">
  24. <el-input v-model="infoDialog.formData.sn" :placeholder="$t('form.placeholderInput')" maxlength="100" :disabled="this.infoDialog.formData.id!=''" />
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="24">
  28. <el-form-item :label="$t('page.business.study.study.leader')+':'" prop="leader">
  29. <SelectDeptUser :readOnly="!checkRole(['TFM'])" @change="changeLeader" v-model="infoDialog.formData.leader" :name="infoDialog.formData.leaderName" :nameEn="infoDialog.formData.leaderNameEn" />
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="24">
  33. <el-form-item :label="$t('page.business.study.study.remark')+':'" prop="remark">
  34. <el-input type="textarea" :rows="5" :placeholder="$t('form.placeholderInput')" v-model="infoDialog.formData.remark" maxlength="500" show-word-limit> </el-input>
  35. </el-form-item>
  36. </el-col>
  37. </el-row>
  38. </el-form>
  39. </div>
  40. <Sign ref="editSignRef" @callback="doSign" />
  41. </div>
  42. </template>
  43. <script>
  44. import { checkRole } from "@/utils/permission";
  45. import { study_info,study_save} from "@/api/business/study/study";
  46. import SelectDeptUser from '@/views/business/comps/select/SelectDeptUser.vue';
  47. import Sign from './sign.vue'
  48. const EmptyDialogData = {
  49. id:'',
  50. name:'',
  51. sn:'',
  52. leader:'',
  53. leaderName:'',
  54. leaderNameEn:'',
  55. reamrk:'',
  56. }
  57. export default {
  58. name: "StudyEdit",
  59. props:{
  60. },
  61. components:{
  62. SelectDeptUser,
  63. Sign
  64. },
  65. computed: {
  66. },
  67. filters:{
  68. },
  69. data() {
  70. return {
  71. infoDialog:{
  72. visible:false,
  73. formData:{},
  74. rules:{
  75. name: [
  76. { required: true, message: this.$t('page.business.study.study.inputName'), trigger: "blur" }
  77. ],
  78. sn: [
  79. { required: true, message: this.$t('page.business.study.study.inputSn'), trigger: "blur" }
  80. ],
  81. leader: [
  82. { required: true, message: this.$t('page.business.study.study.inputLeader'), trigger: "change" }
  83. ],
  84. }
  85. },
  86. oldStatus:1
  87. };
  88. },
  89. created() {
  90. },
  91. methods: {
  92. checkRole,
  93. changeLeader(val){
  94. this.infoDialog.formData.leader = val.id
  95. this.infoDialog.formData.leaderName = val.name
  96. this.infoDialog.formData.leaderNameEn = val.nameEn
  97. this.$refs.infoDialogForm.clearValidate('leader')
  98. },
  99. edit(row) {
  100. this.$refs['infoDialogForm'] && this.$refs['infoDialogForm'].resetFields()
  101. this.infoDialog.formData = _.merge({}, EmptyDialogData,{leader:this.$store.getters.id,leaderName:this.$store.getters.nickName,leaderNameEn:this.$store.getters.name})
  102. this.oldStatus = 1
  103. if(row && row.id){
  104. this.$modal.loading()
  105. study_info({id:row.id}).then(({data}) => {
  106. this.infoDialog.formData = data
  107. this.oldStatus = data.status
  108. }).finally(() => {
  109. this.$modal.closeLoading()
  110. })
  111. }else{
  112. }
  113. },
  114. cancel(){
  115. this.$emit('cancel')
  116. },
  117. save(status) {
  118. this.$refs['infoDialogForm'].validate(valid => {
  119. if (valid) {
  120. this.infoDialog.formData.status = status
  121. if(status === 3){
  122. this.$refs.editSignRef.show(this.oldStatus==1?this.$t('page.business.study.study.submit'):this.$t('page.business.study.study.xgsy'),this.oldStatus==1?this.$t('page.business.study.study.create'):this.$t('page.business.study.study.xgsy'),false,null,this.oldStatus!=1,this.oldStatus!=1)
  123. }else{
  124. this.doSave({})
  125. }
  126. }
  127. })
  128. },
  129. doSign(val){
  130. this.doSave(val)
  131. },
  132. doSave(sign) {
  133. this.$modal.loading()
  134. study_save({
  135. study:this.infoDialog.formData,
  136. sign:sign
  137. }).then(() => {
  138. this.$emit('save')
  139. this.$refs.editSignRef.cancel()
  140. }).finally(() => {
  141. this.$modal.closeLoading()
  142. })
  143. },
  144. }
  145. };
  146. </script>
  147. <style lang="scss">
  148. .content-edit{
  149. background: #f5f5f5;
  150. padding: 0;
  151. .edit-top{
  152. background: #fff;
  153. padding: 10px 20px;
  154. margin-bottom: 10px;
  155. display: flex;
  156. flex-direction: row;
  157. align-items: center;
  158. justify-content: space-between;
  159. .left-top{
  160. flex-shrink: 0;
  161. display: flex;
  162. flex-direction: row;
  163. align-items: center;
  164. img{
  165. height: 16px;
  166. margin-right: 20px;
  167. cursor: pointer;
  168. }
  169. .right-top{
  170. }
  171. }
  172. }
  173. .edit-content{
  174. background: #fff;
  175. padding: 20px;
  176. min-height: 500px;
  177. .edit-form{
  178. width: 800px;
  179. margin: 0 auto;
  180. }
  181. }
  182. }
  183. </style>