YangJian0701 1 year ago
parent
commit
90d89dd323

+ 30 - 0
src/api/mypercentage/index.ts

@@ -0,0 +1,30 @@
+import $http from '../index'
+
+// 提成管理-列表
+export const percentage_UserList = (params: any) => $http.post('/storage/Percentage/User_List', params)
+// 员工-列表
+export const percentage_User_List = (params: any) => $http.post('/storage/Percentage/User/List', params)
+
+
+export const Verifyltem_List = (params: any) => $http.post('/storage/VerifyItem/List', params)
+export const VerifyContract_List = (params: any) => $http.post('/storage/VerifyContract/List', params)
+
+
+// 员工-详情
+export const percentage_Get = (params: any) => $http.post('/storage/Percentage/Get', params)
+// 员工-删除
+export const percentage_Del = (params: any) => $http.post('/storage/Percentage/Del', params)
+
+// 员工-审核
+export const percentage_Approval = (params: any) => $http.post('/storage/Percentage/Approval', params)
+
+// 员工-明细
+export const percentage_Remit = (params: any) => $http.post('/storage/Percentage/Remit', params)
+
+
+// 员工-修改
+export const percentage_Edit = (params: any) => $http.post('/storage/Percentage/Edit', params)
+
+
+// 员工-修改
+export const percentage_Add = (params: any) => $http.post('/storage/Percentage/Add', params)

+ 18 - 2
src/hooks/useTablePublic.ts

@@ -48,7 +48,16 @@ export interface ContractFormType {
   T_submit_name?: string
   T_remit:any
 }
-
+export interface MyPercentageFormType {
+  T_id: string
+  T_number: string
+  T_type: any 
+  T_item: any
+  T_money:string
+  T_uuid?: string
+  T_submit?: string
+  T_product?:any
+}
 
 export interface royaltyType {
   T_name: string
@@ -84,7 +93,14 @@ export const columns = [
   { label: '*已出库数量', prop: 'T_product_out', align: 'center ', name: 'T_product_out' },
   { prop: 'operation', label: '操作', width: 80, fixed: 'right' }
 ]
-
+export const Mycolumns = [
+  { type: 'index', label: '序号', width: 80, align: 'center ' },
+  { label: '项目', prop: 'T_name', align: 'center '},
+  { label: '*数量', prop: 'T_num', align: 'center ', name: 'T_num', width: 120 },
+  { label: '单价', prop: 'T_price', align: 'center '},
+  { label: '总价', prop: 'T_priceNum', align: 'center ', name: 'T_priceNum' },
+  { prop: 'operation', label: '操作', width: 80, fixed: 'right' }
+]
 /**
  * 提成明细
  */

+ 2 - 2
src/views/Login.vue

@@ -14,8 +14,8 @@ const router = useRouter()
 const globalStore = GlobalStore()
 const ruleFormRef = ref<FormInstance>()
 const ruleForm = reactive<InLogin>({
-  username: '',
-  password: ''
+  username: 'admin',
+  password: '12345678'
 })
 
 const validatePass = (rule: any, value: any, callback: any) => {

+ 190 - 0
src/views/storehouse/inventory/MyPercentageFormStorage.vue

@@ -0,0 +1,190 @@
+<script setup lang="ts">
+import {
+  Verifyltem_List
+} from '@/api/mypercentage/index'
+import { ElMessage } from 'element-plus'
+import { GlobalStore } from '@/stores/index'
+import Drawer from '@/components/Drawer/index.vue'
+import { ref, reactive, onMounted, nextTick } from 'vue'
+import { default as vElTableInfiniteScroll } from 'el-table-infinite-scroll'
+import ImageCom from '@/components/Image/index.vue'
+
+let total = 0
+const selectTable = ref()
+const globalStore = GlobalStore()
+const tableProductData = ref<any[]>([])
+const drawerProductRef = ref<InstanceType<typeof Drawer> | null>(null)
+
+const initParam = reactive({
+  User_tokey: globalStore.GET_User_tokey,
+  page: 1,
+  page_z: 20,
+  T_type:1
+})
+const callbackProductDrawer = (done: () => void) => done()
+// 搜索模型
+const searchModelHandle = () => {
+  total = 0
+  initParam.page = 1
+  tableProductData.value = []
+  getProductList()
+}
+
+// 保存选中的数据id,row-key就是要指定一个key标识这一行的数据
+const getRowKey = (row: any) => {
+  return row.Id
+}
+
+// 加载第二个抽屉数据
+const load = () => {
+  if (initParam.page && total === tableProductData.value.length) {
+    ElMessage.warning('没有更多数据了!!')
+    return
+  }
+  initParam.page++
+  getProductList()
+}
+// 勾选产品
+const ProductselectionChange = (selection: any[], row: any) => emit('ontableData', row)
+
+
+
+//函数
+const selectFun = async (val:any)=>{
+  console.log('选中',val,)
+}
+const ProductSelectionAllChange = (selection: any[]) => emit('ontableDataAll', selection)
+// 获取产品的列表
+const getProductList = async () => {
+  const res: any = await Verifyltem_List(initParam)
+  tableProductData.value.push(...res.Data.Data)
+  total = res.Data.Num
+  if (selectProductData.value?.length) {
+    // 设置产品的选中
+    tableProductData.value.forEach((row: any) => {
+      const matchedIndex = selectProductData.value?.findIndex((item: any) => item.Id == row.Id)
+      selectTable.value?.toggleRowSelection(row, matchedIndex != -1)
+    })
+  }
+}
+
+const productColumns = [
+  { type: 'selection', width: 80 },
+  { prop: 'T_img', label: '产品图片', name: 'T_img' },
+  { prop: 'T_name', label: '产品名称' },
+  { prop: 'T_class_name', label: '产品分类' },
+  { prop: 'T_model', label: '产品型号', ellipsis: true },
+  { prop: 'T_spec', label: '产品规格' },
+  { prop: 'T_relation_sn', label: '关联SN', name: 'T_relation_sn' },
+  { prop: 'T_remark', label: '备注', ellipsis: true }
+]
+
+const openDrawer = () => drawerProductRef.value?.openDrawer()
+const clearSelection = () => {
+  initParam.page = 1
+  tableProductData.value = []
+  selectTable.value?.clearSelection()
+}
+const selectTableChange = (row: any) => {
+  nextTick(() => {
+    selectTable.value?.toggleRowSelection(row, false)
+  })
+}
+
+// props
+const props = defineProps<{ selectProductData?: any[] }>()
+const selectProductData = ref(props.selectProductData)
+const emit = defineEmits<{ (event: 'ontableData', value: any): void; (event: 'ontableDataAll', value: any[]): void }>()
+defineExpose({
+  openDrawer,
+  clearSelection,
+  selectTableChange,
+  searchModelHandle,
+  getProductList,
+  initParam,
+  tableProductData,
+  selectTable,
+})
+</script>
+
+<template>
+  <Drawer ref="drawerProductRef" :handleClose="callbackProductDrawer" size="70%">
+    <template #header="{ params }">
+      <h4 :id="params.titleId" :class="params.titleClass">选择</h4>
+    </template>
+    <el-card class="box-card" shadow="never">
+      <el-table
+        @selection-change="selectFun"
+        ref="selectTable"
+        :row-key="getRowKey"
+        :data="tableProductData"
+        style="width: 100%; height: 99%"
+        :header-cell-style="{
+          background: '#dedfe0',
+          height: '50px'
+        }"
+        v-el-table-infinite-scroll="load"
+        :infinite-scroll-immediate="false"
+        infinite-scroll-distance="'50px'"
+        @select="ProductselectionChange"
+        @select-all="ProductSelectionAllChange"
+      >
+        <template v-for="item in productColumns" :key="item">
+          <el-table-column v-if="item.type === 'index' || item.type === 'selection'" align="center" v-bind="item" />
+          <el-table-column v-if="!item.ellipsis && item.prop" v-bind="item">
+            <template #default="{ row }">
+              <span v-if="item.prop === 'T_relation_sn'">
+                <el-tag v-if="row.T_relation_sn === 1" effect="dark">是</el-tag>
+                <el-tag v-else type="success" effect="dark">否</el-tag>
+              </span>
+              <ImageCom v-if="item.prop === 'T_img'" :src="row.T_img" />
+            </template>
+          </el-table-column>
+          <el-table-column v-if="item.ellipsis && item.prop === 'T_model'" align="center" v-bind="item">
+            <template #default="{ row }">
+              <el-tooltip effect="dark" :content="row.T_model" placement="bottom">
+                {{ row.T_model }}
+              </el-tooltip>
+            </template>
+          </el-table-column>
+          <el-table-column v-if="item.ellipsis && item.prop === 'T_remark'" align="center" v-bind="item">
+            <template #default="{ row }">
+              <el-tooltip effect="customized" placement="left">
+                <template #content>
+                  <div class="tooltip-content">{{ row.T_remark }}</div>
+                </template>
+                {{ row.T_remark }}
+              </el-tooltip>
+            </template>
+          </el-table-column>
+        </template>
+      </el-table>
+    </el-card>
+  </Drawer>
+</template>
+
+<style scoped lang="scss">
+.tooltip-content {
+  max-width: 500px;
+  overflow-y: auto;
+}
+.box-card {
+  height: 100%;
+  :deep(.el-card__body) {
+    height: calc(100% - 70px);
+  }
+  .sn-header {
+    display: flex;
+    justify-content: end;
+  }
+  .input-suffix {
+    width: 100%;
+    .inline-flex {
+      white-space: nowrap;
+    }
+    .d-flex {
+      display: flex;
+    }
+  }
+}
+</style>

+ 150 - 0
src/views/storehouse/sales/MyPercentage.vue

@@ -0,0 +1,150 @@
+<script setup lang="ts">
+import { ref, reactive, defineAsyncComponent } from 'vue'
+import { useRouter } from 'vue-router'
+import { fnMd5 } from '@/utils/common'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import TableBase from '@/components/TableBase/index.vue'
+import {Finished, View,Edit,Delete } from '@element-plus/icons-vue'
+import type { ColumnProps } from '@/components/TableBase/interface/index'
+import {percentage_UserList,percentage_Del } from '@/api/mypercentage/index'
+import { useTablePublic, options1} from '@/hooks/useTablePublic'
+const { updateOnTableList } = useTablePublic()
+const router = useRouter()
+const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
+const { globalStore, searchOnTableList  } = useTablePublic()
+
+const columns: ColumnProps[] = [
+  { type: 'index', label: '序号', width: 80 },
+  { prop: 'T_number', label: '合同编号' },
+  { prop: 'T_customer', label: '客户名称' },
+  { prop: 'T_contract_money', label: '合同总金额' },
+  { prop: 'T_recoveries_money', label: '回款金额' },
+  { prop: 'T_type', label: '提成类型', name: 'T_type' },
+  { prop: 'T_uuid_name', label: '提成人员' },
+  { prop: 'T_money', label: '提成金额' },
+  { prop: 'T_State', label: '状态', name: 'T_State' },
+  { prop: 'T_send_money', label: '已发提成金额' },
+  { prop: 'operation', label: '操作', width: 260, fixed: 'right' }
+]
+
+const processContract = (id: string,titles:string) => {
+  router.push({ name: 'PercentageDetail', params: { id, type: fnMd5('contract'),titles:titles}})
+}
+
+const initParam = reactive({
+  User_tokey: globalStore.GET_User_tokey,
+  T_name: '',
+  T_state: '',
+})
+const MyPercentageFormRef = ref<InstanceType<typeof MyPercentageForm> | null>(null)
+const openContractFormDrawer = (type: string, row?: any) => {
+  MyPercentageFormRef.value?.VerifyltemApi()
+  MyPercentageFormRef.value?.openDrawer(type, row)
+}
+const MyPercentageForm = defineAsyncComponent({
+  loader: () => import(/*webpackChunkName: 'ContractForm'*/ './MyPercentageForm.vue'),
+  delay: 500,
+  timeout: 3000,
+  suspensible: true
+})
+//函数
+const processdel =  (id:any)=>{
+  ElMessageBox.confirm('删除操作,是否继续?','删除',{
+      confirmButtonText: '立即删除',
+      cancelButtonText: 'Cancel',
+      type: 'warning',
+      center: true,
+    }
+  ).then(async() => {
+    const reslut:any = await percentage_Del({T_id:id})
+    console.log('删除',reslut)
+    if(reslut.Code==200 && reslut.Msg=='ok!'){
+      searchOnTableList(TableRef.value)
+      ElMessage.success('删除成功!')
+    }
+    }).catch(() => {
+      ElMessage.info('取消删除')
+    })
+}
+</script>
+
+<template>
+  <div class="contract">
+    <TableBase ref="TableRef" :columns="columns" :requestApi="percentage_UserList" :initParam="initParam">
+      <template #table-header>
+        <div class="input-suffix">
+          <el-row :gutter="20" style="margin-bottom: 0">
+            <el-col :xl="5" :md="6">
+              <span class="inline-flex items-center">合同编号:</span>
+              <el-input v-model="initParam.T_name" type="text" class="w-50 m-2" placeholder="按合同编号搜索" clearable
+                @change="searchOnTableList(TableRef)" />
+            </el-col>
+            <el-col :xl="5" :md="6">
+              <span class="inline-flex items-center">状态:</span>
+              <el-select v-model="initParam.T_state" class="w-50" clearable placeholder="请选择状态~">
+                <el-option v-for="item in options1" :key="item.id" :label="item.name" :value="item.id" />
+              </el-select>
+            </el-col>
+            <el-col :xl="6" :md="2" class="btn"> 
+              <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
+              <el-button type="success" @click="openContractFormDrawer('new')">申请提成</el-button>
+            </el-col>
+            </el-row>
+        </div>
+      </template>
+      <template #T_type="{ row }">
+        <el-tag v-if="row.T_type === 1" type="success" effect="dark"> 验证实施 </el-tag>
+        <el-tag v-if="row.T_type === 2" type="" effect="dark"> 报告编写 </el-tag>
+      </template>
+      <template #T_State="{ row }">
+        <el-tag v-if="row.T_State === 1" type="info" effect="dark"> 待审核 </el-tag>
+        <el-tag v-if="row.T_State === 2" type="success" effect="dark"> 审核通过 </el-tag>
+        <el-tag v-if="row.T_State === 3" type="danger" effect="dark"> 审核不通过 </el-tag>
+        <el-tag v-if="row.T_State === 4" type="info" effect="dark"> 部分打款 </el-tag>
+        <el-tag v-if="row.T_State === 5" type="" effect="dark"> 全部打款 </el-tag>
+      </template>
+      <template #T_out="{ row }">
+        <el-tag v-if="row.T_out === 2 || row.T_out === 3" type="success" effect="dark">
+          {{ row.T_out === 2 ? '部分出库' : '已出库' }}
+        </el-tag>
+        <el-tag v-else-if="row.T_out === 1" type="warning" effect="dark"> 未出库 </el-tag>
+        <el-tag v-else type="danger" effect="dark"> --- </el-tag>
+      </template>
+      <template #right="{ row }"> 
+        <el-button link type="primary" size="small" :disabled="![1,3].includes(row.T_State)" :icon="Edit" @click="openContractFormDrawer('edit', row)">编辑</el-button>
+        <el-button link type="success" size="small"  :icon="View" @click="processContract(row.Id,'详情')">详情</el-button>
+        <el-button link type="danger" size="small" :disabled="![1,3].includes(row.T_State)"  :icon="Delete" @click="processdel(row.Id)">删除</el-button>
+      </template>
+    </TableBase>
+    <MyPercentageForm ref="MyPercentageFormRef" @onTableList="updateOnTableList(TableRef)" />
+  </div>
+</template>
+
+<style scoped lang="scss">
+@import '@/styles/var.scss';
+
+.contract {
+  @include f-direction;
+
+  :deep(.el-drawer__header) {
+    margin-bottom: 0;
+  }
+
+  .input-suffix {
+    width: 100%;
+
+    .inline-flex {
+      white-space: nowrap;
+    }
+
+    .btn {
+      display: flex;
+      justify-content: end;
+    }
+
+    .w-50 {
+      width: 12.5rem;
+    }
+  }
+}
+</style>

+ 358 - 0
src/views/storehouse/sales/MyPercentageForm.vue

@@ -0,0 +1,358 @@
+<script setup lang="ts">
+import {
+  Mycolumns,
+  MyPercentageFormType,
+  useTablePublic,
+} from '@/hooks/useTablePublic'
+import {
+  percentage_Get,
+  percentage_Edit,
+  percentage_Add,
+  VerifyContract_List
+} from '@/api/mypercentage/index'
+
+
+import { ElMessage } from 'element-plus'
+import TableDetail from './TableDetail.vue'
+import { ref, reactive, nextTick,onMounted } from 'vue'
+import Drawer from '@/components/Drawer/index.vue'
+import { Delete } from '@element-plus/icons-vue'
+import Upload from '@/components/Upload/index.vue'
+import type { FormInstance, FormRules } from 'element-plus'
+import ContractUser from '@/views/storehouse/outStock/receiveUser.vue'
+import MyPercentageFormStorage from '@/views/storehouse/inventory/MyPercentageFormStorage.vue'
+
+const isNew = ref(true)
+const isProduct = ref(false)
+const tableData = ref<any[]>([])
+let selectProductData: any[] = []
+const formLabelWidth = ref('120px')
+const { resetForm, globalStore, validate_T_product } = useTablePublic()
+const ruleFormRef = ref<FormInstance>()
+const contractNumberLoading = ref(false)
+const User_tokey = globalStore.GET_User_tokey
+const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
+const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
+const receiveUserdialog = ref<InstanceType<typeof ContractUser> | null>(null)
+const RecoveriesRef = ref<InstanceType<typeof TableDetail> | null>(null)
+const InvoiceRef = ref<InstanceType<typeof TableDetail> | null>(null)
+
+const rules = reactive<FormRules>({
+  T_number: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
+  T_customer: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
+  T_type: [{ required: true, message: '请选择合同类型', trigger: 'blur' }],
+  T_product: [{ validator: validate_T_product, message: '必填项', trigger: 'blur' }],
+  T_money: [{ required: true, message: '请输入合同金额', trigger: 'blur' }],
+  T_discount: [{ required: true, message: '请输入优惠金额', trigger: 'blur' }],
+
+  T_date: [{ required: true, message: '请选择签订时间', trigger: 'blur' }],
+  T_submit: [{ required: true, message: '请选择合同负责人', trigger: 'change' }],
+  T_submit_name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }]
+})
+
+const callbackDrawer = (done: () => void) => {
+  closeCancle()
+  done()
+}
+
+// 父级方法
+const emit = defineEmits<{ (event: 'onTableList'): void }>()
+
+const form = reactive<MyPercentageFormType>({
+  T_id: '',
+  T_uuid: '',
+  T_submit: '',
+  T_type: 1,
+  T_number: '',
+  T_money: '',
+  T_item: '',
+  T_product:null
+})
+
+const openDrawer = (type: string, row?: any) => {
+  console.log('传值', type, row)
+  if(row){form.T_id = row.Id}
+  isNew.value = type === 'new' ? true : false //true新增申请   false编辑
+  if (!isNew.value) {//编辑调接口渲染
+    nextTick(() => {
+      editDataEcho(row)
+    })
+  }
+  drawerRef.value?.openDrawer()
+}
+
+// edit data echo
+const editDataEcho = async (row: any) => {
+  console.log('编辑赋值', row)
+  form.T_uuid = row.T_uuid
+  form.T_type = row.T_type
+  form.T_number = row.T_number
+  form.T_money = row.T_money
+  form.T_number = row.T_number
+  form.T_submit = row.T_uuid_name
+
+  const res: any = await percentage_Get({ User_tokey, T_id: row.Id })
+  console.log('请求返回', res)
+  if (res.Code === 200) {
+    const { T_Product, T_invoice, T_recoveries, T_item } = res.Data
+    T_item && (tableData.value = T_item.map((item: any) => {
+      item.count = item.T_num
+      return item
+    }))
+    selectProductData = tableData.value
+    T_invoice && InvoiceRef.value?.setMoneyDeatil(T_invoice)
+    T_recoveries && RecoveriesRef.value?.setMoneyDeatil(T_recoveries)
+    blurHandle()
+  }
+}
+
+const blurHandle = () => {
+  form.T_product = tableData.value.map(item => {
+    if (!item.count) return undefined
+    return `${item.Id},${item.count}|`
+  })
+}
+const deleteProduct = (row: any) => {
+  tableData.value = tableData.value.filter(item => item.Id !== row.Id)
+
+  // 设置产品的选中
+  drawerProductRef.value?.selectTableChange(row)
+}
+
+const getFomrParams = () => {
+  const params = {...form}
+  params.T_item = params?.T_product.join('')
+  delete params.T_product
+  delete params.T_submit
+  return params
+}
+
+const AddContract = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.validate(async valid => {
+    if (valid) {
+      let res: any = {}
+      const params = getFomrParams()
+      if (isNew.value) {
+        res = await percentage_Add(params)
+      } else {
+        res = await percentage_Edit(params)
+      }
+      if (res.Code === 200) {
+        ElMessage.success(`${isNew.value ? '添加' : '修改'}成功!!`)
+        nextTick(() => {
+          closeCancle()
+          emit('onTableList')
+        })
+      }
+    } else false
+  })
+}
+
+const drawerProductRef = ref<InstanceType<typeof MyPercentageFormStorage> | null>(null)
+/**
+ * 添加产品
+ */
+const AddProductionDetailed = () => {
+  // selectTable.value.toggleRowSelection(tableProductData.value.find(item => {return 1 == item.Id;}), true )
+
+  isProduct.value = true
+  nextTick(() => {
+    drawerProductRef!.value!.initParam!.T_type = form.T_type || undefined
+    drawerProductRef.value?.searchModelHandle()
+    drawerProductRef.value?.openDrawer()
+    console.log('添加',tableData.value,drawerProductRef.value)
+    tableData.value.forEach((row:any)=>{
+      drawerProductRef.value!.selectTable.value.toggleRowSelection(
+        drawerProductRef!.value!.tableProductData.find((item:any) => {return row.Id == item.Id;}), true )
+    })
+  })
+}
+/**
+ * 产品选择 是否
+ */
+const ProductselectionChange = (row: any) => {
+  const index = tableData.value.findIndex((item: any) => item.Id === row.Id)
+  if (index === -1) {
+    row.count = ''
+    tableData.value.push(row)
+  } else {
+    tableData.value.splice(index, 1)
+  }
+}
+/**
+ * 全选
+ */
+const ProductSelectionAllChange = (selection: any[]) => (tableData.value = selection)
+/**
+ * 生成合同编号
+ */
+const getContractNumber = async () => {
+  contractNumberLoading.value = true
+}
+/**
+ * 合同负责人
+ */
+const selectApprover = () => receiveUserdialog.value?.openDrawer()
+const getReceiveInfo = ({ T_uuid, T_name }: { T_uuid: string; T_name: string }) => {
+  console.log('123', T_uuid, T_name)
+  form.T_submit = T_name
+  form.T_uuid = T_uuid
+}
+const closeCancle = () => {
+  resetForm(ruleFormRef.value)
+  isNew.value = isProduct.value = false
+  tableData.value = []
+  selectProductData = []
+  drawerProductRef.value?.clearSelection()
+  RecoveriesRef.value?.clearDetail()
+  InvoiceRef.value?.clearDetail()
+  drawerRef.value?.closeDrawer()
+}
+
+const loading = ref(false)
+interface ListItem {
+    value: string
+    label: string
+}
+const list = ref<ListItem[]>([])
+const options = ref<ListItem[]>([])
+const click2 = async ()=>{options.value = list.value }
+//函数
+const VerifyltemApi = async ()=>{
+  const result:any = await VerifyContract_List({})
+  console.log('返回',result)
+  let arr = result.Data.Data || []
+  list.value = arr.map((item:any) => {
+      return { value: item.T_number, label: item.T_number}
+  })
+}
+const remoteMethod = async(query: string) => {
+    if (query) {
+        loading.value = true
+        setTimeout(() => {
+            loading.value = false
+            options.value =  list.value.filter((item:any) => {
+                return item.label.toLowerCase().includes(query.toLowerCase())
+            })
+        }, 200)
+    } else {
+        options.value = []
+    }
+}
+defineExpose({
+  openDrawer,
+  VerifyltemApi
+})
+</script>
+
+<template>
+  <div class="contract-form">
+    <Drawer ref="drawerRef" :handleClose="callbackDrawer" size="80%">
+      <template #header="{ params }">
+        <h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '申请' : '编辑' }} - 提成</h4>
+      </template>
+      <el-form ref="ruleFormRef" :model="form" :rules="rules">
+        <el-form-item label="合同编号:" :label-width="formLabelWidth" prop="T_number">
+          <div>
+            <el-select v-model="form.T_number" class="w-50" filterable remote reserve-keyword placeholder="请输入合同编号"
+                :remote-method="remoteMethod" :loading="loading" @click="click2" clearable style="width: 200px;">
+                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
+            <el-button :loading="contractNumberLoading" type="primary" @click="getContractNumber" style="margin-left: 10px;">查看合同详情</el-button>
+          </div>
+        </el-form-item>
+        <el-form-item label="提成类型:" :label-width="formLabelWidth" prop="T_type">
+          <el-radio-group v-model="form.T_type">
+            <el-radio :label="1">实施提成</el-radio>
+            <el-radio :label="2">报告提成</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="验证产品明细:" :label-width="formLabelWidth" prop="T_product">
+          <el-table border stripe :data="tableData" style="width: 100%"
+            :header-cell-style="{ background: '#dedfe0', height: '50px' }">
+            <template v-for="item in Mycolumns" :key="item.prop">
+              <el-table-column v-bind="item" v-if="item.fixed !== 'right'">
+                <template #header v-if="item.prop === 'T_num'">
+                  <span style="color: red">*数量</span>
+                </template>
+                <template #default="{ row }" v-if="item.prop === item.name">
+                  <el-input v-if="item.prop === 'T_num'" v-model.number="row.count" type="text" autocomplete="off"
+                    @blur="blurHandle" />
+                  <div v-if="item.prop === 'T_priceNum'">{{ Number(row.count) * Number(row.T_price) }}</div>
+                </template>
+              </el-table-column>
+              <el-table-column v-bind="item" v-if="item.fixed === 'right'">
+                <template #default="{ row }">
+                  <el-button link type="danger" size="small" :icon="Delete" @click="deleteProduct(row)">删除</el-button>
+                </template>
+              </el-table-column>
+            </template>
+            <template #append>
+              <el-button type="primary" @click="AddProductionDetailed">
+                <el-icon>
+                  <Plus />
+                </el-icon><span style="margin-left: 6px">添加验证</span>
+              </el-button>
+            </template>
+          </el-table>
+        </el-form-item>
+
+        <el-form-item label="合同金额:" :label-width="formLabelWidth" prop="T_money">
+          <el-input v-model="form.T_money" type="text" autocomplete="off" placeholder="请输入合同金额" class="w-50" />
+        </el-form-item>
+        <el-form-item label="合同负责人:" :label-width="formLabelWidth" prop="T_submit">
+          <el-input v-model="form.T_submit" placeholder="请选择合同负责人" class="w-50" @focus="selectApprover" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div>
+          <el-divider border-style="dashed" />
+          <div class="btn">
+            <el-button @click="closeCancle">取消</el-button>
+            <el-button v-if="isNew" color="#626aef" @click="AddContract(ruleFormRef)">提交</el-button>
+            <el-button v-else color="#626aef" @click="AddContract(ruleFormRef)">修改</el-button>
+          </div>
+        </div>
+      </template>
+    </Drawer>
+    <ContractUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" title="合同负责人" />
+    <MyPercentageFormStorage v-if="isProduct" ref="drawerProductRef" :selectProductData="selectProductData"
+      @ontableData="ProductselectionChange" @ontableDataAll="ProductSelectionAllChange"></MyPercentageFormStorage>
+  </div>
+</template>
+
+<style scoped lang="scss">
+.contract-form {
+  :deep(.el-table--border .el-table__cell) {
+    border-right: 0;
+  }
+
+  :deep(.table-header),
+  :deep(.card) {
+    border: 0;
+  }
+
+  .box-card {
+    height: 100%;
+
+    :deep(.el-card__body) {
+      height: calc(100% - 70px);
+    }
+  }
+
+  .btn {
+    margin-top: 32px;
+    display: flex;
+    justify-content: center;
+
+    .el-button {
+      padding: 0 32px;
+    }
+  }
+
+  .w-50 {
+    width: 21.5rem;
+  }
+}
+</style>

+ 0 - 1
src/views/storehouse/sales/Percentage.vue

@@ -133,7 +133,6 @@ const ContractForm = defineAsyncComponent({
         <el-tag v-else type="danger" effect="dark"> --- </el-tag>
       </template>
       <template #right="{ row }"> 
-        {{ row.T_State }}
         <el-button link type="warning" :disabled="![1,3].includes(row.T_State)" size="small"  :icon="Finished" @click="processContract(row.Id,'审核')">审核</el-button>
         <el-button link type="primary" :disabled="![2,4,5].includes(row.T_State)" size="small"  :icon="Edit"  @click="openContractFormDrawer('edit', row)">打款明细</el-button>
         <el-button link type="success" size="small"  :icon="View" @click="processContract(row.Id,'详情')">详情</el-button>