002201 1 tahun lalu
induk
melakukan
43bdea4761

+ 95 - 29
src/views/purchase/contract/delete/index.vue

@@ -3,39 +3,65 @@ import { REMOVE } from "@/api/business/purchase/contract";
 
 export default {
   name: "DeleteDialog",
+  props: {
+    selectData: {
+      type: [Array],
+      require: true,
+    },
+  },
   data() {
-    return {};
+    return {
+      title: "删 除",
+      visible: false,
+      loading: false,
+    };
+  },
+  computed: {
+    disabled: {
+      get() {
+        if (this.selectData.length === 1) {
+          const [{ status }] = this.selectData;
+          if (status === "1") {
+            return true;
+          }
+          if (status === "2") {
+            return true;
+          }
+        } else {
+          return true;
+        }
+      },
+      set() {},
+    },
   },
-  computed: {},
   watch: {},
   methods: {
     //
-    open(prop) {
-      return new Promise((resolve, reject) => {
-        this.$confirm("是否删除数据项?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "info",
-        })
-          .then(async () => {
-            try {
-              // try
-              const { msg, code } = await REMOVE(prop);
-              if (code === 200) {
-                resolve(true);
-                this.$emit("success");
-                this.$notify.success(msg);
-              }
-            } catch (err) {
-              // catch
-              reject(false);
-              console.error(err);
-            } finally {
-              // finally
-            }
-          })
-          .catch(() => reject(false));
-      });
+    open() {
+      this.visible = true;
+    },
+    //
+    hide() {
+      this.visible = false;
+    },
+    //
+    async submit(prop) {
+      try {
+        // try
+        this.loading = true;
+        const { msg, code } = await REMOVE(prop);
+        if (code === 200) {
+          this.hide();
+          this.$emit("success");
+          this.$notify.success(msg);
+        }
+      } catch (err) {
+        // catch
+        console.error(err);
+      } finally {
+        // finally
+        this.loading = false;
+      }
     },
   },
   created() {},
@@ -43,4 +69,44 @@ export default {
   destroyed() {},
 };
 </script>
-<template></template>
+<template>
+  <el-button
+    v-bind="$attrs"
+    v-on="$listeners"
+    :disabled="disabled"
+    @click="open"
+  >
+    {{ title }}
+    <el-dialog
+      :title="title"
+      :visible.sync="visible"
+      width="25%"
+      append-to-body
+      @close="hide"
+    >
+      <div slot="footer">
+        <el-button
+          :size="$attrs.size"
+          :loading="loading"
+          @click="visible = false"
+          >取 消</el-button
+        >
+        <el-button
+          type="primary"
+          :size="$attrs.size"
+          :loading="loading"
+          @click="submit(selectData[0].id)"
+          >确 认</el-button
+        >
+      </div>
+      <el-alert
+        title="是否删除数据项?"
+        type="info"
+        show-icon
+        :closable="false"
+        style="margin-bottom: 10px"
+      >
+      </el-alert>
+    </el-dialog>
+  </el-button>
+</template>

+ 0 - 5
src/views/purchase/contract/edit/index.vue

@@ -47,11 +47,6 @@ export default {
     };
   },
   computed: {
-    root: {
-      get() {
-        return this.$parent.$parent;
-      },
-    },
     $dicts: {
       get() {
         return this.$parent.$parent.$parent.dict.type;

+ 77 - 2
src/views/purchase/contract/export/index.vue

@@ -1,13 +1,54 @@
 <script>
 export default {
   name: "ExportDialog",
+  props: {
+    data: {
+      type: [Object],
+      require: true,
+    },
+    page: {
+      type: [Object],
+      require: true,
+    },
+  },
   data() {
-    return {};
+    return {
+      title: "导 出",
+      visible: false,
+      loading: false,
+    };
   },
   computed: {},
   watch: {},
   methods: {
     //
+    open() {
+      this.visible = true;
+    },
+    //
+    hide() {
+      this.visible = false;
+    },
+    //
+    async submit(prop, page) {
+      try {
+        // try
+        this.loading = true;
+        const { pageNum, pageSize } = page;
+        await this.download(
+          "pu/order/generate/export",
+          { ...prop, pageNum, pageSize },
+          `task_${new Date().getTime()}.xlsx`
+        );
+        await this.hide();
+      } catch (err) {
+        // catch
+      } finally {
+        // loading
+        this.loading = false;
+      }
+    },
+    //
     open(prop) {
       this.$confirm("是否确认导出所有数据项?", "提示", {
         confirmButtonText: "确定",
@@ -31,4 +72,38 @@ export default {
   destroyed() {},
 };
 </script>
-<template></template>
+<template>
+  <el-button v-bind="$attrs" v-on="$listeners" @click="open">
+    {{ title }}
+    <el-dialog
+      :title="title"
+      :visible.sync="visible"
+      width="25%"
+      append-to-body
+      @close="hide"
+    >
+      <div slot="footer">
+        <el-button
+          :size="$attrs.size"
+          :loading="loading"
+          @click="visible = false"
+          >取 消</el-button
+        >
+        <el-button
+          type="primary"
+          :size="$attrs.size"
+          :loading="loading"
+          @click="submit(params, page)"
+          >确 认</el-button
+        >
+      </div>
+      <el-alert
+        title="是否确认导出所有数据项?"
+        type="info"
+        show-icon
+        :closable="false"
+      >
+      </el-alert>
+    </el-dialog>
+  </el-button>
+</template>

+ 40 - 115
src/views/purchase/contract/index.vue

@@ -13,11 +13,11 @@ export default {
     AddButton: () => import("./add/index.vue"),
     SeeButton: () => import("./see/index.vue"),
     EditButton: () => import("./edit/index.vue"),
-    ExportModel: () => import("./export/index.vue"),
-    DeleteModel: () => import("./delete/index.vue"),
-    TerminationModel: () => import("./termination/index.vue"),
-    PigeonholeModel: () => import("./pigeonhole/index.vue"),
-    SubmitModel: () => import("./submit/index.vue"),
+    DeleButton: () => import("./delete/index.vue"),
+    SubmButton: () => import("./submit/index.vue"),
+    TermButton: () => import("./termination/index.vue"),
+    PigeButton: () => import("./pigeonhole/index.vue"),
+    ExportButton: () => import("./export/index.vue"),
     ElSuperTable: () => import("@/components/super-table/index.vue"),
     ElSuperSearch: () => import("@/components/super-search/index.vue"),
   },
@@ -34,33 +34,7 @@ export default {
       page: { pageNum: 1, pageSize: 10, total: 0 },
     };
   },
-  computed: {
-    $power: {
-      get() {
-        const {
-          selectData,
-          selectData: [{ status, pigeonhole } = {}],
-        } = this;
-        const rule1 = selectData.length === 1;
-        const rule2 = selectData.length > 1;
-        const rule3 = status === "0" || status === "3";
-        const rule4 = status === "2";
-        const rule5 = pigeonhole === "Y";
-        return {
-          // 修 改
-          edit: rule1 && rule3,
-          // 删 除
-          delt: rule1 && rule3,
-          // 终 止
-          term: rule1 && rule4,
-          // 归 档
-          pige: rule1 && !rule5,
-          // 提 交
-          subm: rule1,
-        };
-      },
-    },
-  },
+  computed: {},
   created() {
     this.useQuery(this.params, this.page);
   },
@@ -107,117 +81,38 @@ export default {
     useSelect(prop) {
       this.selectData = prop;
     },
-    // 删 除
-    async useDelete(prop) {
-      const [{ id }] = prop;
-      const { open } = this.$refs.DeleteModel;
-      await open(id);
-    },
     // 明 细
     async useSee(prop) {
       const { id } = prop;
       const { open } = this.$refs.SeeButton;
       await open(id);
     },
-    // 终 止
-    async useTermination(prop) {
-      const [{ id }] = prop;
-      const { open } = this.$refs.TerminationModel;
-      await open(id);
-    },
     // 归 档
     async usePigeonhole(prop) {
+      const { open } = this.$refs.PigeButton;
       const [{ id }] = prop;
-      const { open } = this.$refs.PigeonholeModel;
       await open(id);
     },
     // 导 出
     async useExport(prop, page) {
       const { pageNum, pageSize } = page;
-      const { open } = this.$refs.ExportModel;
+      const { open } = this.$refs.ExportButton;
       await open({ ...prop, pageNum, pageSize });
     },
-    // 提交OA
-    async useSubmit(prop) {
-      const [{ id }] = prop;
-      const { open } = this.$refs.SubmitModel;
-      await open(id);
-    },
   },
 };
 </script>
 
 <template>
   <el-card v-loading="loading" :body-style="{ padding: 0 }">
-    <export-model ref="ExportModel"></export-model>
-    <!-- <import-model ref="ImportModel"></import-model> -->
-    <submit-model
-      ref="SubmitModel"
-      @success="useQuery(params, page)"
-    ></submit-model>
-    <delete-model
-      ref="DeleteModel"
-      @success="useQuery(params, page)"
-    ></delete-model>
-    <termination-model
-      ref="TerminationModel"
-      @success="useQuery(params, page)"
-    ></termination-model>
-    <pigeonhole-model
-      ref="PigeonholeModel"
-      @success="useQuery(params, page)"
-    ></pigeonhole-model>
     <el-super-search
       v-model="params"
       :size="size"
       :dict="dict"
       :columns="SearchColumns"
+      @reset="useReset"
       @submit="useQuery(params, page)"
     ></el-super-search>
-
-    <!-- <div style="padding: 0 20px; display: flex; justify-content: space-between">
-   
-        <el-button :size="size" @click="useExport(params, page)">
-          导 出
-        </el-button>
-        <el-button
-          v-show="$power.edit"
-          :size="size"
-          @click="useEdit(selectData)"
-        >
-          编 辑
-        </el-button>
-        <el-button
-          :size="size"
-          v-show="$power.subm"
-          @click="useSubmit(selectData)"
-        >
-          提交OA
-        </el-button>
-        <el-button
-          v-show="$power.delt"
-          :size="size"
-          @click="useDelete(selectData)"
-        >
-          删 除
-        </el-button>
-        <el-button
-          v-show="$power.term"
-          :size="size"
-          @click="useTermination(selectData)"
-        >
-          终 止
-        </el-button>
-        <el-button
-          v-show="$power.pige"
-          :size="size"
-          @click="usePigeonhole(selectData)"
-        >
-          归 档
-        </el-button>
-      </div>
-      <div></div>
-    </div> -->
     <div style="padding: 0 20px; text-align: right">
       <el-button-group style="margin: 0 10px 0 0">
         <add-button
@@ -232,12 +127,17 @@ export default {
           @success="useQuery(params, page)"
         ></add-button>
       </el-button-group>
-      <el-button-group>
+      <el-button-group style="margin: 0 10px 0 0">
         <edit-button
           :size="size"
           :select-data="selectData"
           @success="useQuery(params, page)"
         ></edit-button>
+        <dele-button
+          :size="size"
+          :select-data="selectData"
+          @success="useQuery(params, page)"
+        ></dele-button>
         <see-button
           v-show="false"
           :size="size"
@@ -245,6 +145,31 @@ export default {
           ref="SeeButton"
         ></see-button
       ></el-button-group>
+      <el-button-group style="margin: 0 10px 0 0">
+        <subm-button
+          :size="size"
+          :select-data="selectData"
+          @success="useQuery(params, page)"
+        ></subm-button>
+        <term-button
+          :size="size"
+          :select-data="selectData"
+          @success="useQuery(params, page)"
+        ></term-button>
+        <pige-button
+          :size="size"
+          :select-data="selectData"
+          @success="useQuery(params, page)"
+        ></pige-button>
+      </el-button-group>
+      <el-button-group>
+        <export-button
+          :size="size"
+          :page="page"
+          :data="params"
+          @success="useQuery(params, page)"
+        ></export-button>
+      </el-button-group>
     </div>
     <el-super-table
       v-model="tableData"

+ 58 - 43
src/views/purchase/contract/pigeonhole/index.vue

@@ -3,9 +3,14 @@ import { PIGEONHOLE } from "@/api/business/purchase/contract";
 
 export default {
   name: "DeleteDialog",
+  props: {
+    selectData: {
+      type: [Array],
+      require: true,
+    },
+  },
   data() {
     return {
-      size: "mini",
       title: "归 档",
       visible: false,
       loading: false,
@@ -13,8 +18,19 @@ export default {
     };
   },
   computed: {
-    root: function () {
-      return this.$parent.$parent;
+    disabled: {
+      get() {
+        if (this.selectData.length === 1) {
+          const [{ pigeonhole }] = this.selectData;
+          if (pigeonhole === "Y") {
+            return true;
+          }
+          return false;
+        } else {
+          return true;
+        }
+      },
+      set() {},
     },
   },
   watch: {},
@@ -57,50 +73,49 @@ export default {
 };
 </script>
 <template>
-  <el-dialog
-    width="25%"
-    :show-close="false"
-    :visible.sync="visible"
-    @close="hide"
+  <el-button
+    v-bind="$attrs"
+    v-on="$listeners"
+    :disabled="disabled"
+    @click="open"
   >
-    <div
-      slot="title"
-      style="display: flex; justify-content: space-between; align-items: center"
+    {{ title }}
+    <el-dialog
+      :title="title"
+      :visible.sync="visible"
+      width="25%"
+      append-to-body
+      @close="hide"
     >
-      <span>{{ title }}</span>
-      <span>
+      <div slot="footer">
         <el-button
-          :size="size"
-          :disabled="!params.pigeonholeFile || loading"
-          circle
-          icon="el-icon-check"
-          @click="submit(params)"
+          :size="$attrs.size"
+          :loading="loading"
+          @click="visible = false"
+          >取 消</el-button
         >
-        </el-button>
         <el-button
-          :size="size"
-          :disabled="loading"
-          circle
-          type="danger"
-          icon="el-icon-close"
-          @click="visible = false"
+          type="primary"
+          :size="$attrs.size"
+          :loading="loading"
+          @click="submit(selectData[0].id)"
+          >确 认</el-button
         >
-        </el-button>
-      </span>
-    </div>
-    <el-form
-      :size="size"
-      :model="params"
-      label-width="0px"
-      label-position="right"
-    >
-      <el-form-item prop="pigeonholeFile" label="">
-        <file-upload
-          v-model="params.pigeonholeFile"
-          :limit="1"
-          style="text-align: center"
-        ></file-upload>
-      </el-form-item>
-    </el-form>
-  </el-dialog>
+      </div>
+      <el-form
+        :size="$attrs.size"
+        :model="params"
+        label-width="0px"
+        label-position="right"
+      >
+        <el-form-item prop="pigeonholeFile" label="">
+          <file-upload
+            v-model="params.pigeonholeFile"
+            :limit="1"
+            style="text-align: center"
+          ></file-upload>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </el-button>
 </template>

+ 10 - 11
src/views/purchase/contract/see/index.vue

@@ -3,17 +3,6 @@ import useColumns from "./column";
 import { initParams } from "@/utils/init.js";
 import { ITEM } from "@/api/business/purchase/contract";
 
-const {
-  TabColumns,
-  FormColumns,
-  TabColumns: [
-    {
-      item: { key: tabName },
-    },
-  ],
-} = useColumns();
-const params = initParams([...TabColumns, ...FormColumns]);
-
 export default {
   name: "SeeDrawer",
   props: {
@@ -28,6 +17,16 @@ export default {
     ElComputedInputV2: () => import("@/components/computed-input-v2/index.vue"),
   },
   data() {
+    const {
+      TabColumns,
+      FormColumns,
+      TabColumns: [
+        {
+          item: { key: tabName },
+        },
+      ],
+    } = useColumns();
+    const params = initParams([...TabColumns, ...FormColumns]);
     return {
       column: 2,
       width: "50%",

+ 89 - 30
src/views/purchase/contract/submit/index.vue

@@ -2,40 +2,60 @@
 import { SUBMIT } from "@/api/business/purchase/contract";
 
 export default {
-  name: "DeleteDialog",
+  name: "SubmitDialog",
+  props: {
+    selectData: {
+      type: [Array],
+      require: true,
+    },
+  },
   data() {
-    return {};
+    return {
+      title: "提交OA",
+      visible: false,
+      loading: false,
+    };
+  },
+  computed: {
+    disabled: {
+      get() {
+        if (this.selectData.length === 1) {
+          return false;
+        } else {
+          return true;
+        }
+      },
+      set() {},
+    },
   },
-  computed: {},
   watch: {},
   methods: {
     //
-    open(prop) {
-      return new Promise((resolve, reject) => {
-        this.$confirm("是否提交数据项至OA系统?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "info",
-        })
-          .then(async () => {
-            try {
-              // try
-              const { msg, code } = await SUBMIT(prop);
-              if (code === 200) {
-                resolve(true);
-                this.$emit("success");
-                this.$notify.success(msg);
-              }
-            } catch (err) {
-              // catch
-              reject(false);
-              console.error(err);
-            } finally {
-              // finally
-            }
-          })
-          .catch(() => reject(false));
-      });
+    open() {
+      this.visible = true;
+    },
+    //
+    hide() {
+      this.visible = false;
+    },
+    //
+    async submit(prop) {
+      try {
+        // try
+        this.loading = true;
+        const { msg, code } = await SUBMIT(prop);
+        if (code === 200) {
+          this.hide();
+          this.$emit("success");
+          this.$notify.success(msg);
+        }
+      } catch (err) {
+        // catch
+        console.error(err);
+      } finally {
+        // finally
+        this.loading = false;
+      }
     },
   },
   created() {},
@@ -43,4 +63,43 @@ export default {
   destroyed() {},
 };
 </script>
-<template></template>
+<template>
+  <el-button
+    v-bind="$attrs"
+    v-on="$listeners"
+    :disabled="disabled"
+    @click="open"
+  >
+    {{ title }}
+    <el-dialog
+      :title="title"
+      :visible.sync="visible"
+      width="25%"
+      append-to-body
+      @close="hide"
+    >
+      <div slot="footer">
+        <el-button
+          :size="$attrs.size"
+          :loading="loading"
+          @click="visible = false"
+          >取 消</el-button
+        >
+        <el-button
+          type="primary"
+          :size="$attrs.size"
+          :loading="loading"
+          @click="submit(selectData[0].id)"
+          >确 认</el-button
+        >
+      </div>
+      <el-alert
+        title="是否提交数据项至OA系统?"
+        type="info"
+        show-icon
+        :closable="false"
+      >
+      </el-alert>
+    </el-dialog>
+  </el-button>
+</template>

+ 88 - 29
src/views/purchase/contract/termination/index.vue

@@ -3,39 +3,64 @@ import { TERMINATION } from "@/api/business/purchase/contract";
 
 export default {
   name: "TerminationDialog",
+  props: {
+    selectData: {
+      type: [Array],
+      require: true,
+    },
+  },
   data() {
-    return {};
+    return {
+      title: "终 止",
+      visible: false,
+      loading: false,
+    };
+  },
+  computed: {
+    disabled: {
+      get() {
+        if (this.selectData.length === 1) {
+          const [{ status }] = this.selectData;
+          if (status !== "2") {
+            return true;
+          } else {
+            return false;
+          }
+        } else {
+          return true;
+        }
+      },
+      set() {},
+    },
   },
-  computed: {},
   watch: {},
   methods: {
     //
-    open(prop) {
-      return new Promise((resolve, reject) => {
-        this.$confirm("是否终止数据项?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "info",
-        })
-          .then(async () => {
-            try {
-              // try
-              const { msg, code } = await TERMINATION({ id: prop });
-              if (code === 200) {
-                resolve(true);
-                this.$emit("success");
-                this.$notify.success(msg);
-              }
-            } catch (err) {
-              // catch
-              reject(false);
-              console.error(err);
-            } finally {
-              // finally
-            }
-          })
-          .catch(() => reject(false));
-      });
+    open() {
+      this.visible = true;
+    },
+    //
+    hide() {
+      this.visible = false;
+    },
+    //
+    async submit(prop) {
+      try {
+        // try
+        this.loading = true;
+        const { msg, code } = await TERMINATION({ id: prop });
+        if (code === 200) {
+          this.hide();
+          this.$emit("success");
+          this.$notify.success(msg);
+        }
+      } catch (err) {
+        // catch
+        console.error(err);
+      } finally {
+        // finally
+        this.loading = false;
+      }
     },
   },
   created() {},
@@ -43,4 +68,38 @@ export default {
   destroyed() {},
 };
 </script>
-<template></template>
+<template>
+  <el-button
+    v-bind="$attrs"
+    v-on="$listeners"
+    :disabled="disabled"
+    @click="open"
+  >
+    {{ title }}
+    <el-dialog
+      :title="title"
+      :visible.sync="visible"
+      width="25%"
+      append-to-body
+      @close="hide"
+    >
+      <div slot="footer">
+        <el-button
+          :size="$attrs.size"
+          :loading="loading"
+          @click="visible = false"
+          >取 消</el-button
+        >
+        <el-button
+          type="primary"
+          :size="$attrs.size"
+          :loading="loading"
+          @click="submit(selectData[0].id)"
+          >确 认</el-button
+        >
+      </div>
+      <el-alert title="是否终止数据项?" type="info" show-icon :closable="false">
+      </el-alert>
+    </el-dialog>
+  </el-button>
+</template>

+ 1 - 1
src/views/purchase/task/zhuan-pai/index.vue

@@ -62,7 +62,7 @@ export default {
       } catch (err) {
         // catch
       } finally {
-        // loading
+        // finally
         this.loading = false;
       }
     },