Bladeren bron

feature:打卡增加合作伙伴类型

liuzl 2 jaren geleden
bovenliggende
commit
70ae88385a
3 gewijzigde bestanden met toevoegingen van 328 en 3 verwijderingen
  1. 133 0
      components/SelectPartners.vue
  2. 134 0
      components/SelectPartnersConcat.vue
  3. 61 3
      pages/home/checkIn.vue

+ 133 - 0
components/SelectPartners.vue

@@ -0,0 +1,133 @@
+<!--
+ * @Author: liuzhenlin 461480418@qq.ocm
+ * @Date: 2023-02-15 10:34:49
+ * @LastEditors: liuzhenlin
+ * @LastEditTime: 2023-02-23 10:57:44
+ * @Description: file content
+ * @FilePath: \oms\components\SelectCustomer.vue
+-->
+<template>
+  <view>
+    <u-popup :show="selectVisible" @close="close">
+      <view class="select-header">
+        <view class="tit">选择合作伙伴</view>
+        <view class="save-btn" @click="close()">保存</view>
+      </view>
+      <!-- <view class="search-container">
+        <view class="search-input">
+          <u-input
+            clearable
+            placeholderStyle="font-size:26rpx"
+            :customStyle="{ height: '66rpx' }"
+            v-model="queryForm.custName"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #909399"
+            placeholder="请输入客户名称"
+            shape="circle"
+            @input="getUserList()"
+            border="surround"></u-input>
+        </view>
+      </view> -->
+      <u-empty mode="list" v-if="userList.length == 0"></u-empty>
+      <view class="concat-list" v-else>
+        <u-radio-group v-model="userValue" placement="column">
+          <view class="radio-item" v-for="item in userList" :key="item.id">
+            <u-radio :label="item.label" :name="item.id" @change="radioChange"></u-radio>
+          </view>
+        </u-radio-group>
+      </view>
+    </u-popup>
+  </view>
+</template>
+
+<script>
+  import partnerApi from '@/api/partner'
+  import to from 'await-to-js'
+  export default {
+    name: 'OmsCustomerContact',
+    props: {
+      queryParams: {
+        type: Object,
+        default() {
+          return {}
+        },
+      },
+    },
+    data() {
+      return {
+        selectVisible: false,
+        userList: [],
+        queryForm: {
+          pageNum: 1,
+          pageSize: 999,
+        },
+        // u-radio-group的v-model绑定的值如果设置为某个radio的name,就会被默认选中
+        userValue: null,
+        selected: null,
+      }
+    },
+
+    methods: {
+      async getUserList() {
+        let params = Object.assign(this.queryForm, this.queryParams)
+        const [err, res] = await to(partnerApi.getCompanyList(params))
+        if (err) return
+        if (res.code == 200) {
+          if (res.data.list && res.data.list.length > 0) {
+            this.userList = res.data.list.map((item) => ({
+              id: item.id,
+              label: item.partnerName,
+              name: item.partnerName,
+            }))
+          } else {
+            this.userList = []
+          }
+        }
+      },
+      open() {
+        this.selectVisible = true
+        this.getUserList()
+      },
+      close() {
+        this.selectVisible = false
+        this.$emit('close', this.selected)
+      },
+      radioChange(n) {
+        this.selected = this.userList.find((item) => item.id == n)
+      },
+    },
+  }
+</script>
+
+<style lang="scss" scoped>
+  .search-container {
+    padding: 30rpx 30rpx 0 30rpx;
+    display: flex;
+    align-items: center;
+    .search-input {
+      flex: 1;
+    }
+    .search-btn {
+      text-align: center;
+      line-height: 60rpx;
+      border-radius: 12rpx;
+      width: 100rpx;
+      height: 60rpx;
+      font-size: 26rpx;
+      margin: 0 0 0 12rpx;
+      background: $u-primary;
+      color: #ffffff;
+    }
+  }
+  .concat-list {
+    padding: 0 0 20rpx 0;
+    width: 100%;
+    height: 900rpx;
+    overflow: auto;
+    margin-top: 20rpx;
+    .radio-item {
+      padding: 20rpx 30rpx;
+      border-bottom: 1px solid #ccc;
+    }
+  }
+</style>

+ 134 - 0
components/SelectPartnersConcat.vue

@@ -0,0 +1,134 @@
+<!--
+ * @Author: liuzhenlin 461480418@qq.ocm
+ * @Date: 2023-02-15 10:34:49
+ * @LastEditors: liuzhenlin
+ * @LastEditTime: 2023-08-01 16:27:11
+ * @Description: file content
+ * @FilePath: \oms\components\SelectPartnersConcat.vue
+-->
+<template>
+  <view>
+    <u-popup :show="selectVisible" @close="close">
+      <view class="select-header">
+        <view class="tit">选择合作伙伴联系人</view>
+        <view class="save-btn" @click="close()">保存</view>
+      </view>
+      <view class="search-container">
+        <view class="search-input">
+          <u-input
+            clearable
+            placeholderStyle="font-size:26rpx"
+            :customStyle="{ height: '66rpx' }"
+            v-model="queryForm.name"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #909399"
+            placeholder="请输入客户名称"
+            shape="circle"
+            @input="getUserList()"
+            border="surround"></u-input>
+        </view>
+      </view>
+      <u-empty mode="list" v-if="userList.length == 0"></u-empty>
+      <view class="concat-list" v-else>
+        <u-radio-group v-model="userValue" placement="column">
+          <view class="radio-item" v-for="item in userList" :key="item.id">
+            <u-radio :label="item.label" :name="item.id" @change="radioChange"></u-radio>
+          </view>
+        </u-radio-group>
+      </view>
+    </u-popup>
+  </view>
+</template>
+
+<script>
+  import partnerApi from '@/api/partner'
+  import to from 'await-to-js'
+  export default {
+    name: 'OmsCustomerContact',
+    props: {
+      queryParams: {
+        type: Object,
+        default() {
+          return {}
+        },
+      },
+    },
+    data() {
+      return {
+        selectVisible: false,
+        userList: [],
+        queryForm: {
+          name: '',
+          pageNum: 1,
+          pageSize: 999,
+        },
+        // u-radio-group的v-model绑定的值如果设置为某个radio的name,就会被默认选中
+        userValue: null,
+        selected: null,
+      }
+    },
+
+    methods: {
+      async getUserList() {
+        let params = Object.assign(this.queryForm, this.queryParams)
+        const [err, res] = await to(partnerApi.getCompanyConcatList(params))
+        if (err) return
+        if (res.code == 200) {
+          if (res.data.list && res.data.list.length > 0) {
+            this.userList = res.data.list.map((item) => ({
+              id: item.id,
+              label: item.name,
+              name: item.name,
+            }))
+          } else {
+            this.userList = []
+          }
+        }
+      },
+      open() {
+        this.selectVisible = true
+        this.getUserList()
+      },
+      close() {
+        this.selectVisible = false
+        this.$emit('close', this.selected)
+      },
+      radioChange(n) {
+        this.selected = this.userList.find((item) => item.id == n)
+      },
+    },
+  }
+</script>
+
+<style lang="scss" scoped>
+  .search-container {
+    padding: 30rpx 30rpx 0 30rpx;
+    display: flex;
+    align-items: center;
+    .search-input {
+      flex: 1;
+    }
+    .search-btn {
+      text-align: center;
+      line-height: 60rpx;
+      border-radius: 12rpx;
+      width: 100rpx;
+      height: 60rpx;
+      font-size: 26rpx;
+      margin: 0 0 0 12rpx;
+      background: $u-primary;
+      color: #ffffff;
+    }
+  }
+  .concat-list {
+    padding: 0 0 20rpx 0;
+    width: 100%;
+    height: 900rpx;
+    overflow: auto;
+    margin-top: 20rpx;
+    .radio-item {
+      padding: 20rpx 30rpx;
+      border-bottom: 1px solid #ccc;
+    }
+  }
+</style>

+ 61 - 3
pages/home/checkIn.vue

@@ -49,11 +49,11 @@
             @click="openSelectUser()">
             <view class="form-label flex_l">
               <view class="label-tag"></view>
-              {{ form.punchType == 20 ? '客户' : form.punchType == 30 ? '经销商' : '代理商' }}
+              {{ selectLable(form.punchType) }}
             </view>
             <u-input
               :readonly="true"
-              :placeholder="`请选择${form.punchType == 20 ? '客户' : form.punchType == 30 ? '经销商' : '代理商'}`"
+              :placeholder="`请选择${selectLable(form.punchType)}`"
               v-model="form.targetName"
               border="none"
               suffixIcon="arrow-down"
@@ -61,6 +61,28 @@
               clearable
               customStyle="padding: 0 30rpx 0 12rpx"></u-input>
           </u-form-item>
+          <!-- 合作伙伴联系人 -->
+          <u-form-item
+            prop="partnerContactName"
+            borderBottom
+            customStyle="padding:40rpx 0 30rpx"
+            v-if="form.punchType == 50 && form.targetId"
+            @click="openPartnersConcat()">
+            <view class="form-label flex_l">
+              <view class="label-tag"></view>
+              合作伙伴联系人
+            </view>
+            <u-input
+              :readonly="true"
+              placeholder="请选择合作伙伴联系人"
+              v-model="form.partnerContactName"
+              border="none"
+              suffixIcon="arrow-down"
+              suffixIconStyle="color:#CDCDCD"
+              clearable
+              customStyle="padding: 0 30rpx 0 12rpx"></u-input>
+          </u-form-item>
+          <!-- END -->
         </u-form>
       </view>
       <view class="main-container">
@@ -96,6 +118,12 @@
     <select-dealer ref="dealer" :distrId="form.punchType" dist @close="closeDealer($event)"></select-dealer>
     <!-- 选择客户 -->
     <select-customer ref="cust" @close="closeCust($event)"></select-customer>
+    <!-- 选择合作伙伴 -->
+    <select-partners ref="partners" @close="closePartners($event)"></select-partners>
+    <select-partners-concat
+      ref="partnersConcat"
+      :queryParams="{ partnerId: form.targetId }"
+      @close="closePartnersConcat($event)"></select-partners-concat>
     <u-notify ref="uNotify"></u-notify>
   </view>
 </template>
@@ -106,10 +134,14 @@
   import api from '@/api/system'
   import SelectDealer from 'components/SelectDealer'
   import SelectCustomer from 'components/SelectCustomer'
+  import SelectPartners from 'components/SelectPartners'
+  import SelectPartnersConcat from 'components/SelectPartnersConcat'
   export default {
     components: {
       SelectDealer,
       SelectCustomer,
+      SelectPartners,
+      SelectPartnersConcat,
     },
     data() {
       return {
@@ -126,6 +158,8 @@
           punchLng: 0,
           punchLocation: '',
           punchImg: '',
+          partnerContactId: null,
+          partnerContactName: null,
         },
         show: false,
         imageValue: [],
@@ -150,6 +184,7 @@
             value: '经销商',
           },
           { key: '40', value: '代理商' },
+          { key: '50', value: '合作伙伴' },
         ],
         rules: {
           punchVal: [
@@ -185,6 +220,12 @@
       },
     },
     methods: {
+      selectLable(type) {
+        if (type) {
+          const findItem = this.checkTypeColumns.find((item) => item.key == type)
+          return findItem.value
+        }
+      },
       // 选择打卡类型
       pickCheckType(e) {
         this.form.punchType = e.value[0].key
@@ -205,13 +246,30 @@
           this.form.targetName = user.name
         }
       },
+      closePartners(partners) {
+        if (partners) {
+          this.form.targetId = partners.id
+          this.form.targetName = partners.name
+        }
+      },
+      closePartnersConcat(concat) {
+        if (concat) {
+          this.form.partnerContactId = concat.id
+          this.form.partnerContactName = concat.name
+        }
+      },
       openSelectUser() {
         if (this.form.punchType == '20') {
           this.$refs.cust.open()
-        } else {
+        } else if (this.form.punchType == '30' || this.form.punchType == '40') {
           this.$refs.dealer.open()
+        } else if (this.form.punchType == '50') {
+          this.$refs.partners.open()
         }
       },
+      openPartnersConcat() {
+        this.$refs.partnersConcat.open()
+      },
       getLocation() {
         this.show = true
         const _this = this