Browse Source

修改品名下拉 库区统一赋值

Qukatie 1 month ago
parent
commit
c4b174d21f

+ 20 - 0
src/api/dicSelect/index.js

@@ -0,0 +1,20 @@
+import request from '@/utils/request'
+
+
+//获取公共下拉数据接口
+export function getDicinit(method, url, data) {
+    if (method == 'get' || method == 'GET') {
+        return request({
+            url:url,
+            method: method,
+            params: data
+        })
+    } else {
+        return request({
+            url:url,
+            method: method,
+            data: data
+        })
+    }
+
+}

+ 370 - 0
src/combination/dicSelect/main.vue

@@ -0,0 +1,370 @@
+<template>
+  <!-- 中文下拉 -->
+  <div>
+    <div style="display: flex">
+      <el-select
+        ref="mySelect"
+        style="width: 100%"
+        v-model="value"
+        @input="inputChange"
+        :placeholder="'请选择 ' + placeholder"
+        @change="selectChange"
+        @clear="clear"
+        :clearable="clearable"
+        :multiple="multiple"
+        :filterable="filterable"
+        :remote="remote"
+        :remote-method="remoteMethod"
+        :loading="loading"
+        :size="size"
+        :disabled="disabled"
+        :collapse-tags="collapseTags"
+        @visible-change="visibleChange"
+        :allow-create="allowCreate"
+      >
+        <el-option
+          v-for="(item, index) in options"
+          :label="item[label]"
+          :value="item[keyValue ? keyValue : label]"
+          :disabled="item.disabled"
+        >
+          <span v-if="slotRight" style="float: left">{{ item[label] }}</span>
+          <span
+            v-if="slotRight"
+            style="
+              float: right;
+              color: #8492a6;
+              font-size: 13px;
+              max-width: 200px;
+              white-space: nowrap;
+              overflow: hidden;
+              text-overflow: ellipsis;
+            "
+            >{{ item[rightLabel] }}</span
+          >
+          <span
+            v-if="diySlot"
+            style="
+              float: left;
+              white-space: nowrap;
+              overflow: hidden;
+              text-overflow: ellipsis;
+            "
+            :style="{ 'max-width': selectWidth - 30 + 'px' }"
+            >{{ item[label] }}</span
+          >
+        </el-option>
+      </el-select>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getDicinit } from "@/api/dicSelect/index";
+export default {
+  data() {
+    return {
+      options: [],
+      loading: false,
+      data: {},
+      form: {},
+      query: {},
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+      },
+      dataList: [],
+      selectionList: [],
+      selectWidth: 0,
+    };
+  },
+  props: {
+    activateCreated: {
+      type: Boolean,
+      default: true,
+    },
+    slotRight: {
+      type: Boolean,
+      default: false,
+    },
+    diySlot: {
+      type: Boolean,
+      default: false,
+    },
+    label: {
+      type: String,
+      default: "",
+    },
+    rightLabel: {
+      type: String,
+      default: "",
+    },
+    keyValue: {
+      type: [String, Number],
+      default: null,
+    },
+    res: {
+      type: String,
+      default: "",
+    },
+    placeholder: {
+      type: String,
+      default: "请输入",
+    },
+    clearable: {
+      type: Boolean,
+      default: true,
+    },
+    value: {
+      type: [String, Number],
+      default: "",
+    },
+    method: {
+      type: String,
+      default: "GET",
+    },
+    url: {
+      type: String,
+      default: "",
+    },
+    dataName: {
+      type: String,
+      default: "",
+    },
+    multiple: {
+      type: Boolean,
+      default: false,
+    },
+    filterable: {
+      type: Boolean,
+      default: false,
+    },
+    remote: {
+      type: Boolean,
+      default: false,
+    },
+    size: {
+      type: String,
+      default: "small",
+    },
+    disabled: {
+      type: Boolean,
+      default: false,
+    },
+    searchShow: {
+      type: Boolean,
+      default: false,
+    },
+    treeShow: {
+      type: Boolean,
+      default: false,
+    },
+    mockData: {
+      type: Array,
+      default: function () {
+        return [];
+      },
+    },
+    collapseTags: {
+      type: Boolean,
+      default: false,
+    },
+    default: {
+      type: Boolean,
+      default: false,
+    },
+    defaultValue: {
+      type: String,
+      default: "",
+    },
+    disabledLabel: {
+      type: String,
+      default: "",
+    },
+    dataType: {
+      type: String,
+      default: "",
+    },
+    multipleStrings: {
+      type: Boolean,
+      default: false,
+    },
+    allowCreate: {
+      type: Boolean,
+      default: false,
+    },
+    initData: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  model: {
+    prop: "value",
+    event: "selectedValue",
+  },
+  created() {},
+  mounted() {
+    if (this.activateCreated) {
+      if (this.initData) {
+        this.getDicData();
+      }
+    } else {
+      this.options = this.mockData;
+    }
+    if (this.diySlot) {
+      this.$nextTick(() => {
+        this.selectWidth = this.$refs.mySelect.$el.offsetWidth;
+        this.$refs.mySelect.$el.querySelector(
+          ".el-select-dropdown"
+        ).style.width = `${this.selectWidth}px`;
+      });
+    }
+  },
+  watch: {
+    value: {
+      handler(val, oldVal) {
+        if (this.dataType == "string") {
+          if (val) {
+            if (typeof val == "string") {
+              this.value = val.split(",");
+            }
+          } else {
+            this.value = [];
+          }
+        }
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  methods: {
+    /**
+     * @param {any} status
+     */
+    visibleChange(status) {
+      if (status) {
+        if (this.options.length == 0) {
+          this.data = {};
+          this.getDicData();
+        }
+        this.$emit("visibleChange");
+      }
+    },
+    inputChange() {
+      if (this.dataType == "string") {
+        if (this.value && this.value.length) {
+          this.$emit("selectedValue", this.value.join(","));
+        } else {
+          this.$emit("selectedValue", null);
+        }
+      } else {
+        this.$emit("selectedValue", this.value);
+      }
+    },
+    /**
+     * @param {string} query
+     */
+    remoteMethod(query) {
+      if (query !== "") {
+        setTimeout(() => {
+          this.data[this.dataName] = query;
+          this.getDicData();
+        }, 200);
+      } else {
+        setTimeout(() => {
+          this.data = this.$options.data().data;
+          this.getDicData();
+        }, 200);
+      }
+    },
+    getDicData() {
+      if (this.url) {
+        this.loading = true;
+        this.data.pageNum = 1;
+        this.data.pageSize = 10;
+        getDicinit(this.method, this.url, this.data)
+          .then((res) => {
+            console.log(res, 11111111);
+            if (this.res) {
+              res.rows.forEach((e) => {
+                if (
+                  this.disabledLabel
+                    .split(",")
+                    .some((item) => item == e[this.label])
+                ) {
+                  e.disabled = true;
+                }
+              });
+              this.options = res.rows;
+            } else {
+              res.rows.forEach((e) => {
+                if (
+                  this.disabledLabel
+                    .split(",")
+                    .some((item) => item == e[this.label])
+                ) {
+                  e.disabled = true;
+                }
+              });
+              this.options = res.rows;
+            }
+          })
+          .finally(() => {
+            this.loading = false;
+          });
+      } else {
+        this.options = this.mockData;
+      }
+    },
+    /**
+     * @param {any} data
+     */
+    IdGetDicData(data) {
+      this.loading = true;
+      getDicinit(this.method, this.url, data)
+        .then((res) => {
+          if (this.res) {
+            this.options = res.rows;
+          } else {
+            this.options = res.rows;
+          }
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    /**
+     * @param {any[]} row
+     */
+    selectChange(row) {
+      console.log(row);
+      this.options.forEach((e) => {
+        if (this.keyValue) {
+          if (row == e[this.keyValue]) {
+            this.$emit("selectChange", e);
+          }
+        }
+        if (this.label) {
+          if (row == e[this.label]) {
+            this.$emit("selectChange", e);
+          }
+        }
+      });
+    },
+    clear() {
+      if (this.url) {
+        this.data = this.$options.data().data;
+        this.getDicData();
+      }
+      this.$emit("selectChange", null);
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-col-md-8 {
+  width: 24.33333%;
+}
+</style>

+ 37 - 21
src/combination/listComponent.vue

@@ -143,7 +143,12 @@
               >
             </span>
             <span v-if="item.operation == 2">
-              <el-button type="text" @click="rowEdit(scope)" :disabled="item.disabled">{{scope.row.editStatus?'保存':'修改'}}</el-button>
+              <!-- <el-button
+                type="text"
+                @click="rowEdit(scope)"
+                :disabled="item.disabled"
+                >{{ scope.row.editStatus ? "保存" : "修改" }}</el-button
+              > -->
               <el-button
                 type="text"
                 @click="deleteRow(scope.$index, tableData)"
@@ -154,10 +159,11 @@
           </span>
           <span v-else-if="item.changeable && listData">
             <el-select
-              v-if="item.changeable == 1 && scope.row.editStatus"
+              v-if="item.changeable == 1"
               filterable
-              @change="change(scope)"
+              @change="change(scope,item.label)"
               v-model="scope.row[item.label]"
+              :disabled="item.disabled"
               slot="prepend"
               placeholder="请选择"
             >
@@ -168,22 +174,18 @@
                 :value="item.value"
               ></el-option>
             </el-select>
-            <span v-if="item.changeable == 1 && !scope.row.editStatus">{{
-              scope.row[item.label] | idToName(listData[item.label])
-            }}</span>
             <el-input
-              v-if="item.changeable == 2 && scope.row.editStatus"
+              v-if="item.changeable == 2"
               @input="totalAmount(scope, item)"
               v-model="scope.row[item.label]"
+              :disabled="item.disabled"
               placeholder="请输入内容"
               :onkeyup="item.onabort"
             ></el-input>
-            <span v-if="item.changeable == 2 && !scope.row.editStatus">{{
-              scope.row[item.label]
-            }}</span>
             <el-date-picker
-              v-if="item.changeable == 3 && scope.row.editStatus"
+              v-if="item.changeable == 3"
               v-model="scope.row[item.label]"
+              :disabled="item.disabled"
               type="date"
               style="width: 100%"
               placeholder="选择日期"
@@ -191,14 +193,20 @@
               value-format="yyyy-MM-dd"
             >
             </el-date-picker>
-            <span v-if="item.changeable == 3 && !scope.row.editStatus">{{
-              scope.row[item.label]
-            }}</span>
+            <dic-select
+              v-if="item.changeable == 4"
+              v-model="scope.row[item.label]"
+              :label="item.resName"
+              @selectChange="
+                dicChange($event, scope.row, item.keyName, item.resId)
+              "
+              :disabled="item.disabled"
+              :url="item.url"
+              :filterable="true"
+              :remote="true"
+              :dataName="item.resName"
+            ></dic-select>
           </span>
-          <!-- <span v-else-if="item.label == 'projectName' && CRKTJ"
-            style="color: #409EFF;cursor: pointer"
-            @click.stop="jump(scope.row)">{{ scope.row[item.label] }}</span> -->
-          <!-- <span v-if="item.disabled">{{ scope.row[item.label] }}</span> -->
           <span v-else>{{ scope.row[item.label] }}</span>
         </template>
       </el-table-column>
@@ -264,9 +272,10 @@ import { addSet, resetModule } from "@/api/system/set";
 import Cookies from "js-cookie";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
+import dicSelect from "./dicSelect/main.vue";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 export default {
-  components: { Treeselect },
+  components: { Treeselect, dicSelect },
   name: "listComponent",
   props: [
     "tableData",
@@ -307,9 +316,16 @@ export default {
     },
   },
   methods: {
+    dicChange(el, row, key, id) {
+      row[key] = el[id];
+      if (el.fFeeunitid) {
+        row.fFeeunitid = el.fFeeunitid;
+        row.fCurrencyName = el.fCurrency;
+      }
+    },
     //下拉数据变动时触发
-    change(scope) {
-      this.$emit("change", scope);
+    change(scope,name) {
+      this.$emit("change", scope,name);
     },
     //输入框数据变动时触发
     totalAmount(scope, item) {

+ 7 - 3
src/views/purchaseIssue/index.vue

@@ -737,13 +737,17 @@ export default {
         },
         {
           surface: "2",
-          label: "fFeeid",
+          label: "fFeeName",
+          keyName: "fFeeid",
           name: "品名",
           checked: 0,
-          width: 100,
+          width: 200,
           onabort: "",
           disabled: false,
-          changeable: 1,
+          resId: "fId",
+          resName: "fName",
+          url: "/basicdata/fees/list",
+          changeable: 4,
         },
         {
           surface: "3",

+ 7 - 3
src/views/purchaseRequest/index.vue

@@ -457,13 +457,17 @@ export default {
         },
         {
           surface: "2",
-          label: "fFeeid",
+          label: "fFeeName",
+          keyName:'fFeeid',
           name: "品名",
           checked: 0,
-          width: 100,
+          width: 200,
           onabort: "",
           disabled: false,
-          changeable: 1,
+           resId:'fId',
+          resName:'fName',
+          url:'/basicdata/fees/list',
+          changeable: 4,
         },
         {
           surface: "3",

+ 7 - 4
src/views/warehouse/allocation/index.vue

@@ -938,14 +938,17 @@ export default {
         },
         {
           surface: "2",
-          label: "fFeeid",
+          label: "fFeeName",
+          keyName: "fFeeid",
           name: "品名",
           checked: 0,
-          width: 100,
+          width: 200,
           onabort: "",
           disabled: false,
-          //changeable: 1 下拉 2 input 3 date
-          changeable: 1,
+          resId: "fId",
+          resName: "fName",
+          url: "/basicdata/fees/list",
+          changeable: 4,
         },
         {
           surface: "3",

+ 12 - 5
src/views/warehouse/inStock/index.vue

@@ -760,13 +760,17 @@ export default {
         },
         {
           surface: "2",
-          label: "fFeeid",
-          name: "*品名",
+          label: "fFeeName",
+          keyName: "fFeeid",
+          name: "品名",
           checked: 0,
           width: 200,
-          changeable: 1,
-          data: [],
+          onabort: "",
           disabled: false,
+          resId: "fId",
+          resName: "fName",
+          url: "/basicdata/fees/list",
+          changeable: 4,
         },
         {
           surface: "3",
@@ -1424,8 +1428,11 @@ export default {
   methods: {
     //返回列表
     goBack() {},
-    change(scope) {
+    change(scope, name) {
       for (let item in this.detailData) {
+        if (name == "fWarehouseid") {
+          this.detailData[item].fWarehouseid = scope.row.fWarehouseid;
+        }
         for (let li in this.listData.fFeeid) {
           if (this.detailData[item].fFeeid == this.listData.fFeeid[li].value) {
             this.$set(

+ 13 - 5
src/views/warehouse/outStock/index.vue

@@ -549,12 +549,17 @@ export default {
         },
         {
           surface: "2",
-          label: "fFeeid",
-          name: "*品名",
+          label: "fFeeName",
+          keyName: "fFeeid",
+          name: "品名",
           checked: 0,
           width: 200,
-          changeable: 1,
-          data: [],
+          onabort: "",
+          disabled: false,
+          resId: "fId",
+          resName: "fName",
+          url: "/basicdata/fees/list",
+          changeable: 4,
         },
         {
           surface: "6",
@@ -1190,8 +1195,11 @@ export default {
   methods: {
     //返回列表
     goBack() {},
-    change(scope) {
+    change(scope,name) {
       for (let item in this.detailData) {
+        if (name == "fWarehouseid") {
+          this.detailData[item].fWarehouseid = scope.row.fWarehouseid;
+        }
         for (let li in this.listData.fFeeid) {
           if (this.detailData[item].fFeeid == this.listData.fFeeid[li].value) {
             this.$set(