瀏覽代碼

营销-目标管理;

001295 1 年之前
父節點
當前提交
683d1d0010

+ 51 - 45
src/views/business/spd/bo/basic/index.vue

@@ -4,13 +4,14 @@
     <el-form
       :model="queryParams"
       ref="queryForm"
-      size="small"
+      size="mini"
       :inline="true"
       v-show="showSearch"
       label-width="68px"
     >
       <el-form-item label="商机名称" prop="boName">
         <el-input
+          size="mini"
           v-model="queryParams.boName"
           clearable
           @keyup.enter.native="handleQuery"
@@ -18,6 +19,7 @@
       </el-form-item>
       <el-form-item label="客户名称" prop="customerName">
         <el-input
+          size="mini"
           v-model="queryParams.customerName"
           clearable
           @keyup.enter.native="handleQuery"
@@ -25,6 +27,7 @@
       </el-form-item>
       <el-form-item label="商机负责人" prop="principalName">
         <el-input
+          size="mini"
           v-model="queryParams.principalName"
           clearable
           @keyup.enter.native="handleQuery"
@@ -32,6 +35,7 @@
       </el-form-item>
       <el-form-item label="商机类型" prop="boType">
         <el-select
+          size="mini"
           v-model="queryParams.boType"
           @change="boTypeChange"
           clearable
@@ -45,7 +49,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="商机阶段" prop="boStage">
-        <el-select v-model="queryParams.boStage" clearable>
+        <el-select size="mini" v-model="queryParams.boStage" clearable>
           <el-option
             v-for="item in mk_bo_stage"
             :key="item.code"
@@ -55,7 +59,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="商机状态" prop="boState" clearable>
-        <el-select v-model="queryParams.boState" clearable>
+        <el-select size="mini" v-model="queryParams.boState" clearable>
           <el-option
             v-for="dict in dict.type.mk_bo_state"
             :key="dict.value"
@@ -64,7 +68,7 @@
           ></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="商机来源" prop="boSource">
+      <el-form-item size="mini" label="商机来源" prop="boSource">
         <el-select v-model="queryParams.boSource" clearable>
           <el-option
             v-for="dict in dict.type.mk_bo_source"
@@ -86,6 +90,7 @@
       </el-form-item> -->
       <el-form-item label="创建时间">
         <el-date-picker
+          size="mini"
           v-model="dateRange"
           style="width: 240px"
           value-format="yyyy-MM-dd"
@@ -109,9 +114,8 @@
       </el-form-item>
     </el-form>
 
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
+    <div class="btn_grooup">
+      <el-button
           type="primary"
           plain
           icon="el-icon-plus"
@@ -119,52 +123,29 @@
           @click="handleAdd"
           >新增</el-button
         >
-      </el-col>
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-        >删除</el-button>
-      </el-col> -->
-      <right-toolbar
-        :showSearch.sync="showSearch"
-        @queryTable="getList"
-      ></right-toolbar>
-    </el-row>
+    </div>
 
     <el-table
       v-loading="loading"
       :data="basicList"
       @selection-change="handleSelectionChange"
       @cell-dblclick="enterDetails"
+      height="700px"
     >
       <el-table-column type="selection" align="center" />
       <el-table-column
+        width="150"
         label="编号"
         align="center"
         prop="boCode"
       />
-      <el-table-column label="商机名称" align="center" prop="boName" />
-      <el-table-column label="商机类型" align="center" prop="boType">
+      <el-table-column label="商机名称" show-overflow-tooltip width="300" align="center" prop="boName" />
+      <el-table-column label="商机类型" width="150" align="center" prop="boType">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.mk_bo_type" :value="scope.row.boType" />
         </template>
       </el-table-column>
-      <el-table-column label="商机状态" align="center" prop="boState">
+      <el-table-column label="商机状态" width="150" align="center" prop="boState">
         <template slot-scope="scope">
           <dict-tag
             :options="dict.type.mk_bo_state"
@@ -172,7 +153,7 @@
           />
         </template>
       </el-table-column>
-      <el-table-column label="商机来源" align="center" prop="boSource">
+      <el-table-column label="商机来源" width="150" align="center" prop="boSource">
         <template slot-scope="scope">
           <dict-tag
             :options="dict.type.mk_bo_source"
@@ -180,15 +161,16 @@
           />
         </template>
       </el-table-column>
-      <el-table-column label="商机阶段" align="center" prop="boStageName" />
-      <el-table-column label="客户名称" align="center" prop="customerName" />
+      <el-table-column label="商机阶段" width="150" align="center" prop="boStageName" />
+      <el-table-column label="客户名称" show-overflow-tooltip width="150" align="center" prop="customerName" />
       <el-table-column
+        width="150"
         label="预估值(万元)"
         align="center"
         prop="hosDiscreetValue"
       />
-      <el-table-column label="赢单率" align="center" prop="winningRate" />
-      <el-table-column label="赢单率状态" align="center" prop="winningState">
+      <el-table-column label="赢单率" width="150" align="center" prop="winningRate" />
+      <el-table-column label="赢单率状态" width="150" align="center" prop="winningState">
         <template slot-scope="scope">
           <dict-tag
             :options="dict.type.mk_bo_winstate"
@@ -197,19 +179,22 @@
         </template>
       </el-table-column>
       <el-table-column
+        width="150"
         label="销售区域"
         align="center"
         prop="marketingAreaName"
       />
       <el-table-column
+        width="150"
+        show-overflow-tooltip
         label="销售组织"
         align="center"
         prop="marketingOrganizingName"
       />
-      <el-table-column label="部门" align="center" prop="deptName" />
-      <el-table-column label="商机负责人" align="center" prop="principalName" />
-      <el-table-column label="创建人" align="center" prop="createBy" />
-      <el-table-column label="创建时间" align="center" prop="createTime" />
+      <el-table-column label="部门" width="150" align="center" prop="deptName" />
+      <el-table-column label="商机负责人" width="150" align="center" prop="principalName" />
+      <el-table-column label="创建人" width="150" align="center" prop="createBy" />
+      <el-table-column label="创建时间" width="150" align="center" prop="createTime" />
       <el-table-column
         label="操作"
         fixed="right"
@@ -918,3 +903,24 @@ export default {
   },
 };
 </script>
+
+<style lang="scss" scoped>
+#deliveryAddressList {
+  height: calc(100vh - 84px);
+  padding: 12px;
+  box-sizing: border-box;
+  overflow-y: scroll;
+}
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+.lines {
+  margin-top: 0;
+}
+.el-pagination {
+  margin-top: 10px;
+  text-align: right;
+}
+</style>

+ 8 - 8
src/views/business/spd/bo/behavior/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="任务" prop="taskCode">
         <el-input
           v-model="queryParams.taskCode"
@@ -14,7 +14,7 @@
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-    <el-table v-loading="loading" :data="behaviorList">
+    <el-table v-loading="loading" :data="behaviorList" height="700px">
       <el-table-column label="负责人" align="center" prop="staffName" />
       <el-table-column label="行动日期" align="center" prop="time" />
       <el-form-item label="行动日期" prop="time">
@@ -36,22 +36,22 @@
           <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.assist"/>
         </template>
       </el-table-column>
-      <el-table-column label="协助内容" align="center" prop="assistContent" />
-      <el-table-column label="洽谈内容" align="center" prop="content" />
-      <el-table-column label="任务编码" align="center" prop="taskCode"/>
+      <el-table-column show-overflow-tooltip label="协助内容" align="center" prop="assistContent" />
+      <el-table-column show-overflow-tooltip label="洽谈内容" align="center" prop="content" />
+      <el-table-column width="150" label="任务编码" align="center" prop="taskCode"/>
       <el-table-column label="行动类型" align="center" prop="type">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.mk_bo_behavior_type" :value="scope.row.type"/>
         </template>
       </el-table-column>
-      <el-table-column label="客户" align="center" prop="customerName"/>
+      <el-table-column show-overflow-tooltip label="客户" align="center" prop="customerName"/>
       <el-table-column label="拜访目的" align="center" prop="purpose">
         <template slot-scope="scope">
             <dict-tag :options="dict.type.mk_bo_behavior_goal" :value="scope.row.purpose"/>
         </template>
       </el-table-column>
-      <el-table-column label="销售组织" align="center" prop="salesOrgName"/>
-      <el-table-column label="部门" align="center" prop="deptName"/>
+      <el-table-column show-overflow-tooltip label="销售组织" align="center" prop="salesOrgName"/>
+      <el-table-column show-overflow-tooltip label="部门" align="center" prop="deptName"/>
       <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
           <el-button

+ 28 - 11
src/views/business/spd/bo/contact/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="姓名" prop="name">
         <el-input
           v-model="queryParams.name"
@@ -30,7 +30,7 @@
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-    <el-row :gutter="10" class="mb8">
+    <!-- <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -41,18 +41,27 @@
         >新增</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-    <el-table v-loading="loading" :data="contactList">
-      <el-table-column label="编号" align="center" prop="code" />
-      <el-table-column label="姓名" align="center" prop="name" />
+    </el-row> -->
+    <div class="btn_grooup">
+      <el-button
+        type="primary"
+        plain
+        icon="el-icon-plus"
+        size="mini"
+        @click="handleAdd"
+      >新增</el-button>
+    </div>
+    <el-table v-loading="loading" :data="contactList" height="700px">
+      <el-table-column width="200" label="编号" align="center" prop="code" />
+      <el-table-column show-overflow-tooltip label="姓名" align="center" prop="name" />
       <el-table-column label="性别" align="center" prop="gander" >
         <template slot-scope="scope">
           <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.gander"/>
         </template>
       </el-table-column>
       <el-table-column label="联系电话" align="center" prop="telephone" />
-      <el-table-column label="所属客户" align="center" prop="customerName" />
-      <el-table-column label="部门名称" align="center" prop="departmentName" />
+      <el-table-column width="200" show-overflow-tooltip label="所属客户" align="center" prop="customerName" />
+      <el-table-column show-overflow-tooltip label="部门名称" align="center" prop="departmentName" />
       <el-table-column label="职务" align="center" prop="position" >
         <template slot-scope="scope">
           <dict-tag :options="dict.type.mk_bo_position" :value="scope.row.position"/>
@@ -63,14 +72,14 @@
           <dict-tag :options="dict.type.mk_bo_power" :value="scope.row.power"/>
         </template>
       </el-table-column>
-      <el-table-column label="兴趣爱好" align="center" prop="hobby" />
-      <el-table-column label="家庭地址" align="center" prop="address" />
+      <el-table-column show-overflow-tooltip label="兴趣爱好" align="center" prop="hobby" />
+      <el-table-column show-overflow-tooltip label="家庭地址" align="center" prop="address" />
       <el-table-column label="状态" align="center" prop="state" >
         <template slot-scope="scope">
           <dict-tag :options="dict.type.mk_bo_contact_state" :value="scope.row.state"/>
         </template>
       </el-table-column>
-      <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width" >
+      <el-table-column width="200" label="操作" fixed="right" align="center" >
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -591,3 +600,11 @@ export default {
   }
 };
 </script>
+
+<style lang="scss" scoped>
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+</style>

+ 24 - 6
src/views/business/spd/bo/filetemplate/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="商机类型" prop="boType">
         <el-select
           v-model="queryParams.boType"
@@ -23,12 +23,12 @@
         />
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
 
-    <el-row :gutter="10" class="mb8">
+    <!-- <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -39,9 +39,19 @@
         >上传</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
+    </el-row> -->
 
-    <el-table v-loading="loading" :data="filetemplateList" @selection-change="handleSelectionChange">
+    <div class="btn_grooup">
+      <el-button
+        type="primary"
+        plain
+        icon="el-icon-plus"
+        size="mini"
+        @click="uploadAccessory"
+      >上传</el-button>
+    </div>
+
+    <el-table v-loading="loading" :data="filetemplateList" @selection-change="handleSelectionChange"  height="700px">
       <el-table-column
         type="index"
         label="序号"
@@ -271,3 +281,11 @@ export default {
   }
 };
 </script>
+
+<style lang="scss" scoped>
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+</style>

+ 3 - 3
src/views/business/spd/bo/statement/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="商机名称" prop="boName">
         <el-input
           v-model="queryParams.boName"
@@ -36,8 +36,8 @@
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
     <el-tabs v-model="activeName" @tab-click="handleClick">

+ 4 - 4
src/views/business/spd/bo/statement/proportion/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="商机日期" prop="yearMonth">
         <el-date-picker
           type="month"
@@ -44,12 +44,12 @@
         />
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
 
-    <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
+    <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" height="700px">
       <el-table-column label="中心部门" align="center" prop="deptName" />
       <el-table-column label="当月新增商机数(个)" align="center" prop="sumTotal" />
       <el-table-column label="当月审核通过数(个)" align="center" prop="passAudit" />

+ 33 - 7
src/views/business/spd/bo/task/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="任务编码" prop="code">
         <el-input
           v-model="queryParams.code"
@@ -47,8 +47,8 @@
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-    <el-row :gutter="10" class="mb8">
-      <!-- <el-col :span="1.5">
+    <!-- <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
         <el-button
           type="primary"
           plain
@@ -77,28 +77,43 @@
           @click="handleDelete"
           >删除</el-button
         >
-      </el-col> -->
+      </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
         @queryTable="getList"
       ></right-toolbar>
-    </el-row>
+    </el-row> -->
+
+    <div class="btn_grooup">
+      <el-button
+        type="primary"
+        plain
+        icon="el-icon-plus"
+        size="mini"
+        @click="handleAdd"
+        >新增</el-button
+      >
+    </div>
 
     <el-table
       v-loading="loading"
       :data="taskList"
       @selection-change="handleSelectionChange"
+      height="700px"
     >
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="任务编码" align="center" prop="code" />
-      <el-table-column label="任务名称" align="center" prop="name" />
+      <el-table-column width="150" label="任务编码" align="center" prop="code" />
+      <el-table-column width="200" show-overflow-tooltip label="任务名称" align="center" prop="name" />
       <el-table-column
+        width="200"
+        show-overflow-tooltip
         label="商机名称"
         align="center"
         prop="boName"
       />
       <el-table-column label="商机阶段" align="center" prop="boStageName"/>
       <el-table-column
+        show-overflow-tooltip
         label="客户名称"
         align="center"
         prop="customerName"
@@ -121,6 +136,7 @@
       </el-table-column>
       <el-table-column label="联系人" align="center" prop="linkmanName" />
       <el-table-column
+        show-overflow-tooltip
         label="销售组织名称"
         align="center"
         prop="salesOrgName"
@@ -139,6 +155,7 @@
       </el-table-column>
       <el-table-column label="任务内容" align="center" prop="content" />
       <el-table-column
+        show-overflow-tooltip
         label="操作"
         fixed="right"
         align="center"
@@ -607,6 +624,7 @@ export default {
       this.reset();
       this.open = true;
       this.title = "添加任务";
+      this.operatingState = "Insert";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
@@ -746,3 +764,11 @@ export default {
   }
 };
 </script>
+
+<style lang="scss" scoped>
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+</style>

+ 18 - 8
src/views/business/spd/target/targetMk/add.vue

@@ -36,7 +36,7 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="1.5">
+          <!-- <el-col :span="1.5">
             <el-form-item label="包含下级组织" >
               <el-select v-model="form.includeOrg" size="mini" style="width: 200px">
                 <el-option
@@ -47,7 +47,7 @@
                 ></el-option>
               </el-select>
             </el-form-item>
-          </el-col>
+          </el-col> -->
           <el-col :span="1.5">
             <el-form-item label="模板" prop="template">
               <dr-popover-select size="mini" v-model="form.templateName" title="模板" type="MK_TARGET_TEMPLATE_PARAM" :dataMapping="{
@@ -94,15 +94,17 @@
         </el-card>
       </el-form>
     </el-card>
-    <Item ref="child" v-if="isItem" :pageStu="pageStu" :template="template" :form="form" :columns="headers"></Item>
+    <el-card  style="height:500px">
+      <Item ref="child" v-if="isItem" :pageStu="pageStu" :template="template" :form="form" :columns="headers" :latestTemplate="latestTemplate"></Item>
+    </el-card>
     <el-card>
       <div class="btn_group">
+        <el-col :span="1.5">
+          <el-button size="mini" plain @click="useBack">取消</el-button>
+        </el-col>
         <el-col :span="1.5" style="margin: 0 10px;">
           <el-button type="primary" size="mini" plain @click="useSave" v-if="pageStu == 'add' || pageStu == 'edit'">保存</el-button>
         </el-col>
-        <el-col :span="1.5">
-          <el-button size="mini" plain @click="useBack">返回</el-button>
-        </el-col>
       </div>
     </el-card>
   </div>
@@ -143,24 +145,32 @@ export default {
       loading: false,
       //是否展示Item组件
       isItem:false,
+      //是否为最新模板
+      latestTemplate:false,
     }
   },
   async created() {
+    if(this.pageStu == 'add'){
+      this.form.date = new Date();
+    }
     if(this.pageStu == 'edit' || this.pageStu == 'see') {
       await this.fetchTarget(this.row);
       await this.fetchTemplate(this.row.template);
       await this.fetchHeaderData(this.row.template);
+      this.latestTemplate = true;
       this.isItem = true;
     }
   },
   watch: {
 	  'form.template': {
       async handler(newVal) {
+        console.log('111');
         this.isItem = false;
         await this.fetchTemplate(newVal);
         await this.fetchHeaderData(newVal);
         this.isItem = true;
       },
+      immediate:false,
     }
   },
   methods: {
@@ -239,7 +249,7 @@ export default {
           this.headers = res.rows
         }
       })
-    }
+    },
   }
 }
 </script>
@@ -249,6 +259,6 @@ export default {
   width: 100%;
   margin: 20px 0;
   display: flex;
-  justify-content: center;
+  justify-content: right;
 } 
 </style>

+ 3 - 0
src/views/business/spd/target/targetMk/index.vue

@@ -61,6 +61,8 @@
       
         <div class="btn_grooup">
           <el-button type="primary" size="mini" @click="useAdd">新增</el-button>
+          <el-button type="primary" size="mini" @click="useAdd">模板导出</el-button>
+          <el-button type="primary" size="mini" @click="useAdd">导入</el-button>
         </div>
 
         <el-table 
@@ -171,6 +173,7 @@ export default {
       //列表数据
       tableList:[],
       disable: false,
+      rowDetail:{},
     }
   },
   created() {

+ 75 - 42
src/views/business/spd/target/targetMk/item.vue

@@ -1,51 +1,66 @@
 <template>
   <div>
-    <el-card>
-      <el-row>
-        <div class="btn_add">
-          <el-button type="primary" size="mini" @click="useAdd" v-if="this.pageStu != 'see'">增行</el-button>
-        </div>
-      </el-row>
-      <!-- 渲染表头 -->
-      <el-table :data="items" style="width: 100%" height="500px">
-        <el-table-column label="序号" type="index" width="50" align="center" fixed>
-        </el-table-column>
-        <el-table-column v-for="head in headers" :prop="head.prop" :label="head.modelName" width="150" align="center">
-          <template slot-scope="scope">
-            <div v-if="pageStu == 'add' || pageStu == 'edit'">
-              <dr-popover-select size="mini" v-if="scope.row[head.prop].type == 'D'" v-model="scope.row[head.prop].valueName" title="参照选择" :type="scope.row[head.prop].model" :dataMapping="{
+    <el-row>
+      <div class="btn_add">
+        <el-button type="primary" size="mini" @click="useAdd" v-if="this.pageStu != 'see'">增行</el-button>
+      </div>
+    </el-row>
+    <!-- 渲染表头 -->
+    <el-table :data="items" style="width: 100%" height="500px">
+      <el-table-column label="序号" type="index" width="50" align="center" fixed>
+      </el-table-column>
+      <el-table-column show-overflow-tooltip v-for="head in headers" :prop="head.prop" :label="head.modelName" width="150" align="center">
+        <template slot-scope="scope">
+          <div v-if="pageStu == 'add' || pageStu == 'edit'">
+            <div v-if="scope.row[head.prop].type == 'D'">
+              <dr-popover-select 
+                size="mini" 
+                v-if="scope.row[head.prop].model == 'MK_TARGET_CYCLE_PARAM' || scope.row[head.prop].model == 'MK_TARGET_INDEX_PARAM'" 
+                v-model="scope.row[head.prop].valueName" 
+                title="参照选择" 
+                :type="scope.row[head.prop].model" 
+                :dataMapping="{
+                  value: 'id',
+                  valueName: 'name',
+                }" 
+                :source.sync="scope.row[head.prop]"
+                :queryParams="additionalCondition"
+              />
+              <dr-popover-select size="mini" v-else v-model="scope.row[head.prop].valueName" title="参照选择" :type="scope.row[head.prop].model" :dataMapping="{
                 value: 'id',
                 valueName: 'name',
               }" :source.sync="scope.row[head.prop]"></dr-popover-select>
-              <el-input size="mini" v-if="scope.row[head.prop].type == 'C' || scope.row[head.prop].type == 'I'" v-model="scope.row[head.prop].value"></el-input>
             </div>
-            <div v-else-if="pageStu == 'see'">
-              <div v-if="scope.row[head.prop].type == 'D'">
-                {{scope.row[head.prop].valueName}}
-              </div>
-              <div v-else>
-                {{scope.row[head.prop].value}}
-              </div>
+            <div v-if="scope.row[head.prop].type == 'C' || scope.row[head.prop].type == 'I'">
+              <el-input size="mini"  v-model="scope.row[head.prop].value"></el-input>
             </div>
-          </template>
-          <el-table-column v-if="head.children" v-for="headChi in head.children" :prop="headChi.prop" :label="headChi.modelName" width="150" align="center">
-            <template slot-scope="scope">
-              <div v-if="pageStu == 'add' || pageStu == 'edit'">
-                <el-input size="mini" v-model="scope.row[headChi.prop].value"></el-input>
-              </div>
-              <div v-else-if="pageStu == 'see'">
-                {{scope.row[headChi.prop].value}}
-              </div>
-            </template>
-          </el-table-column>
-        </el-table-column>
-        <el-table-column fixed="right" label="操作" align="center" width="100" v-if="this.pageStu != 'see'">
+          </div>
+          <div v-else-if="pageStu == 'see'">
+            <div v-if="scope.row[head.prop].type == 'D'">
+              {{scope.row[head.prop].valueName}}
+            </div>
+            <div v-else>
+              {{scope.row[head.prop].value}}
+            </div>
+          </div>
+        </template>
+        <el-table-column show-overflow-tooltip v-if="head.children" v-for="headChi in head.children" :prop="headChi.prop" :label="headChi.modelName" width="150" align="center">
           <template slot-scope="scope">
-            <el-button type="text" size="mini" @click="useDel(scope.$index, scope.row)">删除</el-button>
+            <div v-if="pageStu == 'add' || pageStu == 'edit'">
+              <el-input size="mini" v-model="scope.row[headChi.prop].value"></el-input>
+            </div>
+            <div v-else-if="pageStu == 'see'">
+              {{scope.row[headChi.prop].value}}
+            </div>
           </template>
         </el-table-column>
-      </el-table>
-    </el-card>
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" align="center" width="100" v-if="this.pageStu != 'see'">
+        <template slot-scope="scope">
+          <el-button type="text" size="mini" @click="useDel(scope.$index, scope.row)">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
   </div>
 </template>
 
@@ -54,7 +69,7 @@ import { getTargetItem } from "@/api/business/spd/starget/target";
 
 export default {
   name: 'item',
-  props: ['pageStu','template','form','columns'],  
+  props: ['pageStu','template','form','columns','latestTemplate'],  
   dicts: ['sys_yes_no','mk_periodic_unit','mk_dimensionality','mk_index_type','mk_expansion_mode'],
   data() {
     return {
@@ -69,15 +84,15 @@ export default {
     this.itemTemplate = this.formatItem(this.columns);
     console.log('this.itemTemplate',this.itemTemplate);
     if(this.pageStu == 'edit' || this.pageStu == 'see'){
-      await this.fetchTargetItem(this.form.id);
-      console.log('this.items',this.items);
+      if(!this.latestTemplate){
+        await this.fetchTargetItem(this.form.id);
+      }
     }
   },
   methods: {
     //增行
     useAdd(){
       this.items.push(this.itemTemplate);
-      console.log('this.items',this.items);
     },
     //删行
     useDel(index){
@@ -119,18 +134,27 @@ export default {
       }else if("cycle" == unfold){
         for(let i in columns){
           columns[i].prop = columns[i].model
+          if(columns[i].model == 'MK_TARGET_CYCLE_PARAM' || columns[i].model == 'MK_TARGET_INDEX_PARAM'){
+            columns[i].templateId = this.template.id
+          }
           array.push(columns[i]);
         }
         this.headers = array;
       }else if("unfold" == unfold){
         for(let i in columns){
           columns[i].prop = columns[i].model
+          if(columns[i].model == 'MK_TARGET_CYCLE_PARAM' || columns[i].model == 'MK_TARGET_INDEX_PARAM'){
+            columns[i].templateId = this.template.id
+          }
           array.push(columns[i]);
         }
         this.headers = array;
       }else if("" == unfold){
         for(let i in columns){
           columns[i].prop = columns[i].model
+          if(columns[i].model == 'MK_TARGET_CYCLE_PARAM' || columns[i].model == 'MK_TARGET_INDEX_PARAM'){
+            columns[i].templateId = this.template.id
+          }
           array.push(columns[i]);
         }
         this.headers = array;
@@ -157,6 +181,15 @@ export default {
     merge(){
       this.items.push(...this.delItems);
       return this.items;
+    },
+    //附加查询条件
+    additionalCondition(prop){
+      console.log("prop",prop);
+      return {
+        parame:{
+          templateId: prop.templateId
+        }
+      }
     }
   }
 }

+ 2 - 2
src/views/business/spd/target/targetTemplate/add/columns.js

@@ -106,7 +106,7 @@ export default function useColumns() {
           },
           attr: {
             is: "el-date-picker",
-            valueFormat: "yyyy-MM-dd",
+            // valueFormat: "yyyy-MM-dd",
             // value: new Date(),
           },
         },
@@ -119,7 +119,7 @@ export default function useColumns() {
           },
           attr: {
             is: "el-date-picker",
-            valueFormat: "yyyy-MM-dd",
+            // valueFormat: "yyyy-MM-dd",
             // value: new Date(),
           },
         },

+ 172 - 69
src/views/business/spd/target/targetTemplate/add/index.vue

@@ -13,7 +13,7 @@ export default {
       type: Object,
     },
     selectData: {
-      type: [Array],
+      type: Object,
       require: true,
     },
     addType: {
@@ -62,30 +62,6 @@ export default {
       },
       set() {},
     },
-    disabled: {
-      get() {
-        const {
-          addType,
-          selectData,
-          selectData: [{ status } = {}],
-        } = this.$props;
-        if (addType === "add") {
-          return false;
-        }
-        if (addType === "edit") {
-          if (selectData.length !== 1) {
-            return true;
-          }
-          if (selectData.length === 1 && status === "1") {
-            return true;
-          }
-          if (selectData.length === 1 && status === "2") {
-            return true;
-          }
-        }
-      },
-      set() {},
-    },
   },
   watch: {},
   methods: {
@@ -121,28 +97,33 @@ export default {
       const { addType, selectData } = this.$props;
       if (addType === "add") {
         this.visible = true;
+        var date = new Date();
+        this.params.year = date.getFullYear() + '-' + '01' + '-' + '01';
+        this.params.startTime = date.getFullYear() + '-' + '01' + '-' + '01';
+        this.params.deadlineTime = date.getFullYear() + '-' + '12' + '-' + '31';
+        this.params.cycle = 'month';
       }
       if (addType === "edit") {
-        const [{ id }] = selectData;
         //校验目标模板是否存在引用
-        const { code, data } = await checkQuote(id);
-        if(code == '200'){
-          if(data){
+        const { code, data } = await checkQuote(selectData.id);
+        if (code == "200") {
+          if (data) {
             this.$modal.msgError("该目标模板存在引用,无法修改!");
             this.visible = false;
             return;
           }
-        }else{
+        } else {
           this.$modal.msgError("校验该目标模板是否存在引用异常,无法修改!");
           this.visible = false;
           return;
         }
-        this.visible = await this.fetchTemplate(id);
-        this.params.indexs = this.params.indexs.map((item) => ({ ...item }));
+        this.visible = await this.fetchTemplate(selectData.id);
+        this.params.indexs = this.params.indexs.map((item) => ({ ...item}));
         this.params.dimensionalitys = this.params.dimensionalitys.map(
-          (item) => ({ ...item })
+          (item) => ({ ...item})
         );
-        this.params.cycles = this.params.cycles.map((item) => ({ ...item }));
+        this.params.cycles = this.params.cycles.map((item) => ({ ...item}));
+        console.log("this.params",this.params);
       }
     },
     //关闭页面
@@ -166,29 +147,25 @@ export default {
       const { TableColumns } = TabColumns.find(
         ({ item: { key } }) => key === prop
       );
-      console.log(prop, this.$init.params(TableColumns));
       this.params[prop].push({
         delFlag: "0",
+        $index: new Date().getTime(),
         ...this.$init.params(TableColumns),
       });
-      console.log("this.params[prop]", this.params[prop]);
     },
     //删行
     async useRowRemove(prop, scope) {
-      const { addType } = this.$props;
-      const {
-        row: { $index },
-      } = scope;
-      if (addType === "add") {
-        this.params[prop].splice($index, 1);
-      }
-      if (addType === "edit") {
-        this.params[prop] = this.params[prop].map((item, index) => ({
-          ...item,
-          delFlag: index === $index ? "2" : item.delFlag,
-        }));
-        console.log(this.params[prop]);
+      // const { addType } = this.$props;
+      if (scope.row.id) {
+        this.params[prop].forEach(e => {
+          if(e.id == scope.row.id){
+            e.delFlag = '2'
+          }
+        });
+      }else{
+        this.params[prop] = this.params[prop].filter(item => item.$index != scope.row.$index);
       }
+      console.log("this.params[prop]",this.params[prop]);
     },
     //确认
     async useSubmit(prop) {
@@ -196,18 +173,6 @@ export default {
         if (valid) {
           try {
             this.loading = true;
-            // const {
-            //   params,
-            //   params: { paramsOrgs, paramsItems },
-            // } = this;
-            // if (this.addType === "edit") {
-            //   params.paramsOrgs = paramsOrgs.filter(
-            //     (item) => item.orgName
-            //   );
-            //   params.paramsItems = paramsItems.filter(
-            //     (item) => item.materialName
-            //   );
-            // }
             const { addType } = this.$props;
             let res = null;
             if (addType === "add") {
@@ -233,21 +198,149 @@ export default {
         }
       });
     },
+    //保存并新增
+    useSaveAndAdd(prop){
+      this.$refs[prop].$refs[prop].validate(async (valid) => {
+        if (valid) {
+          try {
+            this.loading = true;
+            const { addType } = this.$props;
+            let res = null;
+            if (addType === "add") {
+              res = await addTargetTemplate(this.params);
+            }
+            if (addType === "edit") {
+              res = await updateTargetTemplate(this.params);
+            }
+            if (res.code === 200) {
+              this.$notify.success(res.msg);
+              this.params={};
+            }
+          } catch (err) {
+            // catch
+            console.error(err);
+          } finally {
+            // finally
+            this.loading = false;
+          }
+        } else {
+          return false;
+        }
+      });
+    },
+    //重置周期
+    useResetCycle(){
+      if(!this.params.startTime || !this.params.deadlineTime || !this.params.cycle){
+        this.$modal.msgError("开始日期、结束日期、周期不能存在空值!");
+        return;
+      }
+      if(this.params.startTime > this.params.deadlineTime){
+        this.$modal.msgError("开始日期不能大于结束日期!");
+        return;
+      }
+      this.params.cycles = [];
+      var cycles = [];
+      var start = new Date(this.params.startTime);
+      var deadline = new Date(this.params.deadlineTime);
+      start.setHours( 0, 0, 0);
+      deadline.setHours( 0, 0, 0);
+      if(this.params.cycle == 'period'){
+        cycles.push({
+          name:'目标期间',
+          startTime:start,
+          deadlineTime:deadline,
+        });
+      }else{
+        while(deadline >= start){
+          console.log(start);
+          if(this.params.cycle == 'day'){
+            var cy = {
+              name:this.formatDateTime(start, 'yyyy-MM-dd'),
+              startTime:start,
+              deadlineTime:start,
+            }
+            console.log(cy);
+            cycles.push(cy);
+            start = start.setDate(start.getDate()+1);
+            start = new Date(start);
+          }
+          if(this.params.cycle == 'week'){
+            var de = start;
+            var cy = {
+              name:this.formatDateTime(start, 'yyyy-MM-dd'),
+              startTime:start,
+              deadlineTime:de.setDate(de.getDate()+7),
+            }
+            console.log(cy);
+            cycles.push(cy);
+            start = start.setDate(start.getDate()+7);
+            start = new Date(start);
+          }
+          if(this.params.cycle == 'month'){
+            var de = start;
+            var cy = {
+              name:this.formatDateTime(start, 'yyyy-MM-dd'),
+              startTime:start,
+              deadlineTime:de.setDate(de.getDate()+30),
+            }
+            console.log(cy);
+            cycles.push(cy);
+            start = start.setDate(start.getDate()+30);
+            start = new Date(start);
+          }
+          if(this.params.cycle == 'season'){
+            var de = start;
+            var cy = {
+              name:this.formatDateTime(start, 'yyyy-MM-dd'),
+              startTime:start,
+              deadlineTime:de.setDate(de.getDate()+90),
+            }
+            console.log(cy);
+            cycles.push(cy);
+            start = start.setDate(start.getDate()+90);
+            start = new Date(start);
+          }
+        }
+      }
+      this.params.cycles = cycles;
+      console.log('this.params.cycles',this.params.cycles);
+    },
+    //日期名称格式化
+    formatDateTime(date, format) {
+      const o = {
+        'M+': date.getMonth() + 1, // 月份
+        'd+': date.getDate(), // 日
+        'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 小时
+        'H+': date.getHours(), // 小时
+        'm+': date.getMinutes(), // 分
+        's+': date.getSeconds(), // 秒
+        'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
+        S: date.getMilliseconds(), // 毫秒
+        a: date.getHours() < 12 ? '上午' : '下午', // 上午/下午
+        A: date.getHours() < 12 ? 'AM' : 'PM', // AM/PM
+      };
+      if (/(y+)/.test(format)) {
+        format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+      }
+      for (let k in o) {
+        if (new RegExp('(' + k + ')').test(format)) {
+          format = format.replace(
+            RegExp.$1,
+            RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
+          );
+        }
+      }
+      return format;
+    }
   },
   created() {
-    console.log("params", this.params);
   },
   mounted() {},
   destroyed() {},
 };
 </script>
 <template>
-  <el-button
-    v-bind="$attrs"
-    v-on="$listeners"
-    :disabled="disabled"
-    @click="open"
-  >
+  <el-button v-bind="$attrs" v-on="$listeners" @click="open">
     {{ title }}
     <el-drawer
       :size="width"
@@ -304,9 +397,11 @@ export default {
               >
               </component>
             </template> -->
-            <el-table-column fixed="right" label="操作" width="75">
+            <el-table-column fixed="right" label="操作" width="100">
               <template slot="header" slot-scope="scope">
+                <el-button v-if="tabName == 'cycles'" type="primary" size="mini" @click="useResetCycle">重算周期</el-button>
                 <el-button
+                  v-else
                   circle
                   icon="el-icon-plus"
                   :size="$attrs.size"
@@ -316,6 +411,7 @@ export default {
               </template>
               <template slot-scope="scope">
                 <el-button
+                  v-if="tabName == 'indexs' || tabName == 'dimensionalitys'"
                   circle
                   icon="el-icon-minus"
                   :size="$attrs.size"
@@ -331,6 +427,13 @@ export default {
         <el-button :size="$attrs.size" :loading="loading" @click="hide"
           >取 消</el-button
         >
+        <!-- <el-button
+          type="primary"
+          :size="$attrs.size"
+          :loading="loading"
+          @click="useSaveAndAdd('superForm')"
+          >保存并新增</el-button
+        > -->
         <el-button
           type="primary"
           :size="$attrs.size"

+ 16 - 36
src/views/business/spd/target/targetTemplate/delete/index.vue

@@ -3,45 +3,28 @@ import { delTargetTemplate,checkQuote, } from "@/api/business/spd/starget/target
 
 export default {
   name: "DeleteDialog",
-  props: {
-    selectData: {
-      type: [Array],
-      require: true,
-    },
-  },
+  props: ['selectData'],
   data() {
     return {
       title: "删 除",
     };
   },
-  computed: {
-    disabled: {
-      get() {
-        const { selectData } = this;
-        if (selectData.length < 1) {
-          return true;
-        }
-        if (
-          selectData.length >= 1 &&
-          selectData.findIndex(({ status }) => status === "1") > -1
-        ) {
-          return true;
-        }
-        if (
-          selectData.length >= 1 &&
-          selectData.findIndex(({ status }) => status === "2") > -1
-        ) {
-          return true;
-        }
-      },
-      set() {},
-    },
-  },
   watch: {},
   methods: {
-    //
-    open() {
-
+    async open() {
+      const { selectData } = this.$props;
+      const { code, data } = await checkQuote(selectData.id);
+      if(code == '200'){
+        if(data){
+          this.$modal.msgError("该目标模板存在引用,无法删除!");
+          this.visible = false;
+          return;
+        }
+      }else{
+        this.$modal.msgError("校验该目标模板是否存在引用异常,无法删除!");
+        this.visible = false;
+        return;
+      }
       this.$confirm(`是否删除数据项?`, "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
@@ -52,9 +35,7 @@ export default {
             instance.confirmButtonText = "执行中...";
             try {
               // try
-              const { selectData } = this.$props;
-              const ids = selectData.map((item) => item.id).join(",");
-              const { msg, code } = await delTargetTemplate(ids);
+              const { msg, code } = await delTargetTemplate(selectData.id);
               if (code === 200) {
                 done();
                 this.$emit("success");
@@ -86,7 +67,6 @@ export default {
   <el-button
     v-bind="$attrs"
     v-on="$listeners"
-    :disabled="disabled"
     @click="open"
   >
     {{ title }}

+ 17 - 16
src/views/business/spd/target/targetTemplate/index.vue

@@ -106,18 +106,6 @@ export default {
           ref="SeeButton"
           @success="useQuery(params, page)"
         ></see-button>
-        <add-button
-          :size="size"
-          :dict="dict"
-          :select-data="selectData"
-          add-type="edit"
-          @success="useQuery(params, page)"
-        ></add-button>
-        <dele-button
-          :size="size"
-          :select-data="selectData"
-          @success="useQuery(params, page)"
-        ></dele-button>
       </el-button-group>
     </div>
     <el-super-table
@@ -130,11 +118,24 @@ export default {
       @row-dblclick="useSee"
       @selection-change="useSelect"
     >
-      <!-- <el-table-column fixed width="55" align="center" label="#" prop="$index">
-      </el-table-column> -->
-      
-      <el-table-column fixed width="55" align="center" type="selection">
+      <el-table-column fixed="right" label="操作" align="center" width="150">
+        <template slot-scope="scope">
+          <add-button
+          :size="size"
+          :dict="dict"
+          :select-data="scope.row"
+          add-type="edit"
+          @success="useQuery(params, page)"
+        ></add-button>
+        <dele-button
+          :size="size"
+          :select-data="scope.row"
+          @success="useQuery(params, page)"
+        ></dele-button>
+        </template>
       </el-table-column>
+      <!-- <el-table-column fixed width="55" align="center" type="selection">
+      </el-table-column> -->
     </el-super-table>
     <pagination
       :total="page.total"