Browse Source

Merge branch 'v3.0' into sit

snow 9 months ago
parent
commit
b5f7fa0800

+ 7 - 8
.env.development

@@ -16,16 +16,18 @@ VITE_APP_ID = "ww6076e6fd4268ee31"
 # 微信开发环境基础重定向url
 REDIRECT_BASE_URL = "http://cxinv.api.caixiao365.com"
 # 开发环境后端用户地址
-VITE_PROXY_USER_REAL1 = "http://user.test241.wanyuhengtong.com"
+VITE_PROXY_USER_REAL1 = "http://user.api.caixiao365.com"
 # 开发环境后端用户地址
-VITE_PROXY_USER_REAL = "http://stockinv.test241.wanyuhengtong.com"
+VITE_PROXY_USER_REAL = "http://cxinv.api.caixiao365.com"
 # 开发环境后端业务地址
-VITE_PROXY_DOMAIN_REAL = "http://stockinv.test241.wanyuhengtong.com"
+VITE_PROXY_DOMAIN_REAL = "http://cxinv.api.caixiao365.com"
 
 VITE_IS_PROD = true
 
-# 跳转结算地址
-VITE_PURCHASE_URL = 'http://webstock3.test241.wanyuhengtong.com/'
+# 跳转采销地址
+VITE_PURCHASE_URL = 'http://pin.caixiao365.com/'
+# 跳转工单地址
+VITE_GD_URL = 'http://bug.caixiao365.com/'
 
 # 报表地址
 VITE_DASHBOARD_URL = 'http://web.report.caixiao365.com/'
@@ -33,6 +35,3 @@ VITE_DASHBOARD_URL = 'http://web.report.caixiao365.com/'
 # token密钥
 VITE_SECRET_KEY = 'key123'
 
-
-# 跳转工单地址
-VITE_GD_URL = 'http//bugweb.test241.wanyuhengtong.com/'

+ 3 - 4
.gitignore

@@ -1,9 +1,8 @@
 node_modules
 .DS_Store
-dist
-./dist/**
-
-/dist/assets
+# dist
+# ./dist/**
+# /dist/assets
 
 
 dist-ssr

+ 10 - 3
src/components/ReImageVerify/src/hooks.ts

@@ -40,10 +40,17 @@ function randomNum(min: number, max: number) {
   return num;
 }
 
+function generateRandomNumber() {
+  const min = 1;
+  const max = 4;
+  const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
+  return randomNumber;
+}
+
 function generateArithmeticCaptcha() {
-  var firstNumber = Math.floor(Math.random() * 10)
-  var secondNumber = Math.floor(Math.random() * 10)
-  var operator = Math.random() < 0.5 ? '+' : (Math.random() < 0.5 ? '-' : '*')
+  var firstNumber = generateRandomNumber()
+  var secondNumber = generateRandomNumber()
+  var operator = '+'
   var result
 
   switch (operator) {

+ 1 - 1
src/directives/permission/index.ts

@@ -1,6 +1,6 @@
 import { usePermissionStoreHook } from "/@/store/modules/permission";
-import { Directive } from "vue";
 import type { DirectiveBinding } from "vue";
+import { Directive } from "vue";
 
 export const auth: Directive = {
   mounted(el: HTMLElement, binding: DirectiveBinding) {

+ 20 - 2
src/utils/details/inv-open.ts

@@ -309,11 +309,29 @@ export const INV_OPEN_COLUMNS: DescriptionColumns = [
     field: "cancel_fee",
     label: "订单信息:",
     span: 24,
-    render(_, { orderinfo }) {
+    render(_, { goodList = [], orderinfo = [] }) {
+
+
+      const map = orderinfo.reduce((prev,current) => (({
+        [current.name]: current,
+        ...prev
+      })),{})
+
+
+      Object.keys(map).forEach(key => {
+        const { totalPrice, goodNum, goodPrice  } = goodList[key];
+        map[key].cancel_fee  = totalPrice || 0
+        map[key].inv_num = goodNum || 0
+        map[key].goodPrice = goodPrice || 0
+      })
+
+
+      const _orderinfo = Object.keys(map).reduce((prev,key) => ([...prev, map[key]]), [])
+
       return h(
         ElTable,
         {
-          data: orderinfo,
+          data: _orderinfo,
           border: true,
           size: "small",
           width: "100%"

+ 8 - 8
src/views/InvoiceSaleSettings/consultingCost/index.vue

@@ -70,18 +70,18 @@ function onDownloadTemplate(isProcure = false) {
     if (isProcure) { // 采购
       _template["商品编码"] = item.spuCode;
       _template["商品名称"] = item.good_name;
-      _template["买入方公司编码"] = item.supplierNo;
-      _template["买入方公司名称"] = item.supplierName;
-      _template["卖出方公司编码"] = item.cgd_supplierNo;
-      _template["卖出方公司名称"] = item.cgd_supplierName;
+      _template["买入方公司编码"] = item.companyNo;
+      _template["买入方公司名称"] = item.companyName;
+      _template["卖出方公司编码"] = item.supplierNo;
+      _template["卖出方公司名称"] = item.supplierName;
       _template["开票商品名称"] = item.cgd_inv_good_name;
     } else {  // 财务
       _template["商品编码"] = item.spuCode;
       _template["商品名称"] = item.good_name;
-      _template["买入方公司编码"] = item.supplierNo;
-      _template["买入方公司名称"] = item.supplierName;
-      _template["卖出方公司编码"] = item.cgd_supplierNo;
-      _template["卖出方公司名称"] = item.cgd_supplierName;
+      _template["买入方公司编码"] = item.companyNo;
+      _template["买入方公司名称"] = item.companyName;
+      _template["卖出方公司编码"] = item.supplierNo;
+      _template["卖出方公司名称"] = item.supplierName;
       _template["采购类目编码"] = item.cgd_inv_cat_code;
       _template['采购类目名称'] = item.cgd_inv_cat_name;
       _template["采购开票商品名称"] = item.cgd_inv_good_name;

+ 6 - 6
src/views/InvoiceSales/capitalClaim/config/content.config.ts

@@ -97,14 +97,14 @@ const columns = [
     prop: "trade_bank",
     width: 160
   },
-  {
-    label: "收款公司编码",
-    prop: "companyNo",
-    width: 150
-  },
+  // {
+  //   label: "收款公司编码",
+  //   prop: "companyNo",
+  //   width: 150
+  // },
   {
     label: "收款公司名称",
-    prop: "companyName",
+    prop: "trade_in",
     width: 145
   },
   {

+ 1 - 1
src/views/InvoiceSales/capitalPool/config/content.config.ts

@@ -141,7 +141,7 @@ const columns = [
   {
     label: "操作",
     fixed: "right",
-    width: 60, //后期修改
+    width: 80, //后期修改
     slot: "operation"
   }
 ];

+ 27 - 7
src/views/InvoiceSales/capitalPool/index.vue

@@ -4,9 +4,24 @@ import contentConfig from "./config/content.config";
 import searchConfig from "./config/search.config";
 import CapitalModal from "./components/capital-modal.vue";
 import { usePageSearch, type PageHooks, type PageEvents } from "/@/hooks/page";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import { usePermission } from "/@/hooks/core/usePermission";
+import { httpWithdraw } from "/@/api/InvoiceSales/capitalClaim";
+import { useAsync } from "/@/hooks/core/useAsync";
+import { useRouter } from "vue-router";
 
 const PageName = "capitalPool";
 const capitalModalRef = ref<InstanceType<typeof CapitalModal> | null>(null);
+const { hasPermissionWithCode } = usePermission("capitalClaim");
+const pageContentRef = ref(null)
+
+const { run: withDraw } = useAsync({
+  success: () => pageContentRef.value.onSearch()
+});
+
+const handleWithDraw = data => withDraw(httpWithdraw(data));
+
+const router = useRouter();
 
 const hooks: PageHooks = {
   pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig)
@@ -14,19 +29,24 @@ const hooks: PageHooks = {
 
 const events: PageEvents = {
   content: {
-    preview: ({ logNo }) => capitalModalRef.value.onDisplay(logNo)
+    preview: ({ logNo }) => router.push('/InvoiceSales/capitalDetail?id=' + logNo + "&back=capitalPool")
   }
 };
 </script>
 
 <template>
   <PageAuth :pageName="PageName">
-    <PageContainer
-      :hooks="hooks"
-      :events="events"
-      :contentConfig="contentConfig"
-      :search-config="searchConfig"
-    />
+    <PageContainer :hooks="hooks" :events="events" :get-content-ref="ref => pageContentRef = ref"  :contentConfig="contentConfig" :search-config="searchConfig">
+      <template #content_action="row">
+        <el-popconfirm
+          v-if="hasPermissionWithCode('009') && String(row.status) === '1'" placement="top"
+          title="是否确认撤销资金认领?"    @confirm="() => handleWithDraw({ logNo: row.logNo })">
+          <template #reference>
+            <el-button :icon="useRenderIcon('refresh-right')" type="primary" link />
+          </template>
+        </el-popconfirm>
+      </template>
+    </PageContainer>
     <CapitalModal ref="capitalModalRef" />
   </PageAuth>
 </template>

+ 17 - 5
src/views/InvoiceSales/returnTicket/components/approval-pending.vue

@@ -3,6 +3,7 @@ import { reactive, ref, computed, watchEffect, shallowRef, watch } from "vue";
 import { ElForm } from "element-plus";
 
 const props = defineProps<{
+  isAllEx?: boolean;
   isNormal?: boolean;
   isJs?: boolean;
   isOutMonth?: string;
@@ -18,6 +19,7 @@ const emit = defineEmits(["approval"]);
 const formData = reactive({
   return_type: "2",
   return_reason: "",
+  total_fee: "",
   remark: "",
   status: "1",
   invCode: "",
@@ -134,7 +136,7 @@ const outMonthAndPaper = computed(() => {
 
 watchEffect(() => {
   const orginInvData = props.getOriginInvoice();
-  console.log(orginInvData);
+  console.log(orginInvData)
   Object.keys(orginInvData).forEach(key => {
     formData[key] = origialOrRed.value === "0" ? orginInvData[key] : "";
   });
@@ -202,10 +204,10 @@ watchEffect(() => {
       </el-form-item>
 
       <div w-400px>
-        <el-form-item label="发票编码" prop="invCode">
+        <el-form-item label="发票代码" prop="invCode" v-if="!isAllEx">
           <el-input
             v-model="formData.invCode"
-            placeholder="发票码"
+            placeholder="发票码"
             :disabled="origialOrRed === '0'"
           />
         </el-form-item>
@@ -214,7 +216,7 @@ watchEffect(() => {
           <el-input v-model="formData.invNum" placeholder="发票号码" />
         </el-form-item>
 
-        <el-form-item label="校验码" prop="checkCode">
+        <el-form-item label="校验码" prop="checkCode" v-if="!isAllEx">
           <el-input
             v-model="formData.checkCode"
             placeholder="校验码"
@@ -232,7 +234,7 @@ watchEffect(() => {
           />
         </el-form-item>
 
-        <el-form-item label="税前金额" prop="subtotal_fee">
+        <el-form-item label="税前金额" prop="subtotal_fee" v-if="!isAllEx">
           <el-input-number
             v-model="formData.subtotal_fee"
             :max="origialOrRed === '0' ? undefined : '0'"
@@ -240,6 +242,16 @@ watchEffect(() => {
             :disabled="origialOrRed === '0'"
           />
         </el-form-item>
+
+
+        <el-form-item label="税后金额" prop="total_fee" v-if="isAllEx">
+          <el-input-number
+            v-model="formData.total_fee"
+            :max="origialOrRed === '0' ? undefined : '0'"
+            placeholder="税后金额"
+            :disabled="origialOrRed === '0'"
+          />
+        </el-form-item>
       </div>
     </template>
     <el-form-item label="备注" prop="remark" w-400px>

+ 5 - 3
src/views/InvoiceSales/returnTicket/components/approval-process/approval-pending.vue

@@ -4,6 +4,7 @@ import { ElForm } from "element-plus";
 
 const props = defineProps<{
   isNormal?: boolean;
+  isAllEx?: boolean
 }>();
 
 const emit = defineEmits(["changeStatus"]);
@@ -134,11 +135,11 @@ const handlePaymentReceipt = () => {
       </el-select>
     </el-form-item>
 
-    <div w-400px v-if="showInvoiceInfo">
+    <div w-400px v-if="showInvoiceInfo && !isAllEx">
       <el-form-item
-        label="发票码"
+        label="发票码"
         prop="invCode"
-        placeholder="请输入发票码"
+        placeholder="请输入发票码"
       >
         <el-input v-model="formData.invCode" />
       </el-form-item>
@@ -148,6 +149,7 @@ const handlePaymentReceipt = () => {
       </el-form-item>
 
       <el-form-item
+        v-if="!isAllEx"
         label="校验码"
         prop="checkCode"
         placeholder="请选择输入校验码"

+ 10 - 1
src/views/InvoiceSales/returnTicket/detail.vue

@@ -57,9 +57,16 @@ const { run: approval } = useAsync({
 //是否普票
 const isNormal = computed(() => {
   const { inv_type } = data.value;
+  console.log(inv_type,'----');
   return inv_type === "2" || inv_type === "3";
 });
 
+// 是否全电
+const isAllEx = computed(() => {
+  const { inv_type } = data.value
+  return inv_type === "fully_digitalized_special_electronic" || inv_type === "fully_digitalized_normal_electronic";
+})
+
 //是否支持金税
 const isJS = computed(() => {
   const { open_type } = data.value;
@@ -92,10 +99,11 @@ const {
 });
 
 function getOriginInvoice() {
-  const { inv_code, inv_number, open_date, inv_subtotal, check_code } =
+  const { inv_code, inv_number, open_date, inv_subtotal, check_code, inv_total} =
     orginInvData.value;
 
   return {
+    total_fee: inv_total,
     invCode: inv_code,
     invNum: inv_number,
     open_date,
@@ -171,6 +179,7 @@ if (isDetail.value) {
               >
                 <ApprovalPending
                   :isNormal="isNormal"
+                  :isAllEx="isAllEx"
                   :is-js="isJS"
                   :is-out-month="is_out_month"
                   :is-normal-open="isNormalOpen"

+ 38 - 1
src/views/interest/role/index.vue

@@ -13,9 +13,15 @@ import { responseHandle } from "/@/utils/responseHandle";
 import { useUserStoreHook } from "/@/store/modules/user";
 import addEdit from "./addEdit.vue";
 import { useCompany } from "/@/hooks/core/useCompany";
+<<<<<<< HEAD
 
 import RoleCopy from "./role-copy.vue"
 
+=======
+import { useUserInfo } from "/@/hooks/core/useUser";
+
+import RoleCopy from "./role-copy.vue"
+>>>>>>> v3.0
 const { logout } = useNav();
 
 const visible = shallowRef(false)
@@ -42,7 +48,10 @@ const isDetails = ref("add");
 const formRef = ref<FormInstance>();
 
 const { currentCompany } = useCompany();
+const { isSuperUser, userInfo } = useUserInfo();
 
+
+// console.log()
 const pagination = reactive<PaginationProps>({
   total: 0,
   pageSize: 15,
@@ -143,7 +152,7 @@ async function setRoles() {
     } = detail;
 
     const params = {
-      action:Array.isArray(action) ? action :action.split(','),
+      action: Array.isArray(action) ? action : action.split(','),
       level: 2,
       companyNo: currentCompany.value.companyNo,
       role_name,
@@ -154,12 +163,25 @@ async function setRoles() {
   }
 }
 
+<<<<<<< HEAD
 function onCopy(){
   if(!currentCompany.value.companyNo){
     ElMessage.warning('请选择一家业务公司')
     return 
   }
 
+=======
+
+const roleId = shallowRef("")
+const roleName = shallowRef("")
+const companyNo = shallowRef("")
+const visible = shallowRef(false)
+function handleCopy(row){
+  const { id, role_name } = row
+  roleId.value = id
+  roleName.value = role_name
+  companyNo.value = row.companyNo
+>>>>>>> v3.0
   visible.value = true
 }
 
@@ -178,6 +200,10 @@ watch(
 
 <template>
   <div class="main role">
+<<<<<<< HEAD
+=======
+    <!-- <el-button @click="setRoles">设置角色</el-button> -->
+>>>>>>> v3.0
     <div v-show="powers.some(i => i == '001')">
       <el-form ref="formRef" :inline="true" :model="form" size="small" :label-width="0"
         class="bg-white w-99/100 pl-8 pt-4">
@@ -227,12 +253,23 @@ watch(
         : 'checkbox-circle-line'
     )
       " /></template></el-popconfirm>
+
+
+                  <el-tooltip content="复制角色" v-if="isSuperUser && String(userInfo.id) !== '156'">
+                    <el-button 
+                      class="reset-margin" link type="primary"
+                      @click="handleCopy(row)"
+                      :size="size" 
+                      :icon="useRenderIcon('dict')" />
+                  </el-tooltip>
             </template>
           </PureTable>
         </template>
       </TableProBar>
       <addEdit :itemId="itemId" :isDetails="isDetails" :show-model="showModel" @refresh="submitRefresh"
         @cancel="submitCancel" />
+
+        <RoleCopy v-model:visible="visible" :roleId="roleId" :roleName="roleName" :companyNo="companyNo" @refresh="onSearch" />
     </div>
 
     <RoleCopy v-model:visible="visible" @refresh="onSearch" />

+ 46 - 0
src/views/interest/role/role-copy.vue

@@ -3,14 +3,25 @@ import { ref, watch, shallowRef } from "vue"
 import { useVModel } from "@vueuse/core"
 import { useCompany } from "/@/hooks/core/useCompany";
 import { BusinessQuery } from "/@/components/BasicForm";
+<<<<<<< HEAD
 import { httpList } from "/@/api/interest/role";
+=======
+import { httpList, httpUpdate } from "/@/api/interest/role";
+>>>>>>> v3.0
 
 import { httpDetail, httpAdd } from "/@/api/interest/role";
 
 import { ElMessage } from "element-plus"
 
 const props = defineProps<{
+<<<<<<< HEAD
   visible: boolean
+=======
+  companyNo: string
+  roleName: string
+  visible: boolean
+  roleId: string
+>>>>>>> v3.0
 }>()
 
 const emit = defineEmits(['refresh'])
@@ -65,7 +76,11 @@ watch(() => formData.value.sourceCompanyNo, (value) => {
 })
 
 const rules = {
+<<<<<<< HEAD
   "name": [{ required: true, message: '请输入角色名称', trigger: 'change' }],
+=======
+  // "name": [{ required: true, message: '请输入角色名称', trigger: 'change' }],
+>>>>>>> v3.0
   "sourceCompanyNo": [{ required: true, message: '请选择来源业务公司', trigger: 'change' }],
   "sourceRoleId": [{ required: true, message: '请选择来源角色', trigger: 'change' }],
 }
@@ -91,6 +106,7 @@ async function requestRole() {
 
 async function createRole(params = {}) {
   try {
+<<<<<<< HEAD
     const { data, code } = await httpAdd(params);
     if (code !== 0) { throw new Error('创建角色失败..') }
   } catch (err) {
@@ -98,6 +114,16 @@ async function createRole(params = {}) {
   }
 }
 
+=======
+    const { data, code } = await httpUpdate(params);
+    if (code !== 0) { throw new Error('复制角色失败..') }
+  } catch (err) {
+    throw new Error('复制角色失败..')
+  }
+}
+
+
+>>>>>>> v3.0
 async function onSubmit() {
   try {
     loading.value = true
@@ -105,12 +131,22 @@ async function onSubmit() {
     const { sourceCompanyNo, sourceRoleId, companyNo, name } = formData.value
     ElMessage.info('正在读取来源角色信息(1/3)...')
     const detail = await requestRole()
+<<<<<<< HEAD
     ElMessage.info('读取角色信息成功,正在创建角色(2/3)...')
     const { action, private_data, role_name } = detail;
     const params = {
       companyNo,
       level: 2,
       role_name:name,
+=======
+    ElMessage.info('读取角色信息成功,正在复制角色(2/3)...')
+    const { action, private_data, role_name } = detail;
+    const params = {
+      level: 2,
+      roleid: props.roleId,
+      role_name: props.roleName,
+      companyNo: props.companyNo,
+>>>>>>> v3.0
       action: Array.isArray(action) ? action : action.split(','),
       private_data:( Array.isArray(private_data) ? private_data : private_data.split(',')).filter(item => !!item)
     };
@@ -128,9 +164,15 @@ async function onSubmit() {
 
 <template>
   <ElDialog title="复制角色" center v-model="visible" @close="handleClose">
+<<<<<<< HEAD
     <ElForm :model="formData" :rules="rules" ref="formRef" v-loading="loading">
       <ElFormItem prop="name" label="角色名称">
         <ElInput v-model="formData.name" placeholder="角色名称" />
+=======
+    <ElForm :model="formData" :rules="rules" ref="formRef" v-loading="loading" label-width="80px">
+      <ElFormItem prop="name" label="角色名称">
+        <ElInput :modelValue="roleName" placeholder="角色名称" disabled />
+>>>>>>> v3.0
       </ElFormItem>
 
       <ElFormItem prop="sourceCompanyNo" label="来源公司">
@@ -140,7 +182,11 @@ async function onSubmit() {
       <ElFormItem prop="sourceRoleId" label="来源角色">
         <ElSelect v-model="formData.sourceRoleId" style="width:100%" placeholder="来源角色"
           :disabled="!formData.sourceCompanyNo">
+<<<<<<< HEAD
           <ElOption v-for="role in roles" :key="role.id" :value="role.id" :label="role.role_name" />
+=======
+          <ElOption v-for="role in roles" :key="role.id" :value="role.id" :label="role.role_name" :disabled="role.id === roleId" />
+>>>>>>> v3.0
         </ElSelect>
       </ElFormItem>
 

+ 5 - 5
vite.config.ts

@@ -65,11 +65,11 @@ export default ({ command, mode }: ConfigEnv): UserConfigExport => {
           : null
     },
     plugins: [...getPluginsList(command, VITE_LEGACY),
-      zipPack({
-      inDir:'dist',
-      outFileName:'build.zip',
-      pathPrefix:''
-    })
+      //   zipPack({
+      //   inDir:'dist',
+      //   outFileName:'build.zip',
+      //   pathPrefix:''
+      // })
   ],
     optimizeDeps: {
       include: ["pinia", "lodash-es", "@vueuse/core"],