gaoluyang
2025-02-13 edc00525eeb2dd3a92b321e116ad97620adafee4
客户管理页面联调
已修改6个文件
已添加1个文件
448 ■■■■■ 文件已修改
src/api/system/customer.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/lims-table.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/customer/index.vue 370 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/data.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/role/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/customer.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
// æŸ¥è¯¢å®¢æˆ·åˆ—表
export function selectCustomPageList(query) {
  return request({
    url: '/system/user/selectCustomPageList',
    method: 'get',
    params: query
  })
}
// æ–°å¢žå®¢æˆ·
export function addCustom(query) {
  return request({
    url: '/system/user/addCustom',
    method: 'post',
    params: query
  })
}
// ä¿®æ”¹å®¢æˆ·
export function upCustom(query) {
  return request({
    url: '/system/user/upCustom',
    method: 'post',
    params: query
  })
}
// åˆ é™¤å®¢æˆ·
export function delCustomById(query) {
  return request({
    url: '/system/user/delCustomById',
    method: 'post',
    params: query
  })
}
src/components/Table/lims-table.vue
@@ -6,7 +6,7 @@
          v-loading="tableLoading"
          :border="border"
          :data="tableData"
          :header-cell-style="{ background: '#0e3372', color: '#cccccc' }"
          :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"
          :height="height"
          :highlight-current-row="highlightCurrentRow"
          :row-class-name="rowClassName"
@@ -105,8 +105,8 @@
      <pagination
      v-show="page.total>0"
      :total="page.total"
      :page.sync="page.pageNum"
      :limit.sync="page.pageSize"
      :page.sync="page.current"
      :limit.sync="page.size"
      @pagination="pagination"
    />
    </div>
@@ -223,7 +223,7 @@
      },
      border: {
        type: Boolean,
        default: true
        default: false
      },
      highlightCurrentRow: {
        type: Boolean,
@@ -263,12 +263,12 @@
        default: undefined
      },
      page:{
        type:object,
        type:Object,
        default() {
          return {
            total:0,
            pageNum:0,
            pageSize:10
            current:0,
            size:10
          };
        }
      }
@@ -303,4 +303,3 @@
    text-align: center
  }
  </style>
src/views/system/customer/index.vue
@@ -3,309 +3,177 @@
    <div class="search">
      <div>
        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
          <el-form-item label="状态" prop="state">
          <el-form-item label="客户名称" prop="company">
            <el-input size="small" placeholder="请输入" clearable v-model="queryParams.company"
                      @keyup.enter.native="refreshTable()"></el-input>
                      @keyup.enter.native="getList"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">查 è¯¢</el-button>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="getList">查 è¯¢</el-button>
            <el-button icon="el-icon-refresh" size="mini" @click="refresh">重 ç½®</el-button>
          </el-form-item>
        </el-form>
      </div>
      <div>
        <el-button size="small" type="primary" @click="addDia = true" v-if="addPower" icon="el-icon-plus">新增</el-button>
        <el-button size="small" type="primary" @click="openFormDia('add')" icon="el-icon-plus">新增</el-button>
      </div>
    </div>
<!--    <div class="table">-->
<!--      <ValueTable ref="ValueTable" :url="$api.user.selectCustomPageList" :delUrl="$api.user.delCustomById"-->
<!--                  :componentData="componentData" :key="upIndex" :upUrl="$api.user.upCustom"/>-->
<!--    </div>-->
    <el-dialog title="新增客户" :visible.sync="addDia" width="450px">
      <div style="margin-bottom: 15px;">
        <el-row style="line-height: 50px;">
          <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                        </span>客户名称:</el-col>
          <el-col :span="15">
    <div>
      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"></lims-table>
    </div>
    <el-dialog :title="formTitle" :visible.sync="addDia" width="450px">
      <el-form ref="userForm" :model="user" :rules="userRules" label-position="right" label-width="100px">
        <el-form-item label="客户名称" prop="company">
            <el-input v-model="user.company" size="small" clearable></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                        </span>客户单位EN:</el-col>
          <el-col :span="15">
        </el-form-item>
        <el-form-item label="客户单位EN" prop="companyEn">
            <el-input v-model="user.companyEn" size="small" clearable></el-input>
          </el-col>
        </el-row>
        <el-row style="margin-top: 15px;">
          <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                        </span>单位地址:</el-col>
          <el-col :span="15">
        </el-form-item>
        <el-form-item label="单位地址" prop="address">
            <el-input type="textarea" v-model="user.address" size="small" clearable
                      :autosize="{minRows: 2, maxRows: 4}"></el-input>
          </el-col>
        </el-row>
        <el-row style="margin-top: 15px;">
          <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                        </span>客户地址EN:</el-col>
          <el-col :span="15">
        </el-form-item>
        <el-form-item label="单位地址EN" prop="addressEn">
            <el-input type="textarea" v-model="user.addressEn" size="small" clearable
                      :autosize="{minRows: 2, maxRows: 4}"></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                </span>加急额度:</el-col>
          <el-col :span="15">
            <el-input v-model="user.num" size="small" clearable></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="7" style="text-align: right;padding-right: 8px;">单位电话:</el-col>
          <el-col :span="15">
        </el-form-item>
        <el-form-item label="单位电话" prop="phone">
            <el-input v-model="user.phone" size="small" clearable></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="7" style="text-align: right;padding-right: 8px;">工厂域:</el-col>
          <el-col :span="15">
            <el-input v-model="user.code" size="small" clearable></el-input>
          </el-col>
        </el-row>
        <el-row style="line-height: 50px;">
          <el-col :span="7" style="text-align: right;padding-right: 8px;"><span class="required-span">*
                </span>客户编号:</el-col>
          <el-col :span="15">
        </el-form-item>
        <el-form-item label="加急额度" prop="num">
          <el-input v-model="user.num" size="small" clearable></el-input>
        </el-form-item>
        <el-form-item label="客户编号" prop="code2">
            <el-input v-model="user.code2" size="small" clearable></el-input>
          </el-col>
        </el-row>
      </div>
        </el-form-item>
        <el-form-item label="工厂域" prop="code">
          <el-input v-model="user.code" size="small" clearable></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
                <el-button @click="addDia = false">取 æ¶ˆ</el-button>
                <el-button @click="reset">取 æ¶ˆ</el-button>
                <el-button type="primary" @click="customAdd" :loading="loading">ç¡® å®š</el-button>
            </span>
    </el-dialog>
    <el-dialog title="选择用户" :visible.sync="selectUserDia" width="70%">
      <div class="search" style="height: 35px; margin-bottom: 9px;">
        <div class="search_thing">
          <div class="search_label">用户名:</div>
          <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                              v-model="componentData2.entity.name" @keyup.enter.native="$refs.ValueTable2.selectList()"></el-input></div>
        </div>
      </div>
<!--      <div class="body" style="height: 60vh;" v-if="selectUserDia">-->
<!--        <ValueTable ref="ValueTable2" :url="$api.user.selectUserList" :componentData="componentData2" />-->
<!--      </div>-->
      <span slot="footer" class="dialog-footer">
                <el-button @click="selectUserDia = false">取 æ¶ˆ</el-button>
                <el-button type="primary" @click="selectUser">ç¡® å®š</el-button>
            </span>
    </el-dialog>
  </div>
</template>
<script>
import ValueTable from '@/components/Table/value-table.vue'
import limsTable from '@/components/Table/lims-table.vue'
import {addCustom, selectCustomPageList, upCustom} from "@/api/system/customer";
export default {
  components: {
    ValueTable
    limsTable
  },
  data() {
    return {
      queryParams: {
        company: ''
      },
      componentData: {
        entity: {
          company: null,
          orderBy: {
            field: 'id',
            order: 'asc'
      tableData: [],
      column: [
        {label: '客户名称', prop: 'company'},
        {label: '客户单位EN', prop: 'companyEn'},
        {label: '单位地址', prop: 'address'},
        {label: '单位地址EN', prop: 'addressEn'},
        {label: '单位电话', prop: 'phone'},
        {label: '加急额度', prop: 'num'},
        {label: '客户编号', prop: 'code2'},
        {label: '工厂域', prop: 'code'},
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          operation: [
            {
              name: '编辑',
              type: 'text',
              clickFun: (row) => {
                this.openFormDia('edit', row);
              },
            },
          ]
          }
      ],
      page: {
        total:0,
        size:10,
        current:0
        },
        isIndex: true,
        showSelect: false,
        select: false,
        do: [{
          font: '委托记录',
          type: 'text',
          method: 'entrust'
        }, {
          font: '协议记录',
          type: 'text',
          method: 'protocol'
        },{
          id: 'update',
          font: '编辑',
          type: 'text',
          method: 'doDiy',
          field:[]
        },{
          id: 'delete',
          font: '删除',
          type: 'text',
          method: 'doDiy'
        }],
        tagField: {
          state: {
            select: [{
              value: 1,
              type: 'success',
              label: '启用'
            }, {
              value: 0,
              type: 'danger',
              label: '停用'
            }]
          }
        },
        selectField: {
          state: {
            select: [{
              value: 1,
              type: 'success',
              label: '启用'
            }, {
              value: 0,
              type: 'danger',
              label: '停用'
            }]
          }
        },
        requiredAdd: [],
        requiredUp: ['company','address','code2','companyEn','addressEn','num']
      },
      entityCopy: {},
      upIndex: 0,
      tableLoading: false,
      // ç¼–辑客户弹框
      operationType: '',
      formTitle: '',
      addDia: false,
      addPower: true,
      user: {
        name: null
      },
      selectUserDia: false,
      userRules: {
        company: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
        companyEn: [{ required: true, message: '请输入客户名称EN', trigger: 'blur' }],
        address: [{ required: true, message: '请输入单位地址', trigger: 'blur' }],
        addressEn: [{ required: true, message: '请输单位地址EN', trigger: 'blur' }],
        num: [{ required: true, message: '请输入加急额度', trigger: 'blur' }],
        code2: [{ required: true, message: '请输入客户编号', trigger: 'blur' }],
      },
      loading: false,
      componentData2: {
        entity: {
          isCustom: 0,
          orderBy: {
            field: 'id',
            order: 'asc'
          }
        },
        isIndex: true,
        showSelect: true,
        select: false,
        do: [],
        tagField: {
          state: {
            select: [{
              value: 1,
              type: 'success',
              label: '启用'
            }, {
              value: 0,
              type: 'danger',
              label: '停用'
            }]
          }
        },
        selectField: {},
        needSort: ['company'],
      }
      //
    }
  },
  mounted() {
    this.entityCopy = this.HaveJson(this.componentData.entity)
    this.getPower()
    this.getList()
  },
  methods: {
    refreshTable() {
      this.$refs['ValueTable'].selectList()
    },
    refresh() {
      this.componentData.entity = this.HaveJson(this.entityCopy)
      this.upIndex++
    },
    customAdd() {
      if (this.user.company == '' || this.user.company == null) {
        this.$message.error('请填写客户单位')
        return
    // æŸ¥è¯¢å®¢æˆ·åˆ—表
    getList() {
      this.tableLoading = true
      selectCustomPageList({...this.queryParams, ...this.page}).then(res => {
        this.tableLoading = false
        if (res.code === 200) {
          this.tableData = res.data
          this.page.total = res.total
      }
      if (this.user.address == '' || this.user.address == null) {
        this.$message.error('请填写单位地址')
        return
      }
      if (this.user.companyEn == '' || this.user.companyEn == null) {
        this.$message.error('请填写英文客户单位')
        return
      }
      if (this.user.addressEn == '' || this.user.addressEn == null) {
        this.$message.error('请填写英文单位地址')
        return
      }
      if (this.user.code2 == '' || this.user.code2 == null) {
        this.$message.error('请填写客户编号')
        return
      }
      if (this.user.code2 == '' || this.user.code2 == null) {
        this.$message.error('请填写加急额度')
        return
      }
      this.loading = true
      this.$axios.post(this.$api.user.addCustom, this.user, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
        if (res.code == 201) return
        this.$message.success('添加成功')
        this.refreshTable()
        this.loading = false
        this.addDia = false
      }).catch(err => {
        this.tableLoading = false
      })
    },
    // æƒé™åˆ†é…
    getPower() {
      let power = JSON.parse(sessionStorage.getItem('power'))
      let up = false
      let del = false
      let add = false
      for (var i = 0; i < power.length; i++) {
        if (power[i].menuMethod == 'delCustomById') {
          del = true
        }
        if (power[i].menuMethod == 'addCustom') {
          add = true
        }
        if (power[i].menuMethod == 'upCustom') {
          up = true
        }
      }
      if (!del) {
        this.componentData.do.splice(3, 1)
      }
      if (!up) {
        this.componentData.do.splice(2, 1)
      }
      this.addPower = add
    // é‡ç½®table
    refresh() {
      this.queryParams.company = ''
      this.getList()
    },
    entrust(data) {
    openFormDia (type, row) {
      this.addDia = true
      this.formTitle = type === 'add' ? '新增客户' : '编辑客户'
      this.operationType = type
    },
    protocol(data) {
    },
    selectUser() {
      let selects = this.$refs.ValueTable2.multipleSelection
      if (selects.length == 0) {
        this.$message.error('未选择数据')
        return
    customAdd() {
      this.$refs['userForm'].validate((valid) => {
        if (valid) {
          this.loading = true
          if (this.operationType === 'add') {
            addCustom(this.user).then(res => {
              if (res.code === 201) return
              this.$message.success('新增成功')
              this.getList()
              this.loading = false
              this.reset()
            })
          } else {
            upCustom(this.user).then(res => {
              if (res.code === 201) return
              this.$message.success('修改成功')
              this.getList()
              this.loading = false
              this.reset()
            })
      }
      delete selects['orderBy']
      delete selects['updateUser']
      delete selects['updateTime']
      this.user = selects
      this.selectUserDia = false
        }
      })
    },
    reset () {
      this.addDia = false
      this.resetForm("userForm");
    }
  }
}
@@ -313,7 +181,7 @@
<style scoped>
.search {
  height: 80px;
  height: 46px;
  display: flex;
  justify-content: space-between;
}
src/views/system/dict/data.vue
@@ -182,8 +182,8 @@
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
      </div>
    </el-dialog>
  </div>
src/views/system/dict/index.vue
@@ -180,8 +180,8 @@
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
      </div>
    </el-dialog>
  </div>
src/views/system/role/index.vue
@@ -170,8 +170,8 @@
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm" v-if="title !== '查看角色'">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitForm" v-if="title !== '查看角色'">ç¡® å®š</el-button>
      </div>
    </el-dialog>
@@ -212,8 +212,8 @@
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitDataScope">ç¡® å®š</el-button>
        <el-button @click="cancelDataScope">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitDataScope">ç¡® å®š</el-button>
      </div>
    </el-dialog>
  </div>
src/views/system/user/index.vue
@@ -3,10 +3,10 @@
    <el-row :gutter="20">
      <splitpanes :horizontal="this.$store.getters.device === 'mobile'" class="default-theme">
        <!--部门数据-->
        <pane size="16">
        <pane size="12">
          <el-col>
            <div class="head-container addButton">
              <el-input v-model="deptName" placeholder="请输入部门名称" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px" />
              <el-input v-model="deptName" placeholder="部门名称" clearable size="small" prefix-icon="el-icon-search" style="margin-bottom: 20px" />
              <el-button style="margin-left: 4px" type="primary" plain icon="el-icon-plus" size="mini" circle @click="addSchema"></el-button>
            </div>
            <div class="head-container">
@@ -15,15 +15,15 @@
          </el-col>
        </pane>
        <!--用户数据-->
        <pane size="84">
        <pane size="88">
          <div class="search_form">
            <div>
              <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
              <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
                <el-form-item label="用户名称" prop="nickName">
                  <el-input v-model="queryParams.nickName" placeholder="请输入用户名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
                  <el-input v-model="queryParams.nickName" placeholder="请输入用户名称" clearable @keyup.enter.native="handleQuery" />
                </el-form-item>
                <el-form-item label="状态" prop="status">
                  <el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px">
                  <el-select v-model="queryParams.status" placeholder="用户状态" clearable>
                    <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
                  </el-select>
                </el-form-item>
@@ -167,8 +167,8 @@
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
      </div>
    </el-dialog>
@@ -186,8 +186,8 @@
        </div>
      </el-upload>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitFileForm">ç¡® å®š</el-button>
        <el-button @click="upload.open = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitFileForm">ç¡® å®š</el-button>
      </div>
    </el-dialog>
@@ -231,8 +231,8 @@
        </el-row>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="addUser2" :loading="addLoad">ç¡® å®š</el-button>
        <el-button @click="addthirdParty = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="addUser2" :loading="addLoad">ç¡® å®š</el-button>
      </div>
    </el-dialog>
    <el-dialog title="架构新增" :visible.sync="addDia" width="400px">
@@ -666,7 +666,6 @@
      getUser().then(response => {
        this.roleOptions = response.roles;
        this.title = "添加用户";
        this.form.password = this.initPassword;
      });
    },
    /** ä¿®æ”¹æŒ‰é’®æ“ä½œ */
@@ -682,7 +681,6 @@
        this.$set(this.form, "roleIds", response.roleIds);
        this.open = true;
        this.title = "修改用户";
        this.form.password = "";
      });
    },
    /** é‡ç½®å¯†ç æŒ‰é’®æ“ä½œ */