|
|
@@ -0,0 +1,288 @@
|
|
|
+<template>
|
|
|
+ <el-dialog v-model="visible" :title="titleMap[mode]" :width="680" @closed="$emit('closed', fileIsDel)">
|
|
|
+ <el-form ref="formRef" :model="form" :rules="rules" :disabled="mode == 'detail'" label-width="110px">
|
|
|
+ <el-row>
|
|
|
+ <el-col v-if="form.id" :span="12">
|
|
|
+ <el-form-item label="政策编号" prop="businessNo">
|
|
|
+ <el-input v-model="form.businessNo" disabled></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="填报人">
|
|
|
+ <el-input v-model="form.createName" disabled></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="填报部门">
|
|
|
+ <el-input v-model="form.deptName" disabled></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="填报单位">
|
|
|
+ <el-input v-model="form.companyName" disabled></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col v-if="form.id" :span="12">
|
|
|
+ <el-form-item label="填报时间">
|
|
|
+ <el-date-picker v-model="form.createTime" disabled format="YYYY-MM-DD HH:mm:ss"></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="项目名称" prop="name">
|
|
|
+ <el-input v-model="form.name" :disabled="mode == 'explain'" placeholder="请输入项目名称"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="项目等级" prop="zcLevel">
|
|
|
+ <el-select v-model="form.zcLevel" :disabled="mode == 'explain'" placeholder="请选择项目等级">
|
|
|
+ <el-option v-for="item in levelDic" :key="item" :label="item" :value="item"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="项目类别" prop="zcType">
|
|
|
+ <el-select v-model="form.zcType" :disabled="mode == 'explain'" placeholder="请选择项目类别">
|
|
|
+ <el-option v-for="item in typeDic" :key="item" :label="item" :value="item"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="政策文号" prop="docNo">
|
|
|
+ <el-input v-model="form.docNo" :disabled="mode == 'explain'" placeholder="请输入政策文号"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="联系方式" prop="contactPhone">
|
|
|
+ <el-input v-model="form.contactPhone" :disabled="mode == 'explain'" placeholder="请输入联系方式"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="预计争取金额" prop="yjStriveAmount">
|
|
|
+ <el-input-number v-model="form.yjStriveAmount" :min="0" :step="0.1" :precision="2" controls-position="right" :disabled="mode == 'explain'" placeholder="请输入预计争取金额"></el-input-number>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="预计完成时间" prop="yjFinishTime">
|
|
|
+ <el-date-picker v-model="form.yjFinishTime" value-format="YYYY-MM-DD" :disabled="mode == 'explain'" placeholder="请选择预计完成时间"></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="责任人" prop="directorName">
|
|
|
+ <el-input v-model="form.directorName" :disabled="mode == 'explain'" placeholder="请输入责任人"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="项目概要" prop="abstractContent">
|
|
|
+ <el-input v-model="form.abstractContent" type="textarea" :rows="4" :disabled="mode == 'explain'" placeholder="请输入项目概要"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item :class="(mode == 'detail' || mode == 'explain') && 'no-upload-btn'" label="附件">
|
|
|
+ <yhUpload v-model="form.fileList" :limit="10" :disabled="mode == 'explain'" @updateTable="fileIsDel = true">
|
|
|
+ <el-button type="primary" icon="upload" size="small"></el-button>
|
|
|
+ </yhUpload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-row v-if="form.status == 'done'">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="是否已落地" prop="isLand">
|
|
|
+ <el-radio-group v-model="form.isLand" @change="form.landAmount = null, form.partPersonArr = null">
|
|
|
+ <el-radio v-for="(label, key) in whetherDic" :key="key" :label="label" :value="parseInt(key)"></el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <template v-if="form.isLand == 1">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="落地金额" prop="landAmount">
|
|
|
+ <el-input-number v-model="form.landAmount" :min="0" :step="0.1" :precision="2" controls-position="right" placeholder="请输入落地金额"></el-input-number>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item label="参与人" prop="partPerson">
|
|
|
+ <el-input v-model="form.partPerson" type="textarea" :rows="4" placeholder="请输入参与人(以英文 , 分割)"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </template>
|
|
|
+ <el-col :span="24">
|
|
|
+ <el-form-item class="label-column-2" :label="titleMap['explain']" prop="monthSituation" label-width="80px">
|
|
|
+ <el-input v-model="form.monthSituation" type="textarea" :rows="4" :placeholder="`请输入${titleMap['explain']}`"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <template #footer>
|
|
|
+ <template v-if="mode == 'explain'">
|
|
|
+ <el-button type="primary" @click="validateForm(mode)">保存上报</el-button>
|
|
|
+ </template>
|
|
|
+ <template v-if="mode == 'add' || mode == 'edit'">
|
|
|
+ <el-button type="primary" @click="validateForm(mode)">保 存</el-button>
|
|
|
+ <el-button type="primary" @click="validateForm('saveApprove')">直接上报</el-button>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import Common from "@/api/common";
|
|
|
+import API from "@/api/policy/strive";
|
|
|
+import { useUserStore } from "@/store/user";
|
|
|
+import { levelDic, typeDic, whetherDic } from "@/views/policyShare/main";
|
|
|
+import yhUpload from "@/components/Upload/index.vue";
|
|
|
+
|
|
|
+const { userInfo } = useUserStore(); // store 用户
|
|
|
+
|
|
|
+export default {
|
|
|
+ emits: ["success", "closed"],
|
|
|
+ components: {
|
|
|
+ yhUpload
|
|
|
+ },
|
|
|
+
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ levelDic, typeDic, whetherDic,
|
|
|
+
|
|
|
+ visible: false,
|
|
|
+ mode: "add",
|
|
|
+ titleMap: {
|
|
|
+ add: "新增",
|
|
|
+ edit: "编辑",
|
|
|
+ detail: "详情",
|
|
|
+ explain: "月度争取情况说明"
|
|
|
+ },
|
|
|
+ form: {
|
|
|
+ id: null,
|
|
|
+ businessNo: null,
|
|
|
+ status: null,
|
|
|
+ createId: userInfo.id,
|
|
|
+ createName: userInfo.name,
|
|
|
+ createTime: null,
|
|
|
+ name: null,
|
|
|
+ companyName: null,
|
|
|
+ deptName: null,
|
|
|
+ zcLevel: null,
|
|
|
+ zcType: null,
|
|
|
+ docNo: null,
|
|
|
+ contactPhone: null,
|
|
|
+ directorName: null,
|
|
|
+ yjFinishTime: null,
|
|
|
+ yjStriveAmount: null,
|
|
|
+ abstractContent: null,
|
|
|
+ isLand: 0,
|
|
|
+ landAmount: null,
|
|
|
+ partPersonArr: "[]", // [{name: }]
|
|
|
+ partPerson: null, // a1,a2
|
|
|
+ monthSituation: null,
|
|
|
+ fileList: []
|
|
|
+ },
|
|
|
+
|
|
|
+ rules: {
|
|
|
+ businessNo: [{ required: true }],
|
|
|
+ name: [{ required: true, message: "请输入政策名称" }],
|
|
|
+ zcLevel: [{ required: true, message: "请选择政策等级" }],
|
|
|
+ zcType: [{ required: true, message: "请选择政策类别" }],
|
|
|
+ docNo: [{ required: true, message: "请输入政策文号" }],
|
|
|
+ contactPhone: [{ required: true, message: "请输入联系方式" }],
|
|
|
+ directorName: [{ required: true, message: "请输入责任人" }],
|
|
|
+ yjFinishTime: [{ required: true, message: "请选择预计完成时间" }],
|
|
|
+ yjStriveAmount: [{ required: true, message: "请输入预计争取金额" }],
|
|
|
+ abstractContent: [{ required: true, message: "请输入政策概要" }],
|
|
|
+ isLand: [{ required: true }],
|
|
|
+ landAmount: [{ required: true, message: "请输入落地金额" }],
|
|
|
+ partPerson: [{ required: true, message: "请输入参与人(以英文 , 分割)" }],
|
|
|
+ monthSituation: [{ required: true, message: "请输入月度争取情况" }]
|
|
|
+ },
|
|
|
+
|
|
|
+ fileIsDel: false,
|
|
|
+ dialog: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ mounted() {
|
|
|
+ this.getUserDept();
|
|
|
+ },
|
|
|
+
|
|
|
+ methods: {
|
|
|
+ init(mode = "add") {
|
|
|
+ this.mode = mode;
|
|
|
+ this.visible = true;
|
|
|
+ return this;
|
|
|
+ },
|
|
|
+
|
|
|
+ setData(id) {
|
|
|
+ API.detail(id).then(res => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ for (const key in this.form) {
|
|
|
+ if (key == "fileList") {
|
|
|
+ this.form[key] = res.data[key].map(file => ({ ...file, name: file.originalName, path: file.fileDomain + "/" + file.fileName }));
|
|
|
+ } else if (key == "isLand") this.form.isLand = !!res.data[key] && res.data[key] || 0;
|
|
|
+ else this.form[key] = res.data[key] || null;
|
|
|
+ }
|
|
|
+ this.form.updateId = userInfo.id;
|
|
|
+ this.form.partPerson = res.data["partPersonArr"] && JSON.parse(res.data["partPersonArr"]).map(item => item.name).join() || null;
|
|
|
+ } else ElMessage.error(res.msg);
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ getUserDept() {
|
|
|
+ Common.getUserDept(userInfo.deptId).then(res => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ this.form.companyName = res.data.companyName;
|
|
|
+ this.form.deptName = res.data.deptName;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 表单提交方法
|
|
|
+ validateForm(mode) {
|
|
|
+ this.$refs.formRef.validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ this.submit(mode);
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ submit(mode) {
|
|
|
+ const partPersonArr = this.form.partPerson && JSON.stringify(this.form.partPerson.split(",").map(name => ({ name }))) || "";
|
|
|
+ API[mode]({ ...this.form, partPersonArr }).then(() => {
|
|
|
+ ElMessage.success("操作成功");
|
|
|
+ this.visible = false;
|
|
|
+ this.fileIsDel = false;
|
|
|
+ this.$emit("success", mode);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.no-upload-btn :deep(.yh-upload-file) {
|
|
|
+ .el-upload {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-upload-list.is-disabled {
|
|
|
+ margin-top: 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.el-input-number {
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ :deep(.el-input) .el-input__wrapper {
|
|
|
+ padding: 1px 11px;
|
|
|
+
|
|
|
+ .el-input__inner {
|
|
|
+ text-align: unset;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.label-column-2 :deep(.el-form-item__label) {
|
|
|
+ margin-left: 30px;
|
|
|
+}
|
|
|
+</style>
|