|
@@ -0,0 +1,262 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <el-form ref="form" :model="form" inline>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item
|
|
|
+ label="分部"
|
|
|
+ prop="organId"
|
|
|
+ :rules="[{required: true, message: '请选择分部'}]"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ v-model="form.organId"
|
|
|
+ placeholder="请选择分部"
|
|
|
+ >
|
|
|
+ <el-option v-for="(item,index) in selects.branchs"
|
|
|
+ :key="index"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item
|
|
|
+ label="工作周期"
|
|
|
+ prop="month"
|
|
|
+ :rules="[{required: true, message: '请选择工作周期'}]"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ v-model="form.month"
|
|
|
+ type="month"
|
|
|
+ placeholder="请选择工作周期">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row class="group" v-for="(groupItem, groupIndex) in form.group" :key="groupIndex">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item
|
|
|
+ label="乐团主管"
|
|
|
+ :prop="`group.${groupIndex}.userId`"
|
|
|
+ :rules="[{required: true, message: '请选择乐团主管'}]"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ v-model="groupItem.userId"
|
|
|
+ placeholder="请选择乐团主管"
|
|
|
+ >
|
|
|
+ <el-option v-for="(item,index) in technicians"
|
|
|
+ :key="index"
|
|
|
+ :label="item.realName"
|
|
|
+ :value="item.userId"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <template v-for="(matterItem, matterIndex) in groupItem.matter">
|
|
|
+ <el-col :offset="matterIndex === 0 ? 0 : 6" :span="6" :key="groupIndex + '-' + matterIndex">
|
|
|
+ {{groupIndex + '-' + matterIndex}}
|
|
|
+ <el-form-item
|
|
|
+ :label="'任务事项' + (matterIndex + 1)"
|
|
|
+ :prop="`group.${groupIndex}.matter.${matterIndex}.item`"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ v-model="matterItem.item"
|
|
|
+ placeholder="请选择任务事项"
|
|
|
+ >
|
|
|
+ <el-option v-for="(item,index) in matterTypesOptions"
|
|
|
+ :key="index"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6" :key="groupIndex + '-' + matterIndex">
|
|
|
+ <el-form-item
|
|
|
+ :label="'任务次数' + (matterIndex + 1)"
|
|
|
+ :prop="`group.${groupIndex}.matter.${matterIndex}.times`"
|
|
|
+ >
|
|
|
+ <el-input clearable v-model="matterItem.times" placeholder="请输入次数" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6" :key="groupIndex + '-' + matterIndex">
|
|
|
+ <div class="ctrl">
|
|
|
+ <span>
|
|
|
+ <el-tooltip content="添加任务" placement="top" :open-delay=".5">
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-plus"
|
|
|
+ @click="createMatter(groupItem.matter)"
|
|
|
+ circle
|
|
|
+ size="small"
|
|
|
+ ></el-button>
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip content="删除任务" placement="top" :open-delay=".5">
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-minus"
|
|
|
+ circle
|
|
|
+ size="small"
|
|
|
+ @click="removeMatter(groupItem.matter, matterIndex)"
|
|
|
+ :disabled="groupItem.matter.length <= 1"
|
|
|
+ ></el-button>
|
|
|
+ </el-tooltip>
|
|
|
+ </span>
|
|
|
+ <el-tooltip v-if="isCreate" content="删除乐团主管" placement="top" :open-delay=".5">
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-delete"
|
|
|
+ circle
|
|
|
+ type="danger"
|
|
|
+ size="small"
|
|
|
+ v-if="matterIndex === 0"
|
|
|
+ @click="removeGroup(form.group, groupIndex)"
|
|
|
+ :disabled="form.group.length <= 1"
|
|
|
+ ></el-button>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
+ </el-row>
|
|
|
+ <el-button v-if="isCreate" @click="createGroup" plain block style="width: 100%">添加乐团主管</el-button>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" style="text-align: right;margin-top: 20px;">
|
|
|
+ <el-button>取消</el-button>
|
|
|
+ <el-button type="primary" @click="submit">确认</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import { findTechnician } from '@/api/repairManager'
|
|
|
+import { matterTypes } from '@/views/main/constant'
|
|
|
+import { objectToOptions } from '@/utils'
|
|
|
+import { createRandom } from '@/helpers/uuidv4'
|
|
|
+import { inspectionAdd, inspectionGetInfo, inspectionUpdate } from '@/views/main/api'
|
|
|
+const emptyMatter = {
|
|
|
+ item: '',
|
|
|
+ times: ''
|
|
|
+}
|
|
|
+export default {
|
|
|
+ props: ['id'],
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ form: {
|
|
|
+ organId: '',
|
|
|
+ group: [{
|
|
|
+ _uuid: createRandom(),
|
|
|
+ userId: '',
|
|
|
+ matter: [{...emptyMatter}]
|
|
|
+ }]
|
|
|
+ },
|
|
|
+ technicians: []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ matterTypesOptions() {
|
|
|
+ return objectToOptions(matterTypes)
|
|
|
+ },
|
|
|
+ isCreate() {
|
|
|
+ return !this.id
|
|
|
+ },
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ async 'form.organId'() {
|
|
|
+ if (this.form.organId) {
|
|
|
+ try {
|
|
|
+ const res = await findTechnician({
|
|
|
+ organId: this.form.organId
|
|
|
+ })
|
|
|
+ this.technicians = res.data
|
|
|
+ this.$set(this.form, 'group', group.map(item => ({...item, userId: ''})))
|
|
|
+ } catch (error) {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async mounted() {
|
|
|
+ try {
|
|
|
+ const res = await inspectionGetInfo({
|
|
|
+ id: this.id
|
|
|
+ })
|
|
|
+ this.form = {
|
|
|
+ ...this.form,
|
|
|
+ organId: res.data.organId,
|
|
|
+ month: res.data.month,
|
|
|
+ group: [{
|
|
|
+ _uuid: createRandom(),
|
|
|
+ userId: res.data.userId,
|
|
|
+ matter: res.data.inspectionItems.map(item => ({item: item.item, times: item.times}))
|
|
|
+ }]
|
|
|
+ }
|
|
|
+ } catch (error) {}
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ createGroup() {
|
|
|
+ this.form.group.push({
|
|
|
+ userId: '',
|
|
|
+ matter: [{...emptyMatter}]
|
|
|
+ })
|
|
|
+ },
|
|
|
+ createMatter(matter) {
|
|
|
+ matter.push({...emptyMatter})
|
|
|
+ },
|
|
|
+ removeMatter(matter, index) {
|
|
|
+ matter.splice(index, 1)
|
|
|
+ },
|
|
|
+ async removeGroup(group, index) {
|
|
|
+ try {
|
|
|
+ await this.$confirm('是否确认删除此乐团主管?', '提示', {
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ group.splice(index, 1)
|
|
|
+ } catch (error) {}
|
|
|
+ },
|
|
|
+ async submit() {
|
|
|
+ try {
|
|
|
+ this.$refs.form.validate(async valid => {
|
|
|
+ if (valid) {
|
|
|
+ const data = this.form.group.map(item => ({
|
|
|
+ organId: this.form.organId,
|
|
|
+ month: this.form.month,
|
|
|
+ userId: item.userId,
|
|
|
+ inspectionItems: item.matter.map(m => ({
|
|
|
+ ...m,
|
|
|
+ organId: this.form.organId,
|
|
|
+ month: this.form.month,
|
|
|
+ }))
|
|
|
+ }))
|
|
|
+ if (this.isCreate) {
|
|
|
+ await inspectionAdd(data)
|
|
|
+ this.$message.success('创建成功')
|
|
|
+ } else {
|
|
|
+ await inspectionUpdate({
|
|
|
+ ...data[0],
|
|
|
+ id: this.id,
|
|
|
+ })
|
|
|
+ this.$message.success('修改成功')
|
|
|
+ }
|
|
|
+ this.$emit('close')
|
|
|
+ this.$emit('submited')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } catch (error) {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style lang="less" scoped>
|
|
|
+.group{
|
|
|
+ background-color: rgba(0, 0, 0, 0.05);
|
|
|
+ padding: 10px;
|
|
|
+ border-radius: 3px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+}
|
|
|
+.ctrl{
|
|
|
+ margin-top: 45px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ i{
|
|
|
+ font-size: 24px;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|