|
|
@@ -0,0 +1,425 @@
|
|
|
+<!-- 机构编辑弹窗 -->
|
|
|
+<template>
|
|
|
+ <ele-modal
|
|
|
+ width="880px"
|
|
|
+ :visible="visible"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ custom-class="ele-dialog-form"
|
|
|
+ :title="isUpdate ? '修改机构' : '添加机构'"
|
|
|
+ @update:visible="updateVisible"
|
|
|
+ >
|
|
|
+ <el-form ref="form" :model="form" :rules="rules" label-width="140px">
|
|
|
+ <el-row :gutter="15">
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="上级机构:">
|
|
|
+ <org-select
|
|
|
+ v-model="form.parentId"
|
|
|
+ :data="organizationList"
|
|
|
+ placeholder="请选择上级机构"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="机构名称:" prop="name">
|
|
|
+ <el-input
|
|
|
+ clearable
|
|
|
+ :maxlength="20"
|
|
|
+ v-model="form.name"
|
|
|
+ placeholder="请输入机构名称"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="机构类型:"
|
|
|
+ prop="type"
|
|
|
+ style="margin-bottom: 22px"
|
|
|
+ >
|
|
|
+ <DictSelection
|
|
|
+ dictName="机构类型"
|
|
|
+ clearable
|
|
|
+ v-model="form.type"
|
|
|
+ labelName="dictValue"
|
|
|
+ >
|
|
|
+ </DictSelection>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item
|
|
|
+ label="负责人:"
|
|
|
+ style="margin-bottom: 22px"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ @click.native="openStaffSelection"
|
|
|
+ v-model="responsibleName"
|
|
|
+ placeholder="请选择"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col :span="12">
|
|
|
+
|
|
|
+ <el-form-item
|
|
|
+ label="状态:"
|
|
|
+ style="margin-bottom: 22px"
|
|
|
+ >
|
|
|
+ <el-select v-model="form.status" style="width: 100%">
|
|
|
+ <el-option label="开启" :value="1"></el-option>
|
|
|
+ <el-option label="关闭" :value="0"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+
|
|
|
+ <el-form-item
|
|
|
+ label="排序:"
|
|
|
+ style="margin-bottom: 22px"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-model="form.sort"
|
|
|
+ placeholder="请选择"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ <headerTitle
|
|
|
+ title="企业信息"
|
|
|
+ style="margin-top: 30px"
|
|
|
+ v-if="['10', '20'].includes(form.type)"
|
|
|
+ ></headerTitle>
|
|
|
+
|
|
|
+ <el-form
|
|
|
+ ref="enterpriseForm"
|
|
|
+ :model="enterprise"
|
|
|
+ :rules="enterpriseRules"
|
|
|
+ label-width="140px"
|
|
|
+ v-if="['10', '20'].includes(form.type)"
|
|
|
+ >
|
|
|
+ <el-row :gutter="15">
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="企业名称:" prop="name">
|
|
|
+ <el-input
|
|
|
+ clearable
|
|
|
+ :maxlength="50"
|
|
|
+ v-model="enterprise.name"
|
|
|
+ placeholder="请输入企业名称"
|
|
|
+ :disabled="true"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="企业地址:" prop="address">
|
|
|
+ <el-input
|
|
|
+ clearable
|
|
|
+ :maxlength="50"
|
|
|
+ v-model="enterprise.address"
|
|
|
+ placeholder="请输入企业地址"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="企业电话:" prop="tel">
|
|
|
+ <el-input
|
|
|
+ clearable
|
|
|
+ :maxlength="20"
|
|
|
+ v-model="enterprise.tel"
|
|
|
+ placeholder="请输入企业电话"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="登记日期:" prop="registerDate">
|
|
|
+ <el-date-picker
|
|
|
+ style="width: 100%"
|
|
|
+ clearable
|
|
|
+ v-model="enterprise.registerDate"
|
|
|
+ type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ placeholder="请选择日期"
|
|
|
+ >
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="统一社会性代码:" prop="unifiedSocialCreditCode">
|
|
|
+ <el-input
|
|
|
+ clearable
|
|
|
+ :maxlength="50"
|
|
|
+ v-model="enterprise.unifiedSocialCreditCode"
|
|
|
+ placeholder="请输入统一社会性代码"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="经营范围:" prop="businessScope">
|
|
|
+ <el-input
|
|
|
+ clearable
|
|
|
+ type="textarea"
|
|
|
+ :maxlength="100"
|
|
|
+ v-model="enterprise.businessScope"
|
|
|
+ placeholder="请输入经营范围"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item label="经营产品:" prop="mainProduct">
|
|
|
+ <el-input
|
|
|
+ clearable
|
|
|
+ type="textarea"
|
|
|
+ :maxlength="100"
|
|
|
+ v-model="enterprise.mainProduct"
|
|
|
+ placeholder="请输入经营产品"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col
|
|
|
+ v-bind="styleResponsive ? { sm: 12 } : { span: 12 }"
|
|
|
+ style="margin-bottom: 20px"
|
|
|
+ >
|
|
|
+ <el-form-item label="企业传真:" prop="fax">
|
|
|
+ <el-input
|
|
|
+ clearable
|
|
|
+ v-model="enterprise.fax"
|
|
|
+ placeholder="请输入企业传真"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
|
|
|
+ <el-form-item prop="files" label="附件:">
|
|
|
+ <fileUpload
|
|
|
+ v-model="enterprise.businessLicenseFile"
|
|
|
+ module="main"
|
|
|
+ :showLib="false"
|
|
|
+ :limit="10"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ <template v-slot:footer>
|
|
|
+ <el-button @click="updateVisible(false)">取消</el-button>
|
|
|
+ <el-button type="primary" :loading="loading" @click="save">
|
|
|
+ 保存
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ <staffSelection
|
|
|
+ ref="staffSelection"
|
|
|
+ @confirm="confirmStaffSelection"
|
|
|
+ ></staffSelection>
|
|
|
+ </ele-modal>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import OrgSelect from './org-select.vue';
|
|
|
+ import OrgTypeSelect from './org-type-select.vue';
|
|
|
+ import staffSelection from './staffSelection.vue';
|
|
|
+ import fileUpload from '@/components/upload/fileUpload';
|
|
|
+ import { copyObj } from '@/utils/util';
|
|
|
+
|
|
|
+ const defEnterprise = {
|
|
|
+ businessLicenseFile: [],
|
|
|
+ name: null,
|
|
|
+ address: null,
|
|
|
+ tel: '',
|
|
|
+ registerDate: '',
|
|
|
+ unifiedSocialCreditCode: '',
|
|
|
+ businessScope: '',
|
|
|
+ mainProduct: '',
|
|
|
+ remark: '',
|
|
|
+ fax: ''
|
|
|
+ };
|
|
|
+ import {
|
|
|
+ addOrganization,
|
|
|
+ updateOrganization,
|
|
|
+ getById
|
|
|
+ } from '@/api/system/organization';
|
|
|
+ export default {
|
|
|
+ components: { OrgSelect, OrgTypeSelect, staffSelection, fileUpload },
|
|
|
+ props: {
|
|
|
+ // 弹窗是否打开
|
|
|
+ visible: Boolean,
|
|
|
+ // 修改回显的数据
|
|
|
+ data: Object,
|
|
|
+ // 上级id
|
|
|
+ parentId: [Number, String],
|
|
|
+ // 机构数据
|
|
|
+ organizationList: Array
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ const defaultForm = {
|
|
|
+ id: null,
|
|
|
+ parentId: null,
|
|
|
+ name: '',
|
|
|
+ type: '',
|
|
|
+ sort: null,
|
|
|
+ status: 1,
|
|
|
+ manager: []
|
|
|
+ };
|
|
|
+ return {
|
|
|
+ defaultForm,
|
|
|
+ responsibleName: '',
|
|
|
+ // 表单数据
|
|
|
+ form: { ...defaultForm },
|
|
|
+ enterprise: { ...defEnterprise },
|
|
|
+ // 表单验证规则
|
|
|
+ rules: {
|
|
|
+ name: [
|
|
|
+ { required: true, message: '请输入机构名称', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ manager: [
|
|
|
+ { required: true, message: '请选择负责人', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ type: [{ required: true, message: '请选择机构类型', trigger: 'blur' }]
|
|
|
+ },
|
|
|
+ // 表单验证规则
|
|
|
+ enterpriseRules: {
|
|
|
+ name: [
|
|
|
+ { required: true, message: '请输入企业名称', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ address: [
|
|
|
+ { required: true, message: '请输入企业地址', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ unifiedSocialCreditCode: [
|
|
|
+ { required: true, message: '请输入统一社会性代码', trigger: 'blur' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ // 提交状态
|
|
|
+ loading: false,
|
|
|
+ // 是否是修改
|
|
|
+ isUpdate: false
|
|
|
+ };
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ // 是否开启响应式布局
|
|
|
+ styleResponsive() {
|
|
|
+ return this.$store.state.theme.styleResponsive;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ /* 保存编辑 */
|
|
|
+ async save() {
|
|
|
+ if (!(await this.formValidate())) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ ['10', '20'].includes(this.form.type) &&
|
|
|
+ !(await this.enterpriseValidate())
|
|
|
+ ) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ let form = {
|
|
|
+ ...this.form
|
|
|
+ };
|
|
|
+ if (['10', '20'].includes(this.form.type)) {
|
|
|
+ form['enterprise'] = this.enterprise;
|
|
|
+ }
|
|
|
+ this.loading = true;
|
|
|
+ const data = {
|
|
|
+ ...form,
|
|
|
+ parentId: this.form.parentId || 0
|
|
|
+ };
|
|
|
+ if (!this.isUpdate) {
|
|
|
+ delete data.id;
|
|
|
+ }
|
|
|
+ const saveOrUpdate = this.isUpdate
|
|
|
+ ? updateOrganization
|
|
|
+ : addOrganization;
|
|
|
+ saveOrUpdate(data)
|
|
|
+ .then((msg) => {
|
|
|
+ this.loading = false;
|
|
|
+ this.$message.success(msg);
|
|
|
+ this.updateVisible(false);
|
|
|
+ this.$emit('done');
|
|
|
+ })
|
|
|
+ .catch((e) => {
|
|
|
+ this.loading = false;
|
|
|
+ // this.$message.error(e.message);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ formValidate() {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ this.$refs.form.validate((valid) => {
|
|
|
+ resolve(valid);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ enterpriseValidate() {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ this.$refs.enterpriseForm.validate((valid) => {
|
|
|
+ resolve(valid);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ //选择负责人
|
|
|
+ confirmStaffSelection(data) {
|
|
|
+ this.form.manager = JSON.parse(JSON.stringify(data));
|
|
|
+ this.responsibleName = data.map((item) => item.name).toString();
|
|
|
+ },
|
|
|
+ openStaffSelection() {
|
|
|
+ console.log(this.form.manager);
|
|
|
+ this.$refs.staffSelection.open(
|
|
|
+ JSON.parse(JSON.stringify(this.form.manager)) || []
|
|
|
+ );
|
|
|
+ },
|
|
|
+ /* 更新visible */
|
|
|
+ updateVisible(value) {
|
|
|
+ this.$emit('update:visible', value);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ form: {
|
|
|
+ deep: true,
|
|
|
+ handler(n) {
|
|
|
+ this.enterprise.name = n.name;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ visible(visible) {
|
|
|
+ if (visible) {
|
|
|
+ if (this.data) {
|
|
|
+ getById(this.data.id).then((res) => {
|
|
|
+ for (const key in res.enterprise) {
|
|
|
+ this.$set(this.enterprise, key, res.enterprise[key]);
|
|
|
+ }
|
|
|
+ for (const key in res) {
|
|
|
+ if (key == 'parentId') {
|
|
|
+ this.$set(
|
|
|
+ this.form,
|
|
|
+ key,
|
|
|
+ res[key] == 0 ? '' : res[key] ?? ''
|
|
|
+ );
|
|
|
+ }
|
|
|
+ if (key != 'enterprise') {
|
|
|
+ this.$set(this.form, key, res[key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.form.type = '' + this.form.type; //回显
|
|
|
+ this.responsibleName =
|
|
|
+ res.manager && res.manager.map((item) => item.name).toString();
|
|
|
+ });
|
|
|
+
|
|
|
+ // this.form.type = '' + this.form.type; //回显
|
|
|
+ // this.responsibleName =
|
|
|
+ // this.data.manager &&
|
|
|
+ // this.data.manager.map((item) => item.name).toString();
|
|
|
+ this.isUpdate = true;
|
|
|
+ } else {
|
|
|
+ this.form.parentId = this.parentId;
|
|
|
+ this.isUpdate = false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.$refs.form.clearValidate();
|
|
|
+ this.$refs.enterpriseForm &&
|
|
|
+ this.$refs.enterpriseForm.clearValidate();
|
|
|
+ this.form = { ...this.defaultForm };
|
|
|
+ this.enterprise = { ...defEnterprise };
|
|
|
+ this.responsibleName = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+</script>
|