Browse Source

1、新增试验单页面,增加PJM负责人(不必填)试验单审批完后也需要给PJM负责人发送审批完成邮件

master
han\hanst 2 weeks ago
parent
commit
153c0f2df1
  1. 5
      src/api/erf/erf.js
  2. 98
      src/views/modules/erf/components/expApplyForm.vue
  3. 2
      src/views/modules/erf/expApplyList.vue

5
src/api/erf/erf.js

@ -20,6 +20,11 @@ export const getExpApplyDetail = data => createAPI(`/erf/expApply/getExpApplyDet
*/
export const saveExpApply = data => createAPI(`/erf/expApply/saveExpApply`, 'post', data)
/**
* 获取PJM负责人列表产品文档收美-PM角色
*/
export const getPjmLeaderList = data => createAPI(`/erf/expApply/getPjmLeaderList`, 'post', data)
/**
* 下达申请单
*/

98
src/views/modules/erf/components/expApplyForm.vue

@ -87,6 +87,26 @@
</el-col>
<el-col :span="12">
<el-form-item label="PJM负责人">
<el-select
v-model="saveHeaderData.pjmLeaderUserId"
:disabled="readonly"
clearable
filterable
placeholder="请选择PJM负责人(非必填)"
style="width: 100%"
@change="handlePjmLeaderChange">
<el-option
v-for="item in pjmLeaderList"
:key="item.userId"
:label="item.userDisplay || item.username"
:value="item.userId">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="试验目的" prop="purpose">
<el-input
v-model="saveHeaderData.purpose"
@ -220,7 +240,7 @@
</template>
<script>
import { saveExpApply } from '@/api/erf/erf'
import { saveExpApply, getPjmLeaderList } from '@/api/erf/erf'
import { getBuList } from '@/api/factory/site'
import Chooselist from '@/views/modules/common/Chooselist'
@ -243,6 +263,7 @@ export default {
data() {
return {
buList: [],
pjmLeaderList: [],
saveHeaderData: {
applyNo: '',
originalApplyNo: '',
@ -257,6 +278,8 @@ export default {
expectedFinishDate: '',
projectLeaderName: this.$store.state.user.name,
projectLeader: this.$store.state.user.userDisplay,
pjmLeaderUserId: null,
pjmLeaderName: '',
contactMethod: '',
processRequirement: '',
creatorUserId: this.$store.state.user.id,
@ -289,6 +312,25 @@ export default {
}
},
watch: {
'saveHeaderData.buNo'(newVal, oldVal) {
if (!newVal) {
this.saveHeaderData.pjmLeaderUserId = null
this.saveHeaderData.pjmLeaderName = ''
// BU退PJM
this.loadPjmLeaderList('')
return
}
if (newVal !== oldVal) {
if (oldVal !== undefined && oldVal !== null && oldVal !== '') {
this.saveHeaderData.pjmLeaderUserId = null
this.saveHeaderData.pjmLeaderName = ''
}
this.loadPjmLeaderList(newVal)
}
}
},
mounted() {
this.loadBuList()
if (this.applyData && this.applyData.applyNo) {
@ -298,6 +340,8 @@ export default {
}
this.isEdit = true
}
// PJMBU
this.loadPjmLeaderList(this.saveHeaderData.buNo || '')
},
methods: {
@ -316,6 +360,58 @@ export default {
})
},
/**
* 加载PJM负责人列表产品文档收美-PM角色
*/
loadPjmLeaderList(buNo) {
getPjmLeaderList({ buNo: buNo || '' }).then(({data}) => {
if (data && data.code === 0) {
this.pjmLeaderList = data.list || []
this.ensurePjmLeaderOption()
if (this.saveHeaderData.pjmLeaderUserId && !this.saveHeaderData.pjmLeaderName) {
this.handlePjmLeaderChange(this.saveHeaderData.pjmLeaderUserId)
}
} else {
this.pjmLeaderList = []
this.$message.error(data.msg || '加载PJM负责人失败')
}
}).catch(() => {
this.pjmLeaderList = []
this.$message.error('加载PJM负责人异常')
})
},
/**
* 处理PJM负责人变更
*/
handlePjmLeaderChange(userId) {
if (!userId) {
this.saveHeaderData.pjmLeaderName = ''
return
}
const selected = this.pjmLeaderList.find(item => item.userId === userId)
this.saveHeaderData.pjmLeaderName = selected
? (selected.userDisplay || selected.username || '')
: (this.saveHeaderData.pjmLeaderName || '')
},
/**
* 编辑场景兜底已选PJM负责人不在当前下拉项时补充显示
*/
ensurePjmLeaderOption() {
if (!this.saveHeaderData.pjmLeaderUserId) {
return
}
const exist = this.pjmLeaderList.some(item => item.userId === this.saveHeaderData.pjmLeaderUserId)
if (!exist && this.saveHeaderData.pjmLeaderName) {
this.pjmLeaderList.push({
userId: this.saveHeaderData.pjmLeaderUserId,
username: this.saveHeaderData.pjmLeaderName,
userDisplay: this.saveHeaderData.pjmLeaderName
})
}
},
/**
* 获取表单数据用于验证
*/

2
src/views/modules/erf/expApplyList.vue

@ -474,7 +474,7 @@
:readonly="dialogReadonly">
</exp-apply-form>
<el-footer style="height: 40px; margin-top: 40px; text-align: center">
<el-footer style="height: 40px; margin-top: 50px; text-align: center">
<el-button type="primary" @click="saveApply" v-if="!dialogReadonly" :loading="saveLoading">
{{ saveLoading ? '保存中...' : '保存' }}
</el-button>

Loading…
Cancel
Save