Răsfoiți Sursa

营销-目标管理;

001295 1 an în urmă
părinte
comite
ef3158d687

+ 8 - 0
src/api/business/spd/starget/targetTemplate.js

@@ -57,4 +57,12 @@ export function checkQuote(id) {
     url: '/mk/target/targetTemplate/checkQuote/' + id,
     method: 'get'
   })
+}
+
+//校验目标模板是否被引用
+export function download(id) {
+  return request({
+    url: '/mk/target/targetTemplate/download/' + id,
+    method: 'get'
+  })
 }

+ 0 - 1
src/views/business/spd/target/targetMk/add.vue

@@ -11,7 +11,6 @@
                 disabled
                 style="width: 200px"
               />
-              <!-- <div>{{form.code}}</div> -->
             </el-form-item>
           </el-col>
           <el-col :span="1.5">

+ 50 - 12
src/views/business/spd/target/targetMk/index.vue

@@ -5,6 +5,22 @@
         <el-form class="search_area" label-width="120px">
           <el-row :gutter="10">
             <el-col :span="1.5">
+              <el-form-item label="单据状态" prop="status">
+                <el-select
+                  size="mini"
+                  v-model="queryParams.status"
+                  clearable
+                >
+                  <el-option
+                    v-for="dict in dict.type.sys_status"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="1.5">
               <el-form-item label="单据编号">
                 <el-input
                   v-model="queryParams.code"
@@ -61,22 +77,28 @@
       
         <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>
+          <TemplateDownload/>
+          <el-button type="primary" size="mini" @click="useUpload">导入</el-button>
         </div>
 
         <el-table 
-          :data="tableList" 
-          fit
-          max-height="480"
-          style="font-size: 12px;"
+          :data="tableList"
           @selection-change="useSelectionRow"
           @row-dblclick="useDoubleClick"
         >
           <el-table-column show-overflow-tooltip type="selection" width="55" />
+          <el-table-column label="序号" type="index" width="50" align="center" fixed/>
           <el-table-column show-overflow-tooltip label="单据编号" align="center" width="200" prop="code"/>
           <el-table-column show-overflow-tooltip label="单据日期" align="center" width="200" prop="date"/>
           <el-table-column show-overflow-tooltip label="目标名称" align="center" width="200" prop="name"/>
+          <el-table-column show-overflow-tooltip label="状态" align="center" width="200" prop="status">
+            <template slot-scope="scope">
+              <dict-tag
+                :options="dict.type.sys_status"
+                :value="scope.row.status"
+              />
+            </template>
+          </el-table-column>
           <el-table-column show-overflow-tooltip label="年度" align="center" width="200" prop="templateData.year"/>
           <el-table-column show-overflow-tooltip label="模板" align="center" width="200" prop="templateData.name"/>
           <el-table-column show-overflow-tooltip label="开始日期" align="center" width="200" prop="templateData.startTime" />
@@ -117,11 +139,16 @@
           <el-table-column show-overflow-tooltip label="创建时间" align="center" width="200" prop="createTime" />
           <el-table-column show-overflow-tooltip label="修改人" align="center" width="200" prop="updateByName" />
           <el-table-column show-overflow-tooltip label="修改时间" align="center" width="200" prop="updateTime" />
-          <el-table-column fixed="right" label="操作" align="center" width="200">
+          <el-table-column fixed="right" label="操作" align="center" width="150">
             <template slot-scope="scope">
-              <!-- <el-button type="text" size="mini" @click="useSubmit(scope.row)">提交</el-button> -->
-              <el-button type="text" size="mini" @click="useEdit(scope.row)">编辑</el-button>
-              <el-button type="text" size="mini" @click="useDel(scope.row)">删除</el-button>
+              <div v-if="scope.row.status == '0' || scope.row.status == '3'">
+                <el-button type="text" size="mini" @click="useSubmit(scope.row)">提交</el-button>
+                <el-button type="text" size="mini" @click="useEdit(scope.row)">编辑</el-button>
+                <el-button type="text" size="mini" @click="useDel(scope.row)">删除</el-button>
+              </div>
+              <div v-if="scope.row.status == '1'">
+                <el-button type="text" size="mini" @click="useRevocation(scope.row)">撤回</el-button>
+              </div>
             </template>
           </el-table-column>
         </el-table>
@@ -144,14 +171,15 @@
 
 <script>
 import Add from './add.vue'
+import TemplateDownload from './templateDownload.vue'
 import CollapseTransition from '@/components/MyCollapse/collapse.vue'
 import { listTarget,delTarget } from "@/api/business/spd/starget/target";
 export default {
   name: 'target',
   dicts: [
-    "mk_periodic_unit","mk_dimensionality","mk_index_type"
+    "sys_status","mk_periodic_unit","mk_dimensionality","mk_index_type"
   ],
-  components: { Add,CollapseTransition},
+  components: { Add,TemplateDownload,CollapseTransition},
   data() {
     return {
       expanded: false,
@@ -161,6 +189,7 @@ export default {
       page: '',
       // 搜索框参数
       queryParams: {
+        status: '',
         code: '',
         name: '',
         template:'',
@@ -174,6 +203,7 @@ export default {
       tableList:[],
       disable: false,
       rowDetail:{},
+      openTemplateDownload:false,
     }
   },
   created() {
@@ -186,10 +216,18 @@ export default {
       this.page = 'add'
       this.disable = false
     },
+    //导入
+    useUpload(){
+
+    },
     //提交
     useSubmit(){
       
     },
+    //撤回
+    useRevocation(){
+
+    },
     //修改
     useEdit(row){
       this.isList = false

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

@@ -9,7 +9,7 @@
     <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">
+      <el-table-column show-overflow-tooltip v-for="head in headers" :prop="head.prop" :label="head.modelName" width="200" align="center">
         <template slot-scope="scope">
           <div v-if="pageStu == 'add' || pageStu == 'edit'">
             <div v-if="scope.row[head.prop].type == 'D'">

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

@@ -1,131 +0,0 @@
-import CONFIG from "@/config";
-
-export default function useColumns() {
-  const TableColumns = [
-    {
-      item: { key: "year", title: "年度", require: true },
-      attr: {
-        is: "el-date-picker",
-        type: "year",
-        valueFormat: "yyyy-MM-dd",
-      },
-    },
-    {
-      item: { key: "name", title: "模板名称", require: true },
-      attr: { is: "el-input" },
-    },
-    {
-      item: { key: "startTime", title: "开始日期", require: true },
-      attr: {
-        is: "el-date-picker",
-        valueFormat: "yyyy-MM-dd",
-      },
-    },
-    {
-      item: { key: "deadlineTime", title: "结束日期", require: true },
-      attr: {
-        is: "el-date-picker",
-        valueFormat: "yyyy-MM-dd",
-      },
-    },
-    {
-      item: { key: "cycle", title: "周期", require: true },
-      attr: {
-        is: "el-select",
-        dictName: "mk_periodic_unit",
-      },
-    },
-    {
-      item: { key: "unfold", title: "按列展开"},
-      attr: {
-        is: "el-select",
-        dictName: "mk_expansion_mode",
-        clearable: true,
-      },
-    },
-  ].map(({ item, attr }) => ({
-    attr,
-    item: { ...item, hidden: true, span: item.span || 6 },
-  }));
-
-  const TabColumns = [
-    {
-      item: {
-        title: "指标",
-        key: "indexs",
-      },
-      attr: {
-        value: [],
-      },
-      TableColumns: [
-        {
-          item: { key: "target", title: "指标", width: 'auto' },
-          attr: {
-            is: "el-select",
-            dictName: "mk_index_type",
-          },
-        },
-      ],
-    },
-    {
-      item: {
-        title: "维度",
-        key: "dimensionalitys"
-      },
-      attr: {
-        value: [],
-      },
-      TableColumns: [
-        {
-          item: { key: "dimensionality", title: "维度", width: 'auto' },
-          attr: {
-            is: "el-select",
-            dictName: "mk_dimensionality",
-          },
-        },
-      ],
-    },
-    {
-      item: {
-        title: "周期",
-        key: "cycles",
-      },
-      attr: {
-        value: [],
-      },
-      TableColumns: [
-        {
-          item: { key: "name", title: "周期名称", require: true },
-          attr: { is: "el-input" },
-        },
-        {
-          item: {
-            key: "startTime",
-            title: "周期开始日期",
-            require: true,
-          },
-          attr: {
-            is: "el-date-picker",
-            // valueFormat: "yyyy-MM-dd",
-            // value: new Date(),
-          },
-        },
-        {
-          item: {
-            key: "deadlineTime",
-            title: "周期结束日期",
-            require: true,
-            width: 'auto'
-          },
-          attr: {
-            is: "el-date-picker",
-            // valueFormat: "yyyy-MM-dd",
-            // value: new Date(),
-          },
-        },
-      ],
-    },
-  ];
-
-  return { TableColumns, TabColumns };
-}

+ 0 - 453
src/views/business/spd/target/targetTemplate/add/index.vue

@@ -1,453 +0,0 @@
-<script>
-import useColumns from "./columns";
-import {
-  addTargetTemplate,
-  updateTargetTemplate,
-  getTargetTemplate,
-  checkQuote,
-} from "@/api/business/spd/starget/targetTemplate";
-export default {
-  name: "AddDrawer",
-  props: {
-    dict: {
-      type: Object,
-    },
-    selectData: {
-      type: Object,
-      require: true,
-    },
-    addType: {
-      type: String,
-      default: "add",
-    },
-  },
-  components: {
-    ElSuperForm: () => import("@/components/super-form/index.vue"),
-    ElSuperTable: () => import("@/components/super-table/index.vue"),
-    ElPopoverSelectV2: () => import("@/components/popover-select-v2/index.vue"),
-  },
-  data() {
-    const {
-      TabColumns,
-      TableColumns,
-      TabColumns: [
-        {
-          item: { key: tabName },
-        },
-      ],
-    } = useColumns();
-    const rules = this.$init.rules([...TabColumns, ...TableColumns]);
-    const params = this.$init.params([...TabColumns, ...TableColumns]);
-    return {
-      width: "100%",
-      visible: false,
-      loading: false,
-      rules: rules,
-      params: params,
-      tabName: tabName,
-      TabColumns: TabColumns,
-      TableColumns: TableColumns,
-    };
-  },
-  computed: {
-    title: {
-      get() {
-        const { addType } = this;
-        if (addType === "add") {
-          return "新 增";
-        }
-        if (addType === "edit") {
-          return "编 辑";
-        }
-      },
-      set() {},
-    },
-  },
-  watch: {},
-  methods: {
-    changePuOrgName(prop) {
-      console.log("changePuOrgName", prop);
-    },
-    changeMaterialName(prop) {
-      console.log("changeMaterialName", prop);
-    },
-
-    //查询目标模板详情
-    async fetchTemplate(prop) {
-      try {
-        // try
-        this.loading = true;
-        const { code, data } = await getTargetTemplate(prop);
-        if (code === 200) {
-          this.params = data;
-          return true;
-        } else {
-          return false;
-        }
-      } catch (err) {
-        // catch
-        console.error(err);
-      } finally {
-        // finally
-        this.loading = false;
-      }
-    },
-    //打开组件
-    async open() {
-      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 { 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.visible = await this.fetchTemplate(selectData.id);
-        this.params.indexs = this.params.indexs.map((item) => ({ ...item}));
-        this.params.dimensionalitys = this.params.dimensionalitys.map(
-          (item) => ({ ...item})
-        );
-        this.params.cycles = this.params.cycles.map((item) => ({ ...item}));
-        console.log("this.params",this.params);
-      }
-    },
-    //关闭页面
-    async hide() {
-      const {
-        TabColumns,
-        TableColumns,
-        TabColumns: [
-          {
-            item: { key: tabName },
-          },
-        ],
-      } = useColumns();
-      this.visible = false;
-      this.tabName = tabName;
-      this.params = this.$init.params([...TabColumns, ...TableColumns]);
-    },
-    //增行
-    async useRowAdd(prop) {
-      const { TabColumns } = this;
-      const { TableColumns } = TabColumns.find(
-        ({ item: { key } }) => key === prop
-      );
-      this.params[prop].push({
-        delFlag: "0",
-        $index: new Date().getTime(),
-        ...this.$init.params(TableColumns),
-      });
-    },
-    //删行
-    async useRowRemove(prop, scope) {
-      // 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) {
-      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.hide();
-              this.$emit("success");
-              this.$notify.success(res.msg);
-            }
-          } catch (err) {
-            // catch
-            console.error(err);
-          } finally {
-            // finally
-            this.loading = false;
-          }
-        } else {
-          return false;
-        }
-      });
-    },
-    //保存并新增
-    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() {
-  },
-  mounted() {},
-  destroyed() {},
-};
-</script>
-<template>
-  <el-button v-bind="$attrs" v-on="$listeners" @click="open">
-    {{ title }}
-    <el-drawer
-      :size="width"
-      :title="title"
-      :visible.sync="visible"
-      append-to-body
-      destroy-on-close
-      @close="hide"
-    >
-      <el-super-form
-        v-model="params"
-        :dict="dict"
-        :rules="rules"
-        :size="$attrs.size"
-        :columns="TableColumns"
-        ref="superForm"
-        label-width="auto"
-        label-position="right"
-        style="padding: 20px"
-      >
-        <!-- <template slot="puOrgName" slot-scope="scope">
-          <component
-            v-bind="scope.attr"
-            v-model="scope.row[scope.item.key]"
-            :size="$attrs.size"
-            :source.sync="scope.row"
-            @change="changePuOrgName({ ...scope, select: $event })"
-          >
-          </component
-        ></template> -->
-      </el-super-form>
-      <el-tabs v-model="tabName" style="padding: 0 20px 20px">
-        <el-tab-pane
-          v-for="({ item, TableColumns: columns }, index) in TabColumns"
-          :key="index"
-          :label="item.title"
-          :name="item.key"
-          lazy
-        >
-          <el-super-table
-            v-model="params[item.key]"
-            :dict="dict"
-            :ref="tabName"
-            :columns="columns"
-            :size="$attrs.size"
-          >
-            <!-- <template slot="materialName" slot-scope="scope">
-              <component
-                v-bind="scope.attr"
-                v-model="scope.row[scope.item.key]"
-                :size="$attrs.size"
-                :source.sync="scope.row"
-                @change="changeMaterialName(scope)"
-              >
-              </component>
-            </template> -->
-            <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"
-                  @click="useRowAdd(tabName)"
-                >
-                </el-button>
-              </template>
-              <template slot-scope="scope">
-                <el-button
-                  v-if="tabName == 'indexs' || tabName == 'dimensionalitys'"
-                  circle
-                  icon="el-icon-minus"
-                  :size="$attrs.size"
-                  @click.native.prevent="useRowRemove(tabName, scope)"
-                >
-                </el-button>
-              </template>
-            </el-table-column>
-          </el-super-table>
-        </el-tab-pane>
-      </el-tabs>
-      <div style="padding: 20px; text-align: right">
-        <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"
-          :loading="loading"
-          @click="useSubmit('superForm')"
-          >确 认</el-button
-        >
-      </div>
-    </el-drawer>
-  </el-button>
-</template>
-
-<style scoped>
-::v-deep .el-table__row.is-hidden {
-  display: none;
-}
-</style>

+ 0 - 38
src/views/business/spd/target/targetTemplate/columns.js

@@ -1,38 +0,0 @@
-import CONFIG from "@/config";
-
-export default function useColumns() {
-  const TableColumns = [
-    { item: { key: "year", title: "年度" }, attr: {} },
-    { item: { key: "name", title: "模板名称" }, attr: {} },
-    { item: { key: "startTime", title: "开始日期" }, attr: {} },
-    { item: { key: "deadlineTime", title: "结束日期" }, attr: {} },
-    {
-      item: { key: "cycle", title: "周期" },
-      attr: { is: "el-dict-tag", dictName: "mk_periodic_unit" },
-    },
-    {
-      item: { key: "unfold", title: "按列展开" },
-      attr: { is: "el-dict-tag", dictName: "mk_expansion_mode" },
-    },
-    { item: { key: "createByName", title: "创建人" }, attr: {} },
-    { item: { key: "createTime", title: "创建时间" }, attr: {} },
-    { item: { key: "updateByName", title: "修改人" }, attr: {} },
-    { item: { key: "updateTime", title: "修改时间" }, attr: {} },
-  ].map(({ item, attr }) => ({
-    attr,
-    item: { ...item, hidden: true, fixed: false },
-  }));
-  const SearchColumns = [
-    { item: { key: "year", title: "年度",},attr: {
-      is: "el-date-picker",
-      type: "year",
-      valueFormat: "yyyy-MM-dd",
-    }, },
-    { item: { key: "name", title: "模板名称"},attr: { is: "el-input" }, },
-  ].map(({ item, attr }) => ({
-    attr,
-    item: { ...item, hidden: true, span: item.span || 6 },
-  }));
-
-  return { TableColumns, SearchColumns };
-}

+ 0 - 74
src/views/business/spd/target/targetTemplate/delete/index.vue

@@ -1,74 +0,0 @@
-<script>
-import { delTargetTemplate,checkQuote, } from "@/api/business/spd/starget/targetTemplate";
-
-export default {
-  name: "DeleteDialog",
-  props: ['selectData'],
-  data() {
-    return {
-      title: "删 除",
-    };
-  },
-  watch: {},
-  methods: {
-    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: "取消",
-        type: "info",
-        beforeClose: async (action, instance, done) => {
-          if (action === "confirm") {
-            instance.confirmButtonLoading = true;
-            instance.confirmButtonText = "执行中...";
-            try {
-              // try
-              const { msg, code } = await delTargetTemplate(selectData.id);
-              if (code === 200) {
-                done();
-                this.$emit("success");
-                this.$notify.success(msg);
-              }
-            } catch (err) {
-              // catch
-              console.error(err);
-              instance.confirmButtonText = "确认";
-            } finally {
-              // finally
-              instance.confirmButtonLoading = false;
-            }
-          } else {
-            done();
-          }
-        },
-      })
-        .then(() => {})
-        .catch(() => {});
-    },
-  },
-  created() {},
-  mounted() {},
-  destroyed() {},
-};
-</script>
-<template>
-  <el-button
-    v-bind="$attrs"
-    v-on="$listeners"
-    @click="open"
-  >
-    {{ title }}
-  </el-button>
-</template>

+ 0 - 14
src/views/business/spd/target/targetTemplate/dicts.js

@@ -1,14 +0,0 @@
-import { initDicts } from "@/utils/init.js";
-const modules = require.context("./", true, /columns.js$/);
-const columns = [];
-modules.keys().forEach((fileName) => {
-  const data = modules(fileName).default();
-  for (const key in data) {
-    if (key === "TabColumns") {
-      columns.push(...data[key].map((item) => item.TableColumns).flat());
-    } else {
-      columns.push(...data[key]);
-    }
-  }
-});
-export const dicts = initDicts(columns);

+ 208 - 126
src/views/business/spd/target/targetTemplate/index.vue

@@ -1,151 +1,224 @@
+
+<template>
+  <div>
+    <div v-if="!openDetail">
+      <el-card>
+        <el-form size="mini" class="search_area" label-width="120px">
+          <el-row :gutter="10">
+            <el-col :span="1.5">
+              <el-form-item label="年份">
+                <el-date-picker
+                  v-model="queryParams.year"
+                  type="year"
+                  clearable
+                  >
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="1.5">
+              <el-form-item label="目标名称">
+                <el-input
+                  v-model="queryParams.name"
+                  clearable
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="1.5">
+              <el-form-item label="" label-width="20px">
+                <el-button type="primary" size="mini" icon="el-icon-search" plain @click="useSearch">搜索</el-button>
+                <el-button size="mini" icon="el-icon-refresh" plain @click="useReset">重置</el-button>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <el-divider></el-divider>
+        <div class="btn_grooup">
+          <el-button type="primary" size="mini" @click="useAdd">新增</el-button>
+        </div>
+
+        <el-table 
+          :data="tableList"
+          @row-dblclick="useDoubleClick"
+        >
+          <el-table-column label="序号" type="index" width="50" align="center" fixed/>
+          <el-table-column show-overflow-tooltip label="年度" align="center" width="200" prop="year">
+            <template slot-scope="scope">
+              {{scope.row.year.substring(0,4)}}
+            </template>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="模板名称" align="center" width="200" prop="name"/>
+          <el-table-column show-overflow-tooltip label="开始日期" align="center" width="200" prop="startTime"/>
+          <el-table-column show-overflow-tooltip label="结束日期" align="center" width="200" prop="deadlineTime"/>
+          <el-table-column show-overflow-tooltip label="周期" align="center" width="200" prop="cycle">
+            <template slot-scope="scope">
+              <dict-tag
+                :options="dict.type.mk_periodic_unit"
+                :value="scope.row.cycle"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="按列展开" align="center" width="200" prop="unfold">
+            <template slot-scope="scope">
+              <dict-tag
+                :options="dict.type.mk_expansion_mode"
+                :value="scope.row.unfold"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip label="创建人" align="center" width="200" prop="createByName" />
+          <el-table-column show-overflow-tooltip label="创建时间" align="center" width="200" prop="createTime" />
+          <el-table-column show-overflow-tooltip label="修改人" align="center" width="200" prop="updateByName" />
+          <el-table-column show-overflow-tooltip label="修改时间" align="center" width="200" prop="updateTime" />
+          <el-table-column fixed="right" label="操作" align="center" width="150">
+            <template slot-scope="scope">
+              <el-button type="text" size="mini" @click="useEdit(scope.row)">编辑</el-button>
+              <el-button type="text" size="mini" @click="useDel(scope.row)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <el-pagination
+          background
+          @size-change="useChangePageSize"
+          @current-change="useCurrentChange"
+          :current-page="queryParams.pageNum"
+          :page-sizes="[10, 15, 20]"
+          :page-size="100"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total=total>
+        </el-pagination>
+      </el-card>
+    </div>
+    <Detail v-if="openDetail" :openMode="openMode" :row="row"/>
+  </div>
+</template>
+
 <script>
-import { dicts } from "./dicts";
-import useColumns from "./columns";
-import { listTargetTemplate } from "@/api/business/spd/starget/targetTemplate";
+import Detail from './detail.vue'
+import { listTargetTemplate,delTargetTemplate,checkQuote, } from "@/api/business/spd/starget/targetTemplate";
 
 export default {
   name: "targettemplate",
-  dicts: dicts,
-  components: {
-    SeeButton: () => import("./see/index.vue"),
-    AddButton: () => import("./add/index.vue"),
-    DeleButton: () => import("./delete/index.vue"),
-    ElSuperTable: () => import("@/components/super-table/index.vue"),
-    ElSuperSearch: () => import("@/components/super-search/index.vue"),
-  },
+  dicts: ["mk_periodic_unit","mk_expansion_mode"],
+  components: {Detail},
   data() {
-    const { TableColumns, SearchColumns } = useColumns();
-    const params = this.$init.params(SearchColumns);
     return {
-      size: "mini",
-      loading: false,
-      params: params,
-      tableData: [],
-      selectData: [],
-      SearchColumns: SearchColumns,
-      TableColumns: TableColumns,
-      page: { pageNum: 1, pageSize: 10, total: 0 },
+      // 搜索框参数
+      queryParams: {
+        year:'',
+        name:'',
+        pageNum: 1,
+        pageSize: 10
+      },
+      //总条数
+      total: 0,
+      //列表数据
+      tableList:[],
+      //是否打开详情页面
+      openDetail:false,
+      //编辑页面打开方式,add或edit或see
+      openMode:'',
+      //行数据
+      row:{},
     };
   },
   created() {
-    console.log('this.$refs',this.$refs);
-    this.useQuery(this.params, this.page);
+    this.getList(this.queryParams);
   },
   methods: {
-    async fetchList(prop, page) {
-      try {
-        this.loading = true;
-        const { code, rows, total } = await listTargetTemplate(
-          {...prop,...page}
-        );
-        if (code === 200) {
-          this.tableData = rows;
-          this.page.total = total;
-          console.log('this.tableData',this.tableData);
+    //是否打开详情页面
+    useOpenDetail(){
+      this.openDetail = !this.openDetail;
+    },
+    //新增
+    useAdd(){
+      this.openMode = 'add';
+      this.openDetail = true;
+    },
+    //编辑
+    async useEdit(row){
+      const { code, data } = await checkQuote(row.id);
+      if (code == "200") {
+        if (data) {
+          this.$modal.msgError("该目标模板存在引用,无法修改!");
+          this.visible = false;
+          return;
+        }
+      } else {
+        this.$modal.msgError("校验该目标模板是否存在引用异常,无法修改!");
+        this.visible = false;
+        return;
+      }
+      this.openMode = 'edit';
+      this.row = row;
+      this.openDetail = true;
+    },
+    //删除
+    async useDel(row){
+      const { code, data } = await checkQuote(row.id);
+      if (code == "200") {
+        if (data) {
+          this.$modal.msgError("该目标模板存在引用,无法修改!");
+          this.visible = false;
+          return;
         }
-      } catch (err) {
-        // catch
-        console.error(err);
-      } finally {
-        // finally
-        this.loading = false;
+      } else {
+        this.$modal.msgError("校验该目标模板是否存在引用异常,无法修改!");
+        this.visible = false;
+        return;
       }
+      this.$modal.confirm('确认删除选择数据').then(() => {
+        delTarget(row.id).then(res => {
+          if (res.code === 200) {
+            this.$modal.msgSuccess("删除成功");
+            this.getList(this.queryParams)
+          }
+        })
+      }).catch(() => {})
+    },
+    //查询列表
+    getList(params){
+      listTargetTemplate(params).then(res => {
+        if (res.code === 200) {
+          this.tableList = res.rows
+          this.total = res.total
+        }
+      })
+    },
+    //双击
+    useDoubleClick(row){
+      this.openMode = 'see';
+      this.row = row;
+      this.openDetail = true;
     },
-    // 查 询
-    useQuery(prop, page) {
-      this.selectData = [];
-      this.fetchList(prop, page);
+    //改变一页显示条数
+    useChangePageSize(val){
+      this.queryParams.pageSize = val
+      this.getList(this.queryParams)
     },
-    // 重 置
-    useReset() {
-      this.page.pageNum = 1;
-      this.page.pageSize = 10;
-      this.params = this.$init.params(this.SearchColumns);
-      this.useQuery(this.params, this.page);
+    //翻页
+    useCurrentChange(val){
+      this.queryParams.pageNum = val
+      this.getList(this.queryParams)
     },
-    // 选 择
-    useSelect(prop) {
-      this.selectData = prop;
+    //搜索
+    useSearch() {
+      this.getList(this.queryParams);
     },
-    // 明 细
-    async useSee(prop) {
-      const { open } = this.$refs.SeeButton;
-      await open([prop]);
+    //重置
+    useReset(){
+      this.queryParams = {
+        year:'',
+        name: '',
+        pageNum: 1,
+        pageSize: 10
+      }
+      this.getList(this.queryParams);
     },
   },
 };
 </script>
 
-<template>
-  <el-card v-loading="loading" :body-style="{ padding: 0 }">
-    <el-super-search
-      v-model="params"
-      :size="size"
-      :dict="dict"
-      :columns="SearchColumns"
-      @reset="useReset"
-      @submit="useQuery(params, page)"
-    ></el-super-search>
-    <div style="margin: 0 0 20px 0; text-align: right">
-      <el-button-group>
-        <add-button
-          :size="size"
-          :select-data="[]"
-          :dict="dict"
-          add-type="add"
-          @success="useQuery(params, page)"
-        ></add-button>
-      </el-button-group>
-      <el-button-group>
-        <see-button
-          v-show="false"
-          :size="size"
-          :dict="dict"
-          :model="params"
-          :select-data="selectData"
-          ref="SeeButton"
-          @success="useQuery(params, page)"
-        ></see-button>
-      </el-button-group>
-    </div>
-    <el-super-table
-      v-model="tableData"
-      :size="size"
-      :dict="dict"
-      :columns="TableColumns"
-      stroage
-      hideOperationColumns
-      @row-dblclick="useSee"
-      @selection-change="useSelect"
-    >
-      <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"
-      :page.sync="page.pageNum"
-      :limit.sync="page.pageSize"
-      @pagination="useQuery(params, page)"
-      style="height: 32px; margin: 20px 0 0 0; padding: 0 !important"
-    />
-  </el-card>
-</template>
 <style scoped lang="scss">
 .el-card {
   width: calc(100% - 20px);
@@ -156,4 +229,13 @@ export default {
 .el-button-group + .el-button-group {
   margin: 0 0 0 10px;
 }
+.btn_grooup {
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: flex-end;
+}
+.el-pagination {
+  margin-top: 10px;
+  text-align: right;
+}
 </style>

+ 0 - 110
src/views/business/spd/target/targetTemplate/see/columns.js

@@ -1,110 +0,0 @@
-import CONFIG from "@/config";
-
-export default function useColumns() {
-  const TableColumns = [
-    {
-      item: { key: "year", title: "年度" },
-      attr: {},
-    },
-    {
-      item: { key: "name", title: "模板名称" },
-      attr: {},
-    },
-    {
-      item: { key: "startTime", title: "开始日期" },
-      attr: {},
-    },
-    {
-      item: { key: "deadlineTime", title: "结束日期" },
-      attr: {},
-    },
-    {
-      item: { key: "cycle", title: "周期" },
-      attr: {
-        is: "el-dict-tag",
-        dictName: "mk_periodic_unit",
-      },
-    },
-    {
-      item: { key: "unfold", title: "按列展开" },
-      attr: {
-        is: "el-dict-tag",
-        dictName: "mk_expansion_mode",
-      },
-    },
-    
-   
-  ];
-
-  const TabColumns = [
-    {
-      item: {
-        title: "指标",
-        key: "indexs",
-      },
-      attr: {
-        value: [],
-      },
-      TableColumns: [
-        {
-          item: { key: "target", title: "指标" },
-          attr: {
-            is: "el-dict-tag",
-            dictName: "mk_index_type",
-          },
-        },
-      ],
-    },
-    {
-      item: {
-        title: "维度",
-        key: "dimensionalitys",
-      },
-      attr: {
-        value: [],
-      },
-      TableColumns: [
-        {
-          item: { key: "dimensionality", title: "维度" },
-          attr: {
-            is: "el-dict-tag",
-            dictName: "mk_dimensionality",
-          },
-        },
-      ],
-    },
-    {
-      item: {
-        title: "周期",
-        key: "cycles",
-      },
-      attr: {
-        value: [],
-      },
-      TableColumns: [
-        {
-          item: { key: "name", title: "周期名称", require: true },
-          attr: {},
-        },
-        {
-          item: {
-            key: "startTime",
-            title: "周期开始日期",
-            require: true,
-          },
-          attr: {},
-        },
-        {
-          item: {
-            key: "deadlineTime",
-            title: "周期结束日期",
-            require: true,
-          },
-          attr: {},
-        },
-      ],
-    },
-  ];
-
-  return { TableColumns, TabColumns };
-}

+ 0 - 170
src/views/business/spd/target/targetTemplate/see/index.vue

@@ -1,170 +0,0 @@
-<script>
-import useColumns from "./columns";
-import { getTargetTemplate } from "@/api/business/spd/starget/targetTemplate";
-
-export default {
-  name: "SeeDrawer",
-  components: {
-    ElSuperDescriptions: () =>
-      import("@/components/super-descriptions/index.vue"),
-    ElSuperTable: () => import("@/components/super-table/index.vue"),
-  },
-  data() {
-    const {
-      TabColumns,
-      TableColumns,
-      TabColumns: [
-        {
-          item: { key: tabName },
-        },
-      ],
-    } = useColumns();
-    return {
-      width: "50%",
-      column: 2,
-      title: "明 细",
-      visible: false,
-      loading: false,
-      params: {},
-      tabName,
-      TabColumns: TabColumns,
-      TableColumns: TableColumns,
-    };
-  },
-  props: {
-    dict: {
-      type: Object,
-    },
-    model: {
-      type: Object,
-    },
-    selectData: {
-      type: [Array],
-      require: true,
-    },
-  },
-  computed: {
-    disabled: {
-      get() {
-        const { selectData } = this;
-        if (selectData.length !== 1) {
-          return true;
-        }
-      },
-      set() {},
-    },
-  },
-  watch: {},
-  methods: {
-    //
-    async fetchTemplate(id) {
-      try {
-        this.loading = true;
-        const { code, data } = await getTargetTemplate(id);
-        if (code === 200) {
-          this.params = data;
-          return true;
-        } else {
-          return false;
-        }
-      } catch (err) {
-        // catch
-        console.error(err);
-      } finally {
-        // finally
-        this.loading = false;
-      }
-    },
-    //
-    async open(prop) {
-      this.visible = await this.fetchTemplate(prop[0].id);
-    },
-    //
-    async hide() {
-      const {
-        TabColumns: [
-          {
-            item: { key: tabName },
-          },
-        ],
-      } = useColumns();
-      this.visible = false;
-      this.tabName = tabName;
-    },
-  },
-  created() {},
-  mounted() {},
-  destroyed() {},
-};
-</script>
-<template>
-  <el-button
-    v-bind="$attrs"
-    v-on="$listeners"
-    :disabled="disabled"
-    @click="open"
-  >
-    {{ title }}
-    <el-drawer
-      :size="width"
-      :title="title"
-      :visible.sync="visible"
-      append-to-body
-      @close="hide(selectData)"
-    >
-      <div
-        style="
-          z-index: 6666;
-          position: fixed;
-          right: 20px;
-          top: 50%;
-          transform: translateY(-50%);
-          display: flex;
-          flex-direction: column;
-        "
-      >
-        <el-button
-          :size="$attrs.size"
-          :disabled="params.$index === 1"
-          circle
-          icon="el-icon-top"
-          @click="fetchItem(params.$index - 1)"
-          style="margin: 0 0 10px 0"
-        ></el-button>
-        <el-button
-          :size="$attrs.size"
-          :disabled="params.$index === params.$total"
-          circle
-          icon="el-icon-bottom"
-          @click="fetchItem(params.$index + 1)"
-          style="margin: 0"
-        ></el-button>
-      </div>
-      <el-super-descriptions
-        v-model="params"
-        :dict="dict"
-        :column="column"
-        :size="$attrs.size"
-        :columns="TableColumns"
-      >
-      </el-super-descriptions>
-      <el-tabs v-model="tabName" :size="$attrs.size" style="margin: 10px">
-        <el-tab-pane
-          v-for="({ item, TableColumns: columns }, index) in TabColumns"
-          :key="index"
-          :name="item.key"
-          :label="item.title"
-          lazy
-        >
-          <el-super-table
-            v-model="params[item.key]"
-            :size="$attrs.size"
-            :dict="dict"
-            :columns="columns"
-          >
-          </el-super-table>
-        </el-tab-pane>
-      </el-tabs>
-    </el-drawer>
-  </el-button>
-</template>