zhuangyunsheng 1 år sedan
förälder
incheckning
e9e199bbbe

+ 10 - 10
src/views/manage/policyShare.vue

@@ -142,14 +142,21 @@ export default {
             this.reloadTable();
         },
 
+        table_export() {
+            const header = this.columns.map(c => c.label);
+            const data = this.tableData.map(v => this.columns.map(c => c.props).map(j => this.columnFormat(v, j)));
+
+            exportExcel(header, data, [], `${this.$route.name}.xlsx`);
+        },
+
         table_add() {
             this.dialog = true;
-            this.$nextTick(() => this.$refs.policyDetail.init("saveDone"));
+            this.$nextTick(() => this.$refs.policyDetail.open("saveDone"));
         },
 
         table_edit(row, mode = "edit") {
             this.dialog = true;
-            this.$nextTick(() => this.$refs.policyDetail.init(mode).setData(row.id));
+            this.$nextTick(() => this.$refs.policyDetail.open(mode).setData(row.id));
         },
 
         table_del(row) {
@@ -162,7 +169,7 @@ export default {
                     if (res.code == 200) {
                         ElMessage.success("操作成功");
                         this.reloadTable();
-                    } else ElMessage.warning(res.msg);
+                    } else ElMessage.error(res.msg);
                 });
             });
         },
@@ -170,13 +177,6 @@ export default {
         closed(e) {
             e && this.reloadTable();
             this.dialog = false;
-        },
-
-        table_export() {
-            const header = this.columns.map(c => c.label);
-            const data = this.tableData.map(v => this.columns.map(c => c.props).map(j => this.columnFormat(v, j)));
-
-            exportExcel(header, data, [], `${this.$route.name}.xlsx`);
         }
     }
 }

+ 4 - 4
src/views/manage/policyStrive/index.vue

@@ -74,7 +74,7 @@ import { exportExcel } from "@/utils/exportExcel";
 import { levelDic, typeDic } from "@/views/policyShare/main";
 import { columns, statusDic } from "./main";
 import yhPagination from "@/components/Pagination/index.vue";
-import policyStriveDetail from "@/views/policyStrive/dialog.vue";
+import policyStriveDetail from "@/views/policyStrive/explain.vue";
 import policyStriveScore from "./scoreDialog.vue";
 import policyStriveReward from "./rewardDialog.vue";
 
@@ -154,17 +154,17 @@ export default {
 
         table_detail(row) {
             this.dialog.detail = true;
-            this.$nextTick(() => this.$refs.policyStriveDetail.init("detail").setData(row.id));
+            this.$nextTick(() => this.$refs.policyStriveDetail.open("detail").setData(row.id));
         },
 
         table_score(row) {
             this.dialog.score = true;
-            this.$nextTick(() => this.$refs.policyStriveScore.init().setData(row));
+            this.$nextTick(() => this.$refs.policyStriveScore.open().setData(row));
         },
 
         table_reward(row) {
             this.dialog.reward = true;
-            this.$nextTick(() => this.$refs.policyStriveReward.init().setData(row));
+            this.$nextTick(() => this.$refs.policyStriveReward.open().setData(row));
         }
     }
 }

+ 9 - 7
src/views/manage/policyStrive/rewardDialog.vue

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog v-model="visible" title="奖励分配人员" width="700" @closed="$emit('closed')">
+    <el-dialog v-model="visible" title="奖励分配人员" width="680" @closed="$emit('closed')">
         <el-form ref="formRef" :model="form" :rules="rules" :disabled="disabled" label-width="110px">
             <el-row>
                 <el-col :span="12">
@@ -11,7 +11,7 @@
                 <el-col :span="24">
                     <el-form-item label="参与人" prop="partPerson">
                         <el-table header-cell-class-name="tjm_card_table_header" :data="form.partPerson" border>
-			                <el-table-column label="参与人" prop="name"></el-table-column>
+			                <el-table-column label="姓名" prop="name"></el-table-column>
 			                <el-table-column label="奖励分配" prop="reward">
                                 <template #default="scope">
                                     <el-input-number v-model="scope.row.reward" :min="0" :max="form.rewardScore" :step="0.1" :precision="2" :controls="false"></el-input-number>
@@ -61,7 +61,7 @@ export default {
     },
 
     methods: {
-        init() {
+        open() {
             this.visible = true;
             return this;
         },
@@ -78,10 +78,12 @@ export default {
         submit() {
             this.$refs.formRef.validate(valid => {
                 if (valid) {
-                    API.updateById({ ...this.form, isReward: 1, partPersonArr: JSON.stringify(this.form.partPerson) }).then(() => {
-                        ElMessage.success("操作成功");
-                        this.visible = false;
-                        this.$emit("success");
+                    API.updateById({ ...this.form, isReward: 1, partPersonArr: JSON.stringify(this.form.partPerson) }).then(res => {
+                        if (res.code === 200) {
+                            ElMessage.success("操作成功");
+                            this.visible = false;
+                            this.$emit("success");
+                        } else ElMessage.error(res.msg);
                     });
                 } else {
                     return false;

+ 7 - 7
src/views/manage/policyStrive/scoreDialog.vue

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog v-model="visible" title="政策考核评分" width="700" @closed="$emit('closed')">
+    <el-dialog v-model="visible" title="政策考核评分" width="680" @closed="$emit('closed')">
         <el-form ref="formRef" :model="form" :rules="rules" :disabled="disabled" label-width="110px">
             <el-row>
                 <el-col :span="12">
@@ -12,22 +12,22 @@
 						<el-input-number v-model="form.rewardRadix" readonly :controls="false"></el-input-number>
                     </el-form-item>
                 </el-col>
-                <el-col :span="12">
+                <el-col :push="2" :span="20">
                     <el-form-item label="实施难易程度" prop="implementScore">
                         <el-input-number v-model="form.implementScore" :min="0" :max="1" :step="0.1" :precision="2" :controls="false" placeholder="实施难易程度" @change="calcWeight"></el-input-number>
                     </el-form-item>
                 </el-col>
-                <el-col :span="12">
+                <el-col :push="2" :span="20">
                     <el-form-item label="复制推广潜力" prop="promotionScore">
                         <el-input-number v-model="form.promotionScore" :min="0" :max="1" :step="0.1" :precision="2" :controls="false" placeholder="复制推广潜力" @change="calcWeight"></el-input-number>
                     </el-form-item>
                 </el-col>
-                <el-col :span="12">
+                <el-col :push="2" :span="20">
                     <el-form-item label="政策争取效果" prop="striveScore">
                         <el-input-number v-model="form.striveScore" :min="0" :max="1" :step="0.1" :precision="2" :controls="false" placeholder="政策争取效果" @change="calcWeight"></el-input-number>
                     </el-form-item>
                 </el-col>
-                <el-col :span="12">
+                <el-col :push="2" :span="20">
                     <el-form-item label="奖励标准" prop="rewardScore">
 						<el-input-number v-model="form.rewardScore" readonly :controls="false"></el-input-number>
                     </el-form-item>
@@ -73,7 +73,7 @@ export default {
     },
 
     methods: {
-        init() {
+        open() {
             this.visible = true;
             return this;
         },
@@ -102,7 +102,7 @@ export default {
         submit() {
             this.$refs.formRef.validate(valid => {
                 if (valid) {
-                    API.updateById({ ...this.form }).then(() => {
+                    API.updateById({ ...this.form }).then(res => {
                         ElMessage.success("操作成功");
                         this.visible = false;
                         this.$emit("success");

+ 6 - 4
src/views/policyShare/approve.vue

@@ -87,10 +87,12 @@ export default {
         submit() {
             this.$refs.formRef.validate(valid => {
                 if (valid) {
-                    API[this.handler](this.form).then(() => {
-                        ElMessage.success("操作成功");
-                        this.visible = false;
-                        this.$emit("success");
+                    API[this.handler](this.form).then(res => {
+                        if (res.code === 200) {
+                            ElMessage.success("操作成功");
+                            this.visible = false;
+                            this.$emit("success");
+                        } else ElMessage.error(res.msg);
                     });
                 } else {
                     return false;

+ 8 - 6
src/views/policyShare/dialog.vue

@@ -170,7 +170,7 @@ export default {
     },
 
     methods: {
-        init(mode = "add", handler) {
+        open(mode = "add", handler) {
             this.mode = mode;
             this.handler = handler;
             this.visible = true;
@@ -208,11 +208,13 @@ export default {
         },
 			
         submit(mode) {
-            API[mode](this.form).then(() => {
-                ElMessage.success("操作成功");
-                this.visible = false;
-                this.fileIsDel = false;
-                this.$emit("success", mode);
+            API[mode](this.form).then(res => {
+                if (res.code === 200) {
+                    ElMessage.success("操作成功");
+                    this.visible = false;
+                    this.fileIsDel = false;
+                    this.$emit("success", mode);
+                } else ElMessage.error(res.msg);
             });
         },
 

+ 10 - 10
src/views/policyShare/index.vue

@@ -151,14 +151,21 @@ export default {
             this.reloadTable();
         },
 
+        table_export() {
+            const header = columns.map(c => c.label);
+            const data = this.tableData.map(v => columns.map(c => c.props).map(j => this.columnFormat(v, j)));
+
+            exportExcel(header, data, [], `${this.$route.name}.xlsx`);
+        },
+
         table_add() {
             this.dialog = true;
-            this.$nextTick(() => this.$refs.policyDetail.init());
+            this.$nextTick(() => this.$refs.policyDetail.open());
         },
 
         table_edit(row, mode = "edit") {
             this.dialog = true;
-            this.$nextTick(() => this.$refs.policyDetail.init(mode).setData(row.id));
+            this.$nextTick(() => this.$refs.policyDetail.open(mode).setData(row.id));
         },
 
         table_del(row) {
@@ -171,7 +178,7 @@ export default {
                     if (res.code == 200) {
                         ElMessage.success("操作成功");
                         this.reloadTable();
-                    } else ElMessage.warning(res.msg);
+                    } else ElMessage.error(res.msg);
                 });
             });
         },
@@ -195,13 +202,6 @@ export default {
         closed(e) {
             e && this.reloadTable();
             this.dialog = false;
-        },
-
-        table_export() {
-            const header = columns.map(c => c.label);
-            const data = this.tableData.map(v => columns.map(c => c.props).map(j => this.columnFormat(v, j)));
-
-            exportExcel(header, data, [], `${this.$route.name}.xlsx`);
         }
     }
 }

+ 29 - 91
src/views/policyStrive/dialog.vue

@@ -1,30 +1,30 @@
 <template>
-    <el-dialog v-model="visible" :title="titleMap[mode]" width="700" top="5vh" @closed="$emit('closed', fileIsDel)">
-        <el-form ref="formRef" :model="form" :rules="rules" :disabled="mode == 'detail'" label-width="110px">
+    <el-dialog v-model="visible" :title="titleMap[mode]" width="680" @closed="$emit('closed', fileIsDel)">
+        <el-form ref="formRef" :model="form" :rules="rules" 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-input v-model="form.businessNo" readonly></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-input v-model="form.createName" readonly></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-input v-model="form.deptName" readonly></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-input v-model="form.companyName" readonly></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-date-picker v-model="form.createTime" readonly format="YYYY-MM-DD HH:mm:ss"></el-date-picker>
                     </el-form-item>
                 </el-col>
                 <el-col :span="12">
@@ -72,26 +72,19 @@
                     </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" placeholder="请输入项目概要"></el-input>
+                    <el-form-item label="政策考核类别" prop="rewardType">
+                        <el-radio-group v-model="form.rewardType">
+                            <el-radio v-for="(label, key) in rewardTypeDic" :key="key" :label="label" :value="parseInt(key)"></el-radio>
+                        </el-radio-group>
                     </el-form-item>
                 </el-col>
                 <el-col :span="24">
-                    <el-form-item label="政策考核类别" prop="rewardType">
-                        <el-collapse v-model="activeNames">
-                            <el-radio-group v-model="form.rewardType">
-                                <el-collapse-item v-for="(item, key) in rewardTypeDic" :key="key" :name="key + 1">
-                                    <template #title>
-                                        <el-radio :label="item.label" :value="key + 1"></el-radio>
-                                    </template>
-                                    {{ item.value }}
-                                </el-collapse-item>
-                            </el-radio-group>
-                        </el-collapse>
+                    <el-form-item label="项目概要" prop="abstractContent">
+                        <el-input v-model="form.abstractContent" type="textarea" :rows="4" placeholder="请输入项目概要"></el-input>
                     </el-form-item>
                 </el-col>
                 <el-col :span="24">
-                    <el-form-item :class="mode == 'detail' && 'no-upload-btn'" label="附件">
+                    <el-form-item label="附件">
                         <yhUpload v-model="form.fileList" :limit="10" @updateTable="fileIsDel = true">
                             <el-button type="primary" icon="upload" size="small"></el-button>
                         </yhUpload>
@@ -99,55 +92,40 @@
                 </el-col>
             </el-row>
         </el-form>
-        <explain-form v-if="mode == 'detail' && form.id" ref="explainForm" :rowData="form" :disabled="!isExplain" @success="visible = false, $emit('success')"></explain-form>
 
         <template #footer>
-            <template v-if="isExplain">
-                <el-button type="primary" @click="policyExplain">保存上报</el-button>
-            </template>
-            <template v-if="mode == 'add' || mode == 'edit'">
-                <el-button type="primary" @click="submit(mode)">保 存</el-button>
-                <el-button type="primary" @click="submit('saveApprove')">直接上报</el-button>
-            </template>
+            <el-button type="primary" @click="submit(mode)">保 存</el-button>
+            <el-button type="primary" @click="submit('saveApprove')">直接上报</el-button>
         </template>
     </el-dialog>
 </template>
 
 <script>
-import moment from "moment";
 import Common from "@/api/common";
 import API from "@/api/policy/strive";
 import { useUserStore } from "@/store/user";
 import { levelDic, typeDic } from "@/views/policyShare/main";
 import { rewardTypeDic } from "@/views/policyStrive/main";
 import yhUpload from "@/components/Upload/index.vue";
-import explainForm from "@/views/policyStrive/explain.vue";
 
 const { userInfo } = useUserStore(); // store 用户
 
 export default {
     emits: ["success", "closed"],
-    props: {
-        isMaster: { type: Boolean, default: false }
-    },
     
     components: {
-        yhUpload,
-        explainForm
+        yhUpload
     },
 
     data() {
         return {
             levelDic, typeDic, rewardTypeDic,
-            activeNames: [],
 
             visible: false,
-            isExplain: false,
             mode: "add",
             titleMap: {
                 add: "新增",
-                edit: "编辑",
-                detail: "详情"
+                edit: "编辑"
             },
             form: {
                 id: null,
@@ -166,14 +144,8 @@ export default {
                 directorName: null,
                 yjFinishTime: null,
                 yjStriveAmount: null,
-                abstractContent: null,
                 rewardType: null,
-                isLand: 0,
-                landAmount: null,
-                sjFinishTime: null,
-                partPersonArr: "[]", // [{name: }]
-                partPerson: null, // a1,a2
-                monthSituation: null,
+                abstractContent: null,
                 fileList: []
             },
 
@@ -188,7 +160,7 @@ export default {
                 yjFinishTime: [{ required: true, message: "请选择预计完成时间" }],
                 yjStriveAmount: [{ required: true, message: "请输入预计争取金额" }],
                 rewardType: [{ required: true, message: "请选择政策考核类别" }],
-                abstractContent: [{ required: true, message: "请输入政策概要" }],
+                abstractContent: [{ required: true, message: "请输入政策概要" }]
             },
 
             fileIsDel: false,
@@ -201,9 +173,8 @@ export default {
     },
 
     methods: {
-        init(mode = "add", isExplain = false) {
+        open(mode = "add") {
             this.mode = mode;
-            this.isExplain = isExplain;
             this.visible = true;
             return this;
         },
@@ -212,16 +183,9 @@ export default {
             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;
+                        if (key == "fileList") this.form[key] = res.data[key].map(file => ({ ...file, name: file.originalName, path: file.fileDomain + "/" + file.fileName }));
                         else this.form[key] = res.data[key] || null;
                     }
-                    res.data["rewardType"] && this.activeNames.push(res.data["rewardType"]);
-                    if (this.isExplain && !res.data["sjFinishTime"]) this.form.sjFinishTime = moment().format("YYYY-MM-DD");
-                    this.form.partPerson = res.data["partPersonArr"] && JSON.parse(res.data["partPersonArr"]).map(item => item.name).join() || null;
-
-                    this.$nextTick(() => this.isExplain && this.$refs.explainForm && this.$refs.explainForm.$el.scrollIntoView({ block: "center" }));
                 } else ElMessage.error(res.msg);
             });
         },
@@ -239,37 +203,24 @@ export default {
         submit(mode) {
             this.$refs.formRef.validate(valid => {
                 if (valid) {
-                    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);
+                    API[mode](this.form).then(res => {
+                        if (res.code === 200) {
+                            ElMessage.success("操作成功");
+                            this.visible = false;
+                            this.fileIsDel = false;
+                            this.$emit("success", mode);
+                        } else ElMessage.error(res.msg);
                     });
                 } else {
                     return false;
                 }
             });
-        },
-			
-        policyExplain() {
-            this.$refs.explainForm.submit();
         }
     }
 }
 </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%;
 
@@ -281,17 +232,4 @@ export default {
     }
   }
 }
-
-.el-collapse .el-radio-group {
-  display: block;
-
-  .el-radio {
-    margin-right: 0;
-    text-align: left;
-
-    :deep(.el-radio__label) {
-      line-height: 1;
-    }
-  }
-}
 </style>

+ 228 - 56
src/views/policyStrive/explain.vue

@@ -1,98 +1,243 @@
 <template>
-    <el-form v-if="disabled && form.monthSituation || !disabled" ref="formRef" :model="form" :rules="rules" :disabled="disabled" label-width="110px">
-        <div class="dialog-title">月度争取情况说明</div>
-        <el-row>
-            <el-col :span="12">
-                <el-form-item label="是否已落地" prop="isLand">
-                    <el-radio-group v-model="form.isLand" @change="form.landAmount = null, form.partPerson = null, form.partPersonArr = '[]'">
-                        <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-dialog v-model="visible" :title="titleMap[mode]" width="680" @closed="$emit('closed')">
+        <el-form :model="form" :rules="rules" disabled label-width="110px">
+            <el-row>
                 <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="false" placeholder="请输入落地金额"></el-input-number>
+                    <el-form-item label="政策编号" prop="businessNo">
+                        <el-input v-model="form.businessNo"></el-input>
                     </el-form-item>
                 </el-col>
                 <el-col :span="12">
-                    <el-form-item label="实际完成时间" prop="sjFinishTime">
-                        <el-date-picker v-model="form.sjFinishTime" value-format="YYYY-MM-DD" placeholder="请选择实际完成时间"></el-date-picker>
+                    <el-form-item label="填报人">
+                        <el-input v-model="form.createName"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="填报部门">
+                        <el-input v-model="form.deptName"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="填报单位">
+                        <el-input v-model="form.companyName"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="填报时间">
+                        <el-date-picker v-model="form.createTime" 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" placeholder="请输入项目名称"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="项目等级" prop="zcLevel">
+                        <el-select v-model="form.zcLevel" 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" 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" placeholder="请输入政策文号"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item label="联系方式" prop="contactPhone">
+                        <el-input v-model="form.contactPhone" 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="false" 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" 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" placeholder="请输入责任人"></el-input>
                     </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 label="政策考核类别" prop="rewardType">
+                        <el-radio-group v-model="form.rewardType">
+                            <el-radio v-for="(label, key) in rewardTypeDic" :key="key" :label="label" :value="parseInt(key)"></el-radio>
+                        </el-radio-group>
                     </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" placeholder="请输入项目概要"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="24">
+                    <el-form-item class="no-upload-btn" label="附件">
+                        <yhUpload v-model="form.fileList" :limit="10"></yhUpload>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+        </el-form>
+
+        <el-form ref="formRef" :model="form" :rules="rules" :disabled="mode == 'detail'" label-width="110px">
+            <el-row>
+                <el-col :span="12">
+                    <el-form-item label="是否已落地" prop="isLand">
+                        <el-radio-group v-model="form.isLand" @change="form.landAmount = null, form.partPerson = null, form.partPersonArr = '[]'">
+                            <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="false" placeholder="请输入落地金额"></el-input-number>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="实际完成时间" prop="sjFinishTime">
+                            <el-date-picker v-model="form.sjFinishTime" value-format="YYYY-MM-DD" placeholder="请选择实际完成时间"></el-date-picker>
+                        </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="月度争取情况说明" prop="monthSituation" label-width="80px">
+                        <el-input v-model="form.monthSituation" type="textarea" :rows="4" placeholder="请输入月度争取情况说明"></el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+        </el-form>
+
+        <template #footer>
+            <template v-if="mode == 'explain'">
+                <el-button type="primary" @click="submit">保存上报</el-button>
             </template>
-            <el-col :span="24">
-                <el-form-item class="label-column-2" label="月度争取情况说明" prop="monthSituation" label-width="80px">
-                    <el-input v-model="form.monthSituation" type="textarea" :rows="4" placeholder="请输入月度争取情况说明"></el-input>
-                </el-form-item>
-            </el-col>
-        </el-row>
-    </el-form>
+        </template>
+    </el-dialog>
 </template>
 
 <script>
+import moment from "moment";
 import API from "@/api/policy/strive";
-import { whetherDic } from "@/views/policyShare/main";
+import { levelDic, typeDic, whetherDic } from "@/views/policyShare/main";
+import { rewardTypeDic } from "@/views/policyStrive/main";
+import yhUpload from "@/components/Upload/index.vue";
 
 export default {
-    props: {
-        isMaster: { type: Boolean, default: false },
-        disabled: { type: Boolean, default: true },
-        rowData: { type: Object, default: () => {} }
+    emits: ["success", "closed"],
+    
+    components: {
+        yhUpload
     },
 
     data() {
         return {
-            whetherDic,
+            levelDic, typeDic, whetherDic, rewardTypeDic,
 
+            visible: false,
+            mode: "explain",
+            titleMap: {
+                explain: "月度争取情况说明",
+                detail: "详情"
+            },
             form: {
+                id: null,
+                businessNo: null,
+                status: null,
+                createId: null,
+                createName: null,
+                createTime: null,
+                name: null,
+                companyName: null,
+                deptName: null,
+                zcLevel: null,
+                zcType: null,
+                docNo: null,
+                contactPhone: null,
+                directorName: null,
+                yjFinishTime: null,
+                yjStriveAmount: null,
+                rewardType: null,
+                abstractContent: null,
                 isLand: 0,
                 landAmount: null,
-                partPersonArr: "[]", // [{name: }]
                 sjFinishTime: null,
+                partPersonArr: "[]", // [{name: }]
                 partPerson: null, // a1,a2
-                monthSituation: null
+                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: "请输入预计争取金额" }],
+                rewardType: [{ required: true, message: "请选择政策考核类别" }],
+                abstractContent: [{ required: true, message: "请输入政策概要" }],
                 isLand: [{ required: true }],
                 landAmount: [{ required: true, message: "请输入落地金额" }],
                 sjFinishTime: [{ required: true, message: "请选择时实际完成时间" }],
                 partPerson: [{ required: true, message: "请输入参与人(以英文 , 分割)" }],
                 monthSituation: [{ required: true, message: "请输入月度争取情况" }]
-            },
-        }
-    },
-
-    watch: {
-        rowData: {
-            deep: true,
-            handler(value) {
-                if (value.id) {
-                    this.form = Object.assign({}, this.rowData);
-                }
             }
         }
     },
 
-    mounted() {
-        this.form = Object.assign({}, this.rowData);
-    },
-
     methods: {
+        open(mode = "explain") {
+            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[key] = !!res.data[key] && res.data[key] || 0;
+                        else if (key == "sjFinishTime") this.form[key] = res.data[key] || moment().format("YYYY-MM-DD");
+                        else if (key == "partPerson") this.form[key] = res.data["partPersonArr"] && JSON.parse(res.data["partPersonArr"]).map(item => item.name).join() || null;
+                        else this.form[key] = res.data[key] || null;
+                    }
+                } else ElMessage.error(res.msg);
+            });
+        },
+
+        // 表单提交方法
         submit() {
             this.$refs.formRef.validate(valid => {
                 if (valid) {
                     const partPersonArr = this.form.partPerson && JSON.stringify(this.form.partPerson.split(",").map(name => ({ name }))) || "";
-                    API.updateById({ ...this.form, partPersonArr }).then(() => {
-                        ElMessage.success("操作成功");
-                        this.visible = false;
-                        this.$emit("success");
+                    API.updateById({ ...this.form, partPersonArr }).then(res => {
+                        if (res.code === 200) {
+                            ElMessage.success("操作成功");
+                            this.visible = false;
+                            this.$emit("success");
+                        } else ElMessage.error(res.msg);
                     });
                 } else {
                     return false;
@@ -104,11 +249,14 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.dialog-title {
-  margin-bottom: 15px;
-  font-size: 15px;
-  font-weight: 600;
-  color: var(--el-text-color-primary);
+.no-upload-btn :deep(.yh-upload-file) {
+  .el-upload {
+    display: none;
+  }
+
+  .el-upload-list.is-disabled {
+    margin-top: 0;
+  }
 }
 
 .el-input-number {
@@ -123,6 +271,30 @@ export default {
   }
 }
 
+.reward-radio-item {
+  flex-direction: column;
+
+  :deep(.el-form-item__label) {
+    margin-bottom: 12px;
+    padding-right: 0;
+  }
+
+  :deep(.el-form-item__content) .el-radio {
+    align-items: unset;
+    height: fit-content;
+    margin-right: 0;
+
+    .el-radio__input {
+      padding-top: 9px;
+    }
+
+    .el-radio__label .reward-radio-item__content {
+      font-size: var(--el-font-size-small);
+      white-space: pre-wrap;
+    }
+  }
+}
+
 .label-column-2 :deep(.el-form-item__label) {
   margin-left: 30px;
 }

+ 29 - 18
src/views/policyStrive/index.vue

@@ -75,7 +75,7 @@
                             <el-button type="primary" link icon="delete" @click="table_del(scope.row)">删除</el-button>
                         </template>
                         <el-button v-if="scope.row.status == 'approve'" type="primary" link icon="refresh-right" @click="table_update(scope.row, 'withdraw')">撤回</el-button>
-                        <el-button v-if="scope.row.status == 'done'" type="primary" link icon="info-filled" @click="table_edit(scope.row, 'detail', true)">月度争取情况说明</el-button>
+                        <el-button v-if="scope.row.status == 'done'" type="primary" link icon="info-filled" @click="table_explain(scope.row)">月度争取情况说明</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -85,7 +85,8 @@
         </div>
     </el-card>
 
-    <policy-detail v-if="dialog" ref="policyDetail" @success="reloadTable" @closed="closed"></policy-detail>
+    <policy-detail v-if="dialog.detail" ref="policyDetail" @success="reloadTable" @closed="closed"></policy-detail>
+    <policy-explain v-if="dialog.explain" ref="policyExplain" @success="reloadTable" @closed="dialog.explain = false"></policy-explain>
 </template>
 
 <script>
@@ -97,12 +98,14 @@ import { columns, statusDic } from "./main";
 import tableImport from "@/components/Upload/tableImport.vue";
 import yhPagination from "@/components/Pagination/index.vue";
 import policyDetail from "./dialog.vue";
+import policyExplain from "./explain.vue";
 
 export default {
     components: {
         tableImport,
         yhPagination,
-        policyDetail
+        policyDetail,
+        policyExplain
     },
 
     data() {
@@ -119,7 +122,10 @@ export default {
             total: 0,
             tableData: [],
 
-            dialog: false
+            dialog: {
+                detail: false,
+                explain: false
+            }
         }
     },
 
@@ -159,14 +165,21 @@ export default {
             this.reloadTable();
         },
 
+        table_export() {
+            const header = columns.map(c => c.label);
+            const data = this.tableData.map(v => columns.map(c => c.props).map(j => this.columnFormat(v, j)));
+
+            exportExcel(header, data, [], `${this.$route.name}.xlsx`);
+        },
+
         table_add() {
-            this.dialog = true;
-            this.$nextTick(() => this.$refs.policyDetail.init());
+            this.dialog.detail = true;
+            this.$nextTick(() => this.$refs.policyDetail.open());
         },
 
-        table_edit(row, mode = "edit", isExplain = false) {
-            this.dialog = true;
-            this.$nextTick(() => this.$refs.policyDetail.init(mode, isExplain).setData(row.id));
+        table_edit(row) {
+            this.dialog.detail = true;
+            this.$nextTick(() => this.$refs.policyDetail.open("edit").setData(row.id));
         },
 
         table_del(row) {
@@ -179,7 +192,7 @@ export default {
                     if (res.code == 200) {
                         ElMessage.success("操作成功");
                         this.reloadTable();
-                    } else ElMessage.warning(res.msg);
+                    } else ElMessage.error(res.msg);
                 });
             });
         },
@@ -200,16 +213,14 @@ export default {
             });
         },
 
-        closed(e) {
-            e && this.reloadTable();
-            this.dialog = false;
+        table_explain(row) {
+            this.dialog.explain = true;
+            this.$nextTick(() => this.$refs.policyExplain.open().setData(row.id));
         },
 
-        table_export() {
-            const header = columns.map(c => c.label);
-            const data = this.tableData.map(v => columns.map(c => c.props).map(j => this.columnFormat(v, j)));
-
-            exportExcel(header, data, [], `${this.$route.name}.xlsx`);
+        closed(e) {
+            e && this.reloadTable();
+            this.dialog.detail = false;
         }
     }
 }

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 6 - 18
src/views/policyStrive/main.js


+ 2 - 1
src/views/toDo/index.vue

@@ -116,8 +116,9 @@ export default {
         table_detail({ refId, refType }, mode = "agree") {
             if (refType == "policy_share") {
                 this.dialog = true;
-                this.$nextTick(() => this.$refs[refType].init("detail", mode).setData(refId));
+                this.$nextTick(() => this.$refs[refType].open("detail", mode).setData(refId));
             }
+            
             if (refType == "policy_strive") {
                 const msg = mode == "agree" && "同意" || "退回";
                 ElMessageBox.confirm(`是否确认${msg}?`, "提示", {