Files
laws-sinotruk-client/src/views/workCenter/enterpriseStandardRevision/modules/CommentObjectEnterBaseInfo.vue
T

288 lines
9.2 KiB
Vue

<template>
<div>
<base-info-form ref="baseInfoForm" v-bind="$attrs" disabled></base-info-form>
<a-form-model :model="formInline" class="form-add" :rules="rules" ref="ruleForm">
<div class="form-flex-box">
<!-- 标准文本 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text" :title="$t('workCenter.enStandardRevision.standardText')">
{{ $t('workCenter.enStandardRevision.standardText') }}
</span>
</div>
<a-form-model-item class="item-model">
<div class="online-edit-wrapper">
<p>{{ $t('enterpriseStandard') }}</p>
<a-button type="primary" @click="onlineEditView">{{ $t('view') }}</a-button>
</div>
</a-form-model-item>
</div>
<!-- 有无意见 -->
<div class="box-title-text form-flex-item">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enStandardRevision.haveNoOpinion')">
{{ $t('workCenter.enStandardRevision.haveNoOpinion') }}
</span>
</div>
<a-form-model-item class="item-model" prop="haveNoOpinion">
<a-radio-group v-model="formInline.haveNoOpinion" :disabled="disabled" @change="reviewMeetingFlagChange">
<a-radio :value="HaveNoOpinion.HAVE.value">
{{ $t('workCenter.enStandardRevision.have') }}
</a-radio>
<a-radio :value="HaveNoOpinion.NO.value">
{{ $t('workCenter.enStandardRevision.noHave') }}
</a-radio>
</a-radio-group>
</a-form-model-item>
</div>
</div>
</a-form-model>
<template v-if="formInline.haveNoOpinion === '1'">
<!-- 操作区域 -->
<div v-if="!disabled" class="table-operator">
<!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" :disabled="disabled">
{{ $t('newlyAdded') }}
</a-button>
</div>
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="uid"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
@change="handleTableChange">
<!-- 操作栏 -->
<div slot="action" slot-scope="{record}" class="action-span-cell">
<a v-if="!disabled" @click="handleEdit(record)" class="table-ope-btn" :disabled="disabled">{{ $t('edit') }}</a>
<a-divider v-if="!disabled" type="vertical" />
<a v-if="!disabled" @click="handleDelete(record.uid)" class="table-ope-btn" :disabled="disabled">{{ $t('delete') }}</a>
</div>
</j-table>
</div>
</template>
<comment-modal ref="commentModal" @ok="modalFormOk"></comment-modal>
</div>
</template>
<script>
import BaseInfoForm from './BaseInfoForm'
import JTable from '@/components/jero/JTable'
import CommentModal from './CommentModal'
import { HaveNoOpinion } from '../../../../enums/commonEnums'
import Vue from 'vue'
import { kkFilePreview } from '@/utils/kkFilePreview'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { queryFileInfoByEditId } from '../../../../api/workCenter'
import { Base64 } from 'js-base64'
import { randomUUID } from '../../../../utils/util'
export default {
name: 'CommentObjectEnterBaseInfo',
components: { CommentModal, BaseInfoForm, JTable },
props: {
disabled: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
HaveNoOpinion,
loading: false,
formInline: {},
rules: {
// 有无意见
haveNoOpinion: [
{
required: true,
message: this.$t('workCenter.enStandardRevision.haveNoOpinion') + this.$t('cannotEmpty'),
trigger: 'change'
}
]
},
/* 分页参数 */
ipagination: {
current: 1,
pageSize: 10,
pageSizeOptions: ['10', '30', '50', '100', '150', '200'],
showTotal: (total, range) => {
return range[0] + '-' + range[1] + ' ' + this.$t('total') + total + this.$t('strip')
},
showQuickJumper: true,
showSizeChanger: true,
total: 0
},
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 条款号
title: this.$t('workCenter.enStandardRevision.clauseNumber'),
align: 'center',
width: 180,
dataIndex: 'clauseNum',
scopedSlots: { customRender: 'text' }
},
{ // 条款名称
title: this.$t('workCenter.enStandardRevision.clauseName'),
align: 'center',
width: 180,
dataIndex: 'clauseName',
scopedSlots: { customRender: 'text' }
},
{ // 修改意见内容(包括修改理由和依据)
title: this.$t('workCenter.enStandardRevision.contentOfRevisedOpinion'),
align: 'center',
width: 300,
dataIndex: 'editAdvice',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
width: 200
}
],
dataSource: [],
onEditFile: '' // 在线编辑的文件id
}
},
mounted () {
const formInline = {}
formInline.haveNoOpinion = '1'
this.formInline = Object.assign({}, formInline)
},
methods: {
// 拿到外面传进来的数据初始化,因为套了几层就不在外层初始化数据了
initData (data) {
this.formInline = Object.assign({}, data)
if (!this.formInline.haveNoOpinion) {
this.formInline.haveNoOpinion = '1'
}
// 给表格赋值,在线编辑不知道要怎么赋值?
this.dataSource = data.advices.map(item => {
return {
uid: randomUUID(),
...item
}
})
this.onEditFile = data.onEditFile
// 给表单赋值
this.$nextTick(() => {
this.$refs.baseInfoForm.initData(data)
})
},
// 外层要获取数据
getData () {
// 把数据抛出,在线编辑不知道要不要抛
const data = Object.assign({}, this.formInline)
data.advices = this.dataSource
data.businessJson = JSON.stringify(this.$refs.baseInfoForm.getData())
// 在线编辑文件id
data.onEditFile = this.onEditFile
return data
},
// 外层获取数据要过校验,返回false表示没有通过校验
async getDataValidate () {
let data = {} // 要返回的数据
await this.$refs.ruleForm.validate(valid => {
if (this.formInline.haveNoOpinion === '1' && this.dataSource && this.dataSource.length > 0) {
data = Object.assign({}, this.formInline)
data.advices = this.dataSource
} else if (this.formInline.haveNoOpinion === '1' && (!this.dataSource || this.dataSource.length <= 0)) {
this.$message.warning(this.$t('addAtLeastOneRowOfData'))
data = false
} else {
data = Object.assign({}, this.formInline)
}
})
return data
},
handleTableChange (pagination) {
this.ipagination = pagination
},
// 新增征求意见
handleAdd () {
// 左侧预览在线编辑的文件
const file = this.onEditFile
this.$refs.commentModal.title = this.$t('newlyAdded')
this.$refs.commentModal.add(file)
},
// 征求意见的编辑
handleEdit (record) {
// 左侧预览在线编辑的文件
const file = this.onEditFile
this.$refs.commentModal.title = this.$t('edit')
this.$refs.commentModal.edit(file, record, record.uid)
},
// 征求意见的删除
handleDelete (uid) {
this.$confirm({
title: this.$t('confirmDeletion'),
content: this.$t('areYouSure'),
onOk: () => {
const dataIndex = this.dataSource.findIndex(item => item.uid === uid)
this.dataSource.splice(dataIndex, 1)
}
})
},
// 征求意见新增编辑完成
modalFormOk (value, uid) {
console.log(value, uid)
if (uid || uid === 0) {
// 有下标,说明是编辑
const dataIndex = this.dataSource.findIndex(item => item.uid === uid)
this.dataSource.splice(dataIndex, 1, value)
} else {
// 没有下标, 是新增
this.dataSource.push({ uid: randomUUID(), ...value })
}
},
// 在线编辑的查看
onlineEditView () {
this.$emit('onlineEditView', this.onEditFile)
},
reviewMeetingFlagChange () {
console.log('------change', this.formInline)
this.$forceUpdate()
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.online-edit-wrapper {
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
p {
margin-bottom: 0;
height: 100%;
}
.ant-btn {
margin-right: 20px;
}
}
</style>