|
@@ -12,31 +12,44 @@
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="formWrap">
|
|
|
- <div v-for="(r, idx) in renderFromData" :key="idx" class="formLine" :class="r.length > 1 && 'Layout'">
|
|
|
- <formInput
|
|
|
- v-for="d in r"
|
|
|
- :key="d.key"
|
|
|
- :title="d.name"
|
|
|
- :type="d.type"
|
|
|
- :option="d.option"
|
|
|
- :value="item[d.key]"
|
|
|
- :multiple="d.multiple"
|
|
|
- :requried="false"
|
|
|
- :has-slot="d.hasSlot"
|
|
|
- :styles="{ minWidth: '110px' }"
|
|
|
- @onChange="(e) => onChange(d.key, e, index)"
|
|
|
- @remoteMethod="(e) => remoteMethod(d.key, e, d.utilName)"
|
|
|
- >
|
|
|
- <div v-if="d.hasSlot" slot="option">
|
|
|
- <el-option v-for="o in d.option" :key="o.value" :label="o.label" :value="o.value">
|
|
|
+ <div class="formLine Layout">
|
|
|
+ <div class="formInput">
|
|
|
+ <span class="title">
|
|
|
+ 责任人
|
|
|
+ </span>
|
|
|
+ <el-select
|
|
|
+ v-model="item.leader"
|
|
|
+ filterable
|
|
|
+ remote
|
|
|
+ clearable
|
|
|
+ placeholder="请选择"
|
|
|
+ :multiple="true"
|
|
|
+ :remote-method="(e) => remoteMethod('leader', e, 'getPerson', index)"
|
|
|
+ :size="size"
|
|
|
+ @change="(e) => onChange('leader', e, index)"
|
|
|
+ >
|
|
|
+ <el-option v-for="o in leaderOptione" :key="o.value" :label="o.label" :value="o.value">
|
|
|
<div class="item-style">
|
|
|
<div class="item-detail">{{ o.deptName }}</div>
|
|
|
<div style="min-width:80px">{{ o.name }}</div>
|
|
|
<div class="item-detail">{{ o.idap }}</div>
|
|
|
</div>
|
|
|
</el-option>
|
|
|
- </div>
|
|
|
- </formInput>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="formInput">
|
|
|
+ <span class="title">
|
|
|
+ 计划完成时间
|
|
|
+ </span>
|
|
|
+ <el-date-picker
|
|
|
+ v-model="item.finishTime"
|
|
|
+ :size="size"
|
|
|
+ value-format="yyyy-MM-dd hh:mm:ss"
|
|
|
+ type="datetime"
|
|
|
+ placeholder="请选择"
|
|
|
+ @change="(e) => onChange('finishTime', e, index)"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="progress formLine">
|
|
|
<span class="title">
|
|
@@ -48,6 +61,7 @@
|
|
|
:max="100"
|
|
|
class="number"
|
|
|
type="number"
|
|
|
+ @change="(e) => onChange('progress', e.target.value, index)"
|
|
|
>
|
|
|
%
|
|
|
<span class="brandColor pointer overBtn" @click="(e) => onChange('progress', '100', index)">
|
|
@@ -57,7 +71,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="delBtn">
|
|
|
- <span class="brandColor pointer" @click="$emit('delHandle', index)">
|
|
|
+ <span class="brandColor pointer" @click="() => del(index)">
|
|
|
<svg-icon icon-class="del" class="icon" />
|
|
|
</span>
|
|
|
</div>
|
|
@@ -71,13 +85,9 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
-import formInput from '@/components/formInput'
|
|
|
-import { getPerson } from '@/api/onlineproblem'
|
|
|
+import { getPerson, getListPerson } from '@/api/onlineproblem'
|
|
|
import '@/views/projectManage/publicCss/index.css'
|
|
|
export default {
|
|
|
- components: {
|
|
|
- formInput
|
|
|
- },
|
|
|
props: {
|
|
|
list: {
|
|
|
type: Array,
|
|
@@ -90,49 +100,58 @@ export default {
|
|
|
size: 'small',
|
|
|
val: '',
|
|
|
data: {},
|
|
|
- renderFromData: [
|
|
|
- [{
|
|
|
- name: '责任人',
|
|
|
- key: 'leader',
|
|
|
- type: 'remoteSelect',
|
|
|
- utilName: 'getPerson',
|
|
|
- multiple: true,
|
|
|
- placeholder: '请选择责任人',
|
|
|
- hasSlot: true,
|
|
|
- default: '',
|
|
|
- option: []
|
|
|
- }, {
|
|
|
- name: '计划完成时间',
|
|
|
- key: 'finishTime',
|
|
|
- type: 'date'
|
|
|
- }]
|
|
|
- ]
|
|
|
+ leaderOptione: []
|
|
|
}
|
|
|
},
|
|
|
+ mounted() {
|
|
|
+ this.getListPerson()
|
|
|
+ },
|
|
|
methods: {
|
|
|
- async remoteMethod(key, q, utilName) {
|
|
|
+ async remoteMethod(key, q, utilName, index) {
|
|
|
if (utilName === 'getPerson') {
|
|
|
const res = await getPerson({ memberIDAP: q })
|
|
|
const personData = res.data || []
|
|
|
- this.renderFromData.map(t => t.map(g => {
|
|
|
- if (g.key === key) {
|
|
|
- g.option = personData.map(t => ({
|
|
|
- ...t,
|
|
|
- value: t.idap,
|
|
|
- label: t.name
|
|
|
- }))
|
|
|
- }
|
|
|
+ this.leaderOptione = personData.map(t => ({
|
|
|
+ ...t,
|
|
|
+ value: t.idap,
|
|
|
+ label: t.name
|
|
|
}))
|
|
|
}
|
|
|
},
|
|
|
onChange(key, value, index) {
|
|
|
this.$emit('onChange', key, value, index)
|
|
|
+ },
|
|
|
+ del(index) {
|
|
|
+ this.getListPerson()
|
|
|
+ this.$emit('delHandle', index)
|
|
|
+ },
|
|
|
+ async getListPerson() {
|
|
|
+ let perlist = []
|
|
|
+ this.list.forEach(t => {
|
|
|
+ perlist = [...perlist, ...t.leader]
|
|
|
+ })
|
|
|
+ const res = await getListPerson({ memberIDAPs: perlist })
|
|
|
+ const personData = res.data || []
|
|
|
+ this.leaderOptione = personData.map(t => ({
|
|
|
+ ...t,
|
|
|
+ value: t.idap,
|
|
|
+ label: t.name
|
|
|
+ }))
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
<style scoped lang="scss">
|
|
|
.makeBetterWrap {
|
|
|
+ .formInput {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ .title {
|
|
|
+ min-width: 110px;
|
|
|
+ padding-left: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
.brandColor {
|
|
|
color: #1890FF;
|
|
|
}
|