供应商模块

ncszh
jwg 6 days ago
parent 3f021b8b95
commit 5535b2a1f1

@ -0,0 +1,18 @@
import request from '@/plugin/axios'
// 获得付款计划分页
export function getMyPayPlanPage(query) {
return request({
url: 'bs/payment-plan/page',
method: 'get',
params: query
})
}
// 获得付款计划
export function getPaymentPlan(id) {
return request({
url: '/bs/payment-plan/get?id=' + id,
method: 'get'
})
}

@ -52,3 +52,11 @@ export function exportSupplierContractExcel(query) {
responseType: 'blob'
})
}
// 获取合同编号
export function genCode(data) {
return request({
url: 'bs/supplier-contract/getAutocode',
method: 'get',
})
}

@ -0,0 +1,90 @@
import request from '@/plugin/axios'
// 创建供应商信息
export function createSupplierCompany(data) {
return request({
url: "/bs/supplier-company/create",
method: "post",
data: data,
});
}
// 更新供应商信息
export function updateSupplierCompany(data) {
return request({
url: "/bs/supplier-company/update",
method: "put",
data: data,
});
}
// 删除供应商信息
export function deleteSupplierCompany(id) {
return request({
url: "/bs/supplier-company/delete?id=" + id,
method: "delete",
});
}
// 获得供应商信息
export function getSupplierCompany(id) {
return request({
url: "/bs/supplier-company/get?id=" + id,
method: "get",
});
}
// 获得供应商信息分页
export function getSupplierCompanyPage(query) {
return request({
url: "/bs/supplier-company/page",
method: "get",
params: query,
});
}
// 获得供应商信息分页
export function getSupplierCompanyPage1(query) {
return request({
url: "/bs/supplier-company/page2",
method: "get",
params: query,
});
}
// 获得供应商信息
export function getSupplierCompanyList(query) {
return request({
url: "/bs/supplier-company/list",
method: "get",
params: query,
});
}
// 导出供应商信息 Excel
export function exportSupplierCompanyExcel(query) {
return request({
url: "/bs/supplier-company/export-excel",
method: "get",
params: query,
responseType: "blob",
});
}
// 百度云接口识别
export function baiduScanApi(data) {
return request({
url: "/bs/supplier-company/buildBusinessLicense",
method: "post",
data,
});
}
// 下载用户导入模板
export function srCttImportTemplate() {
return request({
url: "/bs/supplier-company/get-import-template",
method: "get",
responseType: "blob",
});
}

@ -56,6 +56,96 @@ export function scanImgMsggApi(query) {
}
// 创建供应商信息
export function createSupplierCompany(data) {
return request({
url: "/bs/supplier-company/create",
method: "post",
data: data,
});
}
// 更新供应商信息
export function updateSupplierCompany(data) {
return request({
url: "/bs/supplier-company/update",
method: "put",
data: data,
});
}
// 删除供应商信息
export function deleteSupplierCompany(id) {
return request({
url: "/bs/supplier-company/delete?id=" + id,
method: "delete",
});
}
// 获得供应商信息
export function getSupplierCompany(id) {
return request({
url: "/bs/supplier-company/get?id=" + id,
method: "get",
});
}
// 获得供应商信息分页
export function getSupplierCompanyPage(query) {
return request({
url: "/bs/supplier-company/page",
method: "get",
params: query,
});
}
// 获得供应商信息分页
export function getSupplierCompanyPage1(query) {
return request({
url: "/bs/supplier-company/page2",
method: "get",
params: query,
});
}
// 获得供应商信息
export function getSupplierCompanyList(query) {
return request({
url: "/bs/supplier-company/list",
method: "get",
params: query,
});
}
// 导出供应商信息 Excel
export function exportSupplierCompanyExcel(query) {
return request({
url: "/bs/supplier-company/export-excel",
method: "get",
params: query,
responseType: "blob",
});
}
// 百度云接口识别
export function baiduScanApi(data) {
return request({
url: "/bs/supplier-company/buildBusinessLicense",
method: "post",
data,
});
}
// 下载用户导入模板
export function srCttImportTemplate() {
return request({
url: "/bs/supplier-company/get-import-template",
method: "get",
responseType: "blob",
});
}

@ -0,0 +1,152 @@
<template>
<div class="student-card common-list-contain">
<div class="student-base">
<div class="list-box">
<div class="box-cr">
<div class="ct-md">
<div class="mt5" style="color: #333">
编号: {{ itemData.contractNumber }}
</div>
<div class="mt5" style="color: #333">
名称: {{ itemData.contractName }}
</div>
<div class="mt5" style="color: #333">
供应商名称: {{ itemData.supplierName }}
</div>
<div class="mt5" style="color: #333">
比例名称: {{ itemData.percentageName }}
</div>
<div class="mt5" style="color: #333">
付款金额: {{ itemData.actualAmount }}
</div>
<div class="mt5" style="color: #333">
预计付款时间:
{{ dayjs(itemData.planTime || '').format('YYYY/MM/DD') }}
</div>
</div>
</div>
<div class="box-rt">
<van-icon
class="icon-box"
v-hasPermi="['bs:supplier-contract:query']"
@click="handleShow(itemData.id)"
name="eye-o"
color="#05A9FF"
size="25"
/>
<van-icon
class="icon-box"
v-hasPermi="['procurement:supplierCt:update']"
@click="handleEdit(itemData.id, itemData.status, itemData.creator)"
name="edit"
:color="
!(
itemData.status == 0 ||
(itemData.status == 3 && userInfo.id == itemData.creator)
)
? '#ccc'
: ''
"
size="25"
/>
<van-icon
class="icon-box"
v-hasPermi="['procurement:supplierCt:del']"
@click="handleDel(itemData.id, itemData.status, itemData.creator)"
name="delete-o"
:color="
!(
itemData.status == 0 ||
(itemData.status == 3 && userInfo.id == itemData.creator)
)
? '#ccc'
: '#EC3359'
"
size="25"
/>
<!-- <van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:delete']" @click="handleMerge(itemData.id, itemData.status, itemData.creator)" name="envelop-o" :color="!(itemData.status==0 || (itemData.status==3 && userInfo.id ==itemData.creator)) ?'#05A9FF':'#ccc'" :size="25" /> -->
</div>
</div>
</div>
</div>
</template>
<script>
import { getDictDataLabel, handleFilterStatus } from '@/utils/dict'
import { deleteSupplierContract } from '@/api/bs/supplierContract'
import dayjs from 'dayjs'
import { Dialog } from 'vant'
export default {
props: {
itemData: {
required: true,
default: () => {}
}
},
components: {},
data() {
return {
jumoStudentId: null
}
},
activated() {
if (this.jumoStudentId) {
this.handleUpdataInfo()
}
},
mounted() {},
computed: {
userInfo() {
return JSON.parse(window.localStorage.getItem('userInfo') || { dept: {} })
}
},
methods: {
handleMerge(id, status) {
if (status == 0) {
return
}
},
handleEdit(id, status, creator) {
if (!(status == 0 || (status == 3 && this.userInfo.id == creator))) {
return
}
this.jumoStudentId = id
this.$router.push({
path: '/supplierMsg',
query: { id, type: 'edit' }
})
},
handleDel(id, status, creator) {
if (!(status == 0 || (status == 3 && this.userInfo.id == creator))) {
return
}
Dialog.confirm({
title: '提示',
message: '你确定要删除吗?'
}).then(() => {
deleteSupplierContract(id).then(() => {
this.$emit('onAllRefresh')
})
})
},
handleFilterStatus,
getDictDataLabel,
handleShow(id) {
this.jumoStudentId = id
this.$router.push({
path: '/payPlan',
query: { id, type: 'show' }
})
},
dayjs,
handleUpdataInfo() {
this.jumoStudentId = null
this.$emit('onUpdataInfo', this.itemData.id)
}
}
}
</script>
<style lang="scss" scoped>
@import '@/assets/style/common/newList.scss';
</style>

@ -0,0 +1,181 @@
<template>
<div class="student-card common-list-contain">
<div class="student-base">
<div class="list-box">
<!-- <div class="box-lf">
<van-image width="3rem" height="3rem" fit="cover" :src="require('@/assets/images/invoice.png')" />
<div class="bt">{{}}</div>
</div> -->
<div class="box-cr">
<!-- <div class="cr-bt" style="margin-top: 0.6rem">
<div
class="tags"
:style="`border: 1px solid ${
handleFilterStatus(
DICT_TYPE.BS_EXPENSE_APPLY_STATUS,
itemData.status
).color
};color:${
handleFilterStatus(
DICT_TYPE.BS_EXPENSE_APPLY_STATUS,
itemData.status
).color
}`"
>
{{
handleFilterStatus(
DICT_TYPE.BS_EXPENSE_APPLY_STATUS,
itemData.status
).label
}}
</div>
</div> -->
<div class="ct-md">
<div class="mt5" style="color: #333">
供应商名称 {{ itemData.companyName }}
</div>
<div style="margin-top: 0.3rem; color: #333">
供应商类别:{{
getDictDataLabel(
DICT_TYPE.BS_ENTERPRISEL_TYPE,
itemData.companyType
) || ''
}}
</div>
<div style="margin-top: 0.3rem; color: #333">
等级{{
getDictDataLabel(DICT_TYPE.GYS_LEVEL, itemData.gradeGys) || ''
}}
</div>
<div style="margin-top: 0.3rem; color: #333">
采购员姓名{{ itemData.purchaserName }}
</div>
</div>
</div>
<div class="box-rt">
<van-icon
class="icon-box"
v-hasPermi="['bs:supplier-contract:query']"
@click="handleShow(itemData.id)"
name="eye-o"
color="#05A9FF"
size="25"
/>
<van-icon
class="icon-box"
v-hasPermi="['procurement:supplierCt:update']"
@click="handleEdit(itemData.id, itemData.status, itemData.creator)"
name="edit"
:color="
!(
itemData.status == 0 ||
(itemData.status == 3 && userInfo.id == itemData.creator)
)
? '#ccc'
: ''
"
size="25"
/>
<van-icon
class="icon-box"
v-hasPermi="['procurement:supplierCt:del']"
@click="handleDel(itemData.id, itemData.status, itemData.creator)"
name="delete-o"
:color="
!(
itemData.status == 0 ||
(itemData.status == 3 && userInfo.id == itemData.creator)
)
? '#ccc'
: '#EC3359'
"
size="25"
/>
<!-- <van-icon class="icon-box" v-hasPermi="['bs:supplier-contract:delete']" @click="handleMerge(itemData.id, itemData.status, itemData.creator)" name="envelop-o" :color="!(itemData.status==0 || (itemData.status==3 && userInfo.id ==itemData.creator)) ?'#05A9FF':'#ccc'" :size="25" /> -->
</div>
</div>
</div>
</div>
</template>
<script>
import { getDictDataLabel, handleFilterStatus } from '@/utils/dict'
import { deleteSupplierContract } from '@/api/bs/supplierContract'
import dayjs from 'dayjs'
import { Dialog } from 'vant'
export default {
props: {
itemData: {
required: true,
default: () => {}
}
},
components: {},
data() {
return {
jumoStudentId: null
}
},
activated() {
if (this.jumoStudentId) {
this.handleUpdataInfo()
}
},
mounted() {},
computed: {
userInfo() {
return JSON.parse(window.localStorage.getItem('userInfo') || { dept: {} })
}
},
methods: {
handleMerge(id, status) {
if (status == 0) {
return
}
},
handleEdit(id, status, creator) {
if (!(status == 0 || (status == 3 && this.userInfo.id == creator))) {
return
}
this.jumoStudentId = id
this.$router.push({
path: '/supplierMsg',
query: { id, type: 'edit' }
})
},
handleDel(id, status, creator) {
if (!(status == 0 || (status == 3 && this.userInfo.id == creator))) {
return
}
Dialog.confirm({
title: '提示',
message: '你确定要删除吗?'
}).then(() => {
deleteSupplierContract(id).then(() => {
this.$emit('onAllRefresh')
})
})
},
handleFilterStatus,
getDictDataLabel,
handleShow(id) {
this.jumoStudentId = id
this.$router.push({
path: '/supplierMsg',
query: { id, type: 'show' }
})
},
dayjs,
handleUpdataInfo() {
this.jumoStudentId = null
this.$emit('onUpdataInfo', this.itemData.id)
}
}
}
</script>
<style lang="scss" scoped>
@import '@/assets/style/common/newList.scss';
</style>

@ -423,7 +423,7 @@
//
import {
schoolListApi,
schoolNextListApi,
schoolNextListApi
} from '@/api/potentialGuest/consultation'
import { getdepartmentListApi } from '@/api/potentialGuest/order'
@ -483,46 +483,46 @@ import { mapState } from 'vuex'
export default {
model: {
prop: 'value',
event: 'change',
event: 'change'
},
props: {
inputAlign: {
type: String,
default: 'right',
default: 'right'
},
isUseSlot: Boolean,
isCell: Boolean,
list: {
type: Array,
default: () => [],
default: () => []
},
title: {
type: String,
default: '',
default: ''
},
label: {
type: String,
default: '',
default: ''
},
titleKey: {
type: String,
default: 'title',
default: 'title'
},
idKey: {
type: String,
default: 'id',
type: String || Number,
default: 'id'
},
childrenKey: {
type: String,
default: 'children',
default: 'children'
},
placeholder: {
type: String,
default: '请选择',
default: '请选择'
},
isCascaderAllLevelNameSymnol: {
type: String,
default: '-',
default: '-'
},
isValueHidden: Boolean,
clearable: Boolean,
@ -540,35 +540,35 @@ export default {
// ----
disabled: Boolean,
value: [String, Number, Array],
name: String,
name: String || Number,
closeIsShow: {
type: Boolean,
default: true,
default: true
},
placeholderIShow: {
type: Boolean,
default: true,
default: true
},
rulesList: {
type: Array,
default: () => [],
default: () => []
},
isOriginActivitySchoolSearch: Boolean,
emptyToastTitle: {
type: String,
default: '无可选数据',
default: '无可选数据'
},
limitPageSize: {
type: Number,
default: 20,
default: 20
},
isUseLimitPage: Boolean,
isOriginRemainCascader: Boolean,
showReturnTitle: String,
labelWidth: {
type: String,
default: '6.2em',
},
default: '6.2em'
}
},
data() {
return {
@ -590,7 +590,7 @@ export default {
originCurrentSchoolSearchValue: '',
limitPageNum: 1,
limitShow: this.isUseLimitPage,
isOriginSearchClear: false,
isOriginSearchClear: false
//
// isFirstInitList: true
}
@ -598,7 +598,7 @@ export default {
computed: {
// ==>
...mapState({
studentBaseInfo: (state) => state.order.studentBaseInfo,
studentBaseInfo: (state) => state.order.studentBaseInfo
}),
allList() {
return this.handleData(this.list, [])
@ -706,7 +706,7 @@ export default {
return !this.originSchoolAttr
}
return this.disabled
},
}
},
filters: {
titleFilter(arr) {
@ -714,7 +714,7 @@ export default {
},
treeListTitleFilter(arr) {
return arr.treeList.map((item) => item.title)
},
}
},
watch: {
list() {
@ -726,7 +726,7 @@ export default {
},
originLoading(val) {
this.$loading(val, 'originLoading')
},
}
},
created() {
this.handleDataInit()
@ -757,7 +757,7 @@ export default {
// children: item.children,
children: item[this.childrenKey]
? this.handleData(item[this.childrenKey], treeList)
: [],
: []
}
})
},
@ -927,13 +927,13 @@ export default {
}
this.$emit('change', this.selectValue)
this.$emit('changeAll', {
...(this.handleCascaderFind(this.allList, this.selectValue) || {}),
...(this.handleCascaderFind(this.allList, this.selectValue) || {})
})
} else {
this.$emit('change', this.selectValue)
this.$emit('changeAll', {
...(this.currentList.find((item) => item.id === this.selectValue) ||
{}),
{})
})
}
this.isPopupShow = false
@ -960,7 +960,7 @@ export default {
const query = {
id: null,
keyword: e,
word: e,
word: e
}
if (this.isOriginActivitySchoolSearch) {
@ -972,7 +972,7 @@ export default {
return {
id: item.id,
title: item.title,
children: [],
children: []
}
})
this.$nextTick(() => {
@ -995,7 +995,7 @@ export default {
return {
id: item.value,
title: item.text,
children: [],
children: []
}
})
this.$nextTick(() => {
@ -1029,7 +1029,7 @@ export default {
id: item.id,
title: item.title,
extendNum: item.extendNum,
children: [],
children: []
}
})
this.handleDeepOrigin(e.id, arr, this.searchList)
@ -1049,7 +1049,7 @@ export default {
...item,
id: item.value,
title: item.text,
children: [],
children: []
}
})
this.handleDeepOrigin(e.id, arr, this.searchList)
@ -1082,7 +1082,7 @@ export default {
const query = {
code: '',
keyword: e,
type: this.originSchoolAttr,
type: this.originSchoolAttr
}
this.originLoading = true
searchschoolApi(query)
@ -1092,7 +1092,7 @@ export default {
this.searchList = arr.map((item) => {
return {
id: item.value,
title: item.text,
title: item.text
}
})
this.$nextTick(() => {
@ -1106,7 +1106,7 @@ export default {
} else if (this.originSchoolType == 2) {
const query = {
keyword: e,
id: this.originSchoolAttr,
id: this.originSchoolAttr
}
this.originLoading = true
searchcollegelApi(query)
@ -1116,7 +1116,7 @@ export default {
this.searchList = arr.map((item) => {
return {
id: item.value,
title: item.text,
title: item.text
}
})
// this.$emit('update:list', arr.map(item => {
@ -1141,8 +1141,8 @@ export default {
handleMorePage() {
this.limitPageNum += 1
},
},
}
}
}
</script>
<style lang="scss">

@ -12,8 +12,13 @@ export default {
{ path: '/myBidder', name: `${pre}myBidder`, component: () => import('@/views/contract/myBidder'), meta: { cache: true, title: '中标审批列表' } },
{ path: '/mySupplier', name: `${pre}mySupplier`, component: () => import('@/views/contract/mySupplier'), meta: { cache: true, title: '供应商合同审批列表' } },
{ path: '/myPay', name: `${pre}myPay`, component: () => import('@/views/contract/myPay'), meta: { cache: true, title: '付款申请列表' } },
{ path: '/myPayPlan', name: `${pre}myPayPlan`, component: () => import('@/views/contract/myPayPlan'), meta: { cache: true, title: '付款计划列表' } },
{ path: '/bidder', name: `${pre}bidder`, component: () => import('@/views/contract/bidder'), meta: { cache: true, title: '中标审批' } },
{ path: '/supplier', name: `${pre}supplier`, component: () => import('@/views/contract/supplier'), meta: { cache: true, title: '供应商合同审批' } },
{ path: '/supplierMsg', name: `${pre}supplierMsg`, component: () => import('@/views/contract/supplierMsg'), meta: { cache: true, title: '供应商信息' } },
{ path: '/payPlan', name: `${pre}payPlan`, component: () => import('@/views/contract/payPlan'), meta: { cache: true, title: '付款计划' } },
{ path: '/mySupplierMsg', name: `${pre}mySupplierMsg`, component: () => import('@/views/contract/mySupplierMsg'), meta: { cache: true, title: '供应商信息列表' } },
/* { path: '/contract/procurement/supplierMsgDatail', name: `${pre}contract/procurement/supplierMsgDatail`, component: () => import('@/views/contract/supplierMsgDatail'), meta: { cache: true, title: '供应商信息' } }, */
{ path: '/myCustom', name: `${pre}myCustom`, component: () => import('@/views/contract/myCustom'), meta: { cache: true, title: '客户合同审批列表' } },
{ path: '/custom', name: `${pre}custom`, component: () => import('@/views/contract/custom'), meta: { cache: true, title: '客户合同审批' } },
{ path: '/pay', name: `${pre}pay`, component: () => import('@/views/contract/pay'), meta: { cache: true, title: '付款审批' } },

@ -119,6 +119,8 @@ export const DICT_TYPE = {
GYS_LEVEL: "gys_level",
// 币种类型
CURRENCY_TYPE: "currency_type",
// 供应商类型
BS_ENTERPRISEL_TYPE: "supplier_enterprise_state",
}
/**

@ -0,0 +1,253 @@
<template>
<div id="orderHeader">
<div class="hf-l-seacrch" v-if="isActSearch">
<form action="/">
<van-search v-model="listQuery.contractNumber" shape="round" show-action placeholder="请输入合同编号" :clearable="false" @search="onKeywordSearch" @cancel="onKeywordCancel" />
</form>
</div>
<div class="header-filter" :style="isActSearch ? 'padding: 0 0 0 0.5rem' : ''">
<div class="hf-l-list" v-show="!isActSearch">
<van-dropdown-menu class="hf-l-list-menu">
<!-- 供应商名称 -->
<van-dropdown-item title="供应商名称" :title-class="isHtab1 ? 'common-act-color' : ''" @open="handleDropOpen()" ref="vanDropItem1">
<div class="hf-drop-view">
<div class="hf-drop-contain">
<div class="hr-drop-filter-item" @click.stop="handleClass1(item.id)" v-for="item in spList" :key="item.value">
<van-icon v-if="listQuery.supplierId && listQuery.supplierId == item.value" name="success" color="#0088FE" />
<span :class="{'hr-drop-filter-item-act': listQuery.supplierId && listQuery.supplierId == item.id }">{{item.companyName}}</span>
</div>
</div>
<div class="common-double-button">
<van-button class="common-double-button-l" @click="handleReset()"></van-button>
<van-button class="common-double-button-r" @click="handleConfirm"></van-button>
</div>
</div>
</van-dropdown-item>
<!-- 类别 -->
<van-dropdown-item title="合同状态" :title-class="isHtab4 ? 'common-act-color' : ''" @open="handleDropOpen()" ref="vanDropItem4">
<div class="hf-drop-view">
<div class="hf-drop-contain">
<div class="hr-drop-filter-item" @click.stop="handleClass2(item.value)" v-for="item in stateList" :key="item.value">
<van-icon v-if="listQuery.contractType && listQuery.contractType == item.value" name="success" color="#0088FE" />
<span :class="{'hr-drop-filter-item-act': listQuery.contractType && listQuery.contractType == item.value }">{{item.label}}</span>
</div>
</div>
<div class="common-double-button">
<van-button class="common-double-button-l" @click="handleReset()"></van-button>
<van-button class="common-double-button-r" @click="handleConfirm"></van-button>
</div>
</div>
</van-dropdown-item>
</van-dropdown-menu>
</div>
<div class="hf-r-list" v-show="!isActSearch">
<div class="hf-r-list-item" @click="handleSearch">
<div class="hf-r-icon-bg">
<van-icon name="search" class="hf-r-icon" />
</div>
</div>
</div>
</div>
<van-popup position="bottom" safe-area-inset-bottom v-model="moreFilterShow" :lock-scroll="true" round get-container="#app" lazy-render>
<div class="common-popup moreContain">
<div class="common-popup-header">
<div></div>
<div class="common-popup-header-title">
<span>筛选</span>
</div>
<div class="common-popup-header-close">
<van-icon name="cross" @click="moreFilterShow = false" />
</div>
</div>
<div class="common-popup-body moreContain-body">
<van-form ref="filterForm" :show-error-message="false" validate-trigger="" :submit-on-enter="false">
<RePick v-model="listQuery.remark" label="bumen" :list="areaTree" isLastSelect isCascader isShowSearch title="行程" titleKey="name" isCascaderAllLevelNameSymnol isCell clearable />
</van-form>
</div>
<div class="common-popup-footer">
<van-button style="width: 8rem; margin-right: 1rem;" round @click="handleMoreReset"></van-button>
<van-button type="info" style="width: 8rem;" round @click.stop="handleMoreConfirm">确认</van-button>
</div>
</div>
</van-popup>
</div>
</template>
<script>
import { mapState, mapGetters } from 'vuex'
import { getDictDatas, DICT_TYPE } from "@/utils/dict";
import { dayTextFormatter } from '@/utils'
import dayjs from 'dayjs'
export default {
props: {
listType: String, // 'detail'
paramProp: Object,
spList: Array, //
},
components: {
RePick: () => import('@/components/ReComponents/RePick'),
},
data() {
return {
defaultDate: null,
dayTextFormatter: dayTextFormatter,
isActSearch: false,
moreFilterShow: false,
isSearch: false,
// courseStateList: [
// { text: '', id: 25 },
// { text: '', id: 0 },
// { text: '', id: 1 }
// ],
listQuery: {},
}
},
computed: {
isHtab1() {
let isShow = false
if (this.paramProp.supplierId) isShow = true
return isShow
},
isHtab4() {
let isShow = false
if (this.paramProp.contractType) isShow = true
return isShow
},
areaTree() {
return this.$store.getters.areaTree
},
isMoreAct() {
let bol = false
const listQuery = this.paramProp || {}
if (listQuery.remark) {
bol = true
}
return bol
},
stateList() {
return getDictDatas(DICT_TYPE.BS_EXPENSE_APPLY_STATUS) || []
}
},
methods: {
//
handleDateReset() {
this.listQuery.startDate = null
this.listQuery.endDate = null
this.defaultDate = null
this.$refs.vanCalendar && this.$refs.vanCalendar.reset()
},
handleDateSelect(val) {
if (val.filter(item => item).length === 2) {
this.listQuery.startDate = `${dayjs(val[0]).format('YYYY/MM/DD')} 00:00:00 `
this.listQuery.endDate = `${dayjs(val[1]).format('YYYY/MM/DD')} 23:59:59 `
}
},
handleQuickDate(e) {
this.defaultDate = [dayjs(e.time[0]).toDate(), dayjs(e.time[1]).toDate()]
this.listQuery.startDate = `${e.time[0]} 00:00:00`
this.listQuery.endDate = `${e.time[1]} 23:59:59`
},
handleConfirm() {
this.$refs.vanDropItem4 && this.$refs.vanDropItem4.toggle(false)
this.$refs.vanDropItem1 && this.$refs.vanDropItem1.toggle(false)
this.$emit('onListQuery', this.listQuery)
},
onKeywordCancel() {
this.listQuery.contractNumber = null
this.isActSearch = false
this.isSearch = false
this.onKeywordSearch()
},
onKeywordSearch() {
this.$emit('onListQuery', this.listQuery)
},
//
handleClass1(val) {
this.listQuery.supplierId = val
},
handleClass2(val) {
this.listQuery.contractType = val
},
// type : 1 2 3
handleState(val, type) {
if (type == 1) {
const i = this.listQuery.states.findIndex(item => item === val)
if (i > -1) {
this.listQuery.states.splice(i, 1)
} else {
this.listQuery.states.push(val)
}
}
if (type == 2 || type == 3) {
const i = this.listQuery.types.findIndex(item => item === val)
if (i > -1) {
this.listQuery.types.splice(i, 1)
} else {
this.listQuery.types.push(val)
}
}
},
handleInit() {
this.listQuery = {
...this.paramProp
}
if (!(this.listQuery.startDate && this.listQuery.endDate)) {
this.handleDateReset()
}
},
handleDropOpen() {
this.handleInit()
},
onSearch() {
this.handleConfirm()
},
//
handleSearch() {
this.handleInit()
this.listQuery.contractNumber = this.paramProp.contractNumber
this.isActSearch = true
},
handleSearchCancel() {
this.listQuery.contractNumber = null
this.isActSearch = false
this.onKeywordSearch()
},
//
handleMoreFilter() {
this.handleInit()
this.moreFilterShow = true
},
//
handleMoreReset() {
this.listQuery.remark = null
},
handleMoreConfirm() {
this.$emit('onListQuery', this.listQuery)
this.moreFilterShow = false
},
handleReset() {
this.listQuery.contractType = null
this.listQuery.supplierId = null
},
},
}
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

@ -0,0 +1,311 @@
<template>
<!-- 付款计划列表 -->
<div>
<!-- 重新的搜索 -->
<div style="padding: 10px">
<van-field
v-model="queryForm.contractNumber"
placeholder="请输入"
label="编号"
clearable
input-align="left"
/>
<van-field
v-model="queryForm.companyName"
placeholder="请输入"
label="供应商名称"
clearable
input-align="left"
/>
<div
style="display: flex; justify-content: space-around; margin-top: 10px"
>
<van-button
type="info"
@click="handleSearch"
size="small"
style="width: 80px"
>搜索</van-button
>
<van-button
type="info"
@click="rstSearch"
size="small"
style="width: 80px"
>重置</van-button
>
</div>
</div>
<RMList
:moreLoading.sync="moreLoading"
:refreshing.sync="refreshing"
:finished.sync="finished"
@onLoad="handleLoad"
@onRefresh="handleRefresh"
isMore
:tableList="tableList"
>
<div>
<MyPayPlanListCard
v-for="(item, index) in tableList"
:key="item.id"
:itemData="item"
:listType="listType"
@onUpdataInfo="handleUpdataInfo($event, index)"
@onAllRefresh="handleAllRefresh"
/>
</div>
</RMList>
<div class="common-bottom-btns" style="bottom: 8rem">
<div class="common-bottom-btn" @click="handleTopPage">
<img src="@/assets/images/icons/top.png" alt="" />
<span>回到顶部</span>
</div>
</div>
<div
class="common-bottom-btns"
v-hasPermi="['bs:supplier-contract:create']"
style="bottom: 10rem"
>
<div class="common-bottom-btn" @click="handleToAdd">
<img src="@/assets/images/icons/add.png" alt="" />
<span>添加申请</span>
</div>
</div>
<div class="common-bottom-btns" style="bottom: 6rem">
<div class="common-bottom-btn" @click="handleBack">
<img src="@/assets/images/icons/home.png" alt="" />
<span>返回首页</span>
</div>
</div>
</div>
</template>
<script>
import { getScrollTop } from '@/utils'
import { getMyPayPlanPage } from '@/api/bs/myPayPlan'
import { getDictDatas } from '@/utils/dict'
import { mapState } from 'vuex'
import dayjs from 'dayjs'
export default {
props: {
listType: String // EnrollmentOrder: EnrollmentCollection: ShiftRecord: WaitPay:
},
components: {
RMList: () => import('@/components/ReComponents/RMList'),
MyPayPlanListCard: () => import('@/components/MyPayPlanListCard'),
RePick: () => import('@/components/ReComponents/RePick')
},
data() {
return {
height: 0,
moreLoading: false,
refreshing: false,
finished: false,
tableList: [],
spList: [],
listQuery: {
pageNo: 1,
pageSize: 10
},
//
queryForm: {
contractNumber: null,
companyName: null
}
}
},
computed: {
...mapState({
singlePageSize: (state) => state.common.setting.singlePageSize,
pageSize: (state) => state.common.setting.pageSize
})
},
activated() {
this.handleScrollInit()
},
deactivated() {
window.removeEventListener('scroll', this.handleScroll)
},
created() {
this.handleInit()
},
methods: {
//
handleSearch() {
let queryParams = {
pageNo: 1,
pageSize: this.singlePageSize,
...this.queryForm
}
this.$loading(true, 'tableLoading')
getMyPayPlanPage(queryParams)
.then((res) => {
let resList = (res.data && res.data.list) || []
this.tableList = resList?.map((item) => {
return {
...item,
percentageName: item.paymentPlanConfigDO
? item.paymentPlanConfigDO.name
: null
}
})
})
.finally(() => {
this.$nextTick(() => {
this.refreshing = false
this.$loading(false, 'tableLoading')
})
// this.$loading(false, `cTableLoading_${this.listType}`)
})
},
//
rstSearch() {
this.handleInit()
},
handleBack() {
history.back()
},
handleInitSpList() {
let queryParams = {
pageNo: 1,
pageSize: this.singlePageSize
}
getMyPayPlanPage(queryParams).then((res) => {
this.spList = res.data.list || []
})
},
handleSetSingle(id) {
return new Promise((resolve, reject) => {
let listQuery = {
pageNo: 1,
pageSize: this.singlePageSize
}
getMyPayPlanPage(listQuery)
.then((res) => {
let arr = ((res.data && res.data.list) || []).filter(
(item) => item.id == id
)
resolve(arr)
})
.catch((err) => {
reject(err)
})
})
},
handleUpdataInfo(id, index) {
this.$loading(true, 'singleReset')
this.handleSetSingle(id)
.then((arr) => {
if (arr.length) {
this.tableList.splice(index, 1, arr[0])
}
this.$loading(false, 'singleReset')
})
.catch(() => {
this.$loading(false, 'singleReset')
})
},
handleListQuery(paramProp) {
this.listQuery = {
...paramProp,
invoiceDate: paramProp.startDate && [
dayjs(paramProp.startDate).format('YYYY-MM-DD HH:ss:mm'),
dayjs(paramProp.endDate).format('YYYY-MM-DD HH:ss:mm')
]
}
this.finished = false
this.handleRefresh()
},
handleScroll() {
getScrollTop().then((height) => {
this.height = height
})
},
handleScrollInit() {
window.addEventListener('scroll', this.handleScroll)
window.scrollTo(0, this.height)
// this.handleInit()
},
handleScrollToTop() {
window.scrollTo(0, 0)
this.height = 0
},
handleToAdd() {
/* this.$router.push({
path: '/supplier',
query: {
type: 'add'
}
}) */
},
handleAllRefresh() {
// this.getTableList('refresh')
this.handleRefresh()
},
handleInit() {
this.handleInitSpList()
this.getTableList('init')
},
handleTopPage() {
window.scrollTo(0, 0)
this.$nextTick(() => {
this.height = 0
})
},
handleRefresh() {
this.listQuery.pageNo = 1
this.finished = false
this.getTableList('refresh')
},
handleLoad() {
this.listQuery.pageNo += 1
this.getTableList('more')
},
getTableList(val) {
// const { shellIdsLocal, collegeInfoIdLocal, startDate, endDate, keyword, type, method, targets, usePersonId, teacherIds, chargePersonIds } = this.listQuery
const query = {
...this.listQuery
}
this.moreLoading = true
this.$loading(true, 'tableLoading')
getMyPayPlanPage(query)
.then((res) => {
let resList = (res.data && res.data.list) || []
if (['init', 'refresh'].includes(val)) {
this.tableList = resList
this.handleScrollToTop()
} else {
this.tableList = this.tableList.concat(resList)
}
if (resList.length < this.pageSize) {
this.finished = true
}
this.tableList = (this.tableList || []).map((item) => {
return {
...item,
percentageName: item.paymentPlanConfigDO
? item.paymentPlanConfigDO.name
: null
}
})
})
.finally(() => {
this.$nextTick(() => {
this.moreLoading = false
this.refreshing = false
this.$loading(false, 'tableLoading')
})
// this.$loading(false, `cTableLoading_${this.listType}`)
})
}
}
}
</script>
<style scoped lang="scss">
// @import '~@/assets/style/common/list.scss';
</style>

@ -0,0 +1,163 @@
$hf-contain-p: 0 1.2rem;
$hf-contain-f: 0.76rem;
$hf-high-color: #0088fe;
//
$hf-high-color: #0088fe;
.header-filter {
.hf-r-icon-bg-act {
.van-icon {
color: $hf-high-color !important;
}
}
background: #ffffff;
display: flex;
justify-content: space-between;
align-items: center;
padding: $hf-contain-p;
.hf-l-list {
.hf-l-list-menu {
/deep/.van-dropdown-menu__bar {
height: auto;
box-shadow: none;
.van-dropdown-menu__item {
flex: inherit;
margin-right: 1rem;
.van-dropdown-menu__title {
padding: 0.6rem 0.4rem 0.6rem 0;
font-size: $hf-contain-f;
&::after {
border: 1px solid;
padding: 0.1rem;
border-color: transparent transparent #333333 #333333;
}
}
.van-dropdown-menu__title--active {
color: $hf-high-color;
&::after {
border-color: transparent transparent $hf-high-color $hf-high-color;
}
}
}
}
}
}
.hf-r-list {
display: flex;
.hf-r-list-item {
margin-left: 0.4rem;
.hf-r-icon-bg {
background: #d7d7d7;
width: 1.5rem;
height: 1.5rem;
border-radius: 1.5rem;
display: flex;
justify-content: center;
align-items: center;
color: #ffffff;
}
}
}
.hf-drop-view {
padding: $hf-contain-p;
padding-bottom: 0.8rem;
.hf-drop-contain {
display: flex;
flex-wrap: wrap;
padding-bottom: 0.8rem;
.hr-drop-filter-item {
padding: $hf-contain-p;
font-size: $hf-contain-f;
width: 50%;
box-sizing: border-box;
padding: 0.8rem 0;
}
.hr-drop-filter-item-act {
color: $hf-high-color;
}
}
//
.hf-drop-quick {
margin-top: 1rem;
.hf-drop-quick-item {
margin-bottom: 1.5rem;
.hf-drop-quick-title {
color: #333333;
font-size: 0.84rem;
}
.hf-drop-quick-list {
display: flex;
margin: 0.6rem 0;
font-size: $hf-contain-f;
.hf-drop-quick-list-item {
border: 1px solid #f3f3f3;
background: #f3f3f3;
margin-right: 0.8rem;
padding: 0.4rem 0.6rem;
border-radius: 1rem;
transition: background-color, color 0.2s linear;
}
.hf-drop-quick-list-item-act {
background: #ffffff;
color: $hf-high-color;
border: 1px solid $hf-high-color;
}
.hf-drop-quick-list-item-checkbox {
margin-right: 1rem;
/deep/.van-checkbox__label {
margin-left: 0.2rem;
}
}
}
.hf-drop-quick-calendar {
/deep/.van-calendar__header {
box-shadow: none;
border-bottom: 1px solid #eeeeee;
}
}
}
}
}
.hf-drop-contain-empty {
color: #666666;
text-align: center;
font-size: 0.8rem;
}
.searchInput {
padding: 0.3rem 0;
width: 100%;
.van-search__content {
background: #ffffff;
border: 1px solid #f3f3f3;
border-radius: 0.3rem;
/deep/input {
caret-color: #0088fe;
}
}
}
}

@ -0,0 +1,23 @@
<template>
<!-- 付款计划列表 -->
<div>
<UserList listType="myPayPlan" ref="userList" />
</div>
</template>
<script>
export default {
name: 'contract-myPayPlan',
created() {
//
this.$EventBus.$emit('handleAddLive', 'contract-myPayPlan')
},
activated() {
//
this.$EventBus.$emit('handleResetLive', 'contract-myPayPlan')
},
components: {
UserList: () => import('./components/UserList')
}
}
</script>

@ -0,0 +1,253 @@
<template>
<div id="orderHeader">
<div class="hf-l-seacrch" v-if="isActSearch">
<form action="/">
<van-search v-model="listQuery.contractNumber" shape="round" show-action placeholder="请输入合同编号" :clearable="false" @search="onKeywordSearch" @cancel="onKeywordCancel" />
</form>
</div>
<div class="header-filter" :style="isActSearch ? 'padding: 0 0 0 0.5rem' : ''">
<div class="hf-l-list" v-show="!isActSearch">
<van-dropdown-menu class="hf-l-list-menu">
<!-- 供应商名称 -->
<van-dropdown-item title="供应商名称" :title-class="isHtab1 ? 'common-act-color' : ''" @open="handleDropOpen()" ref="vanDropItem1">
<div class="hf-drop-view">
<div class="hf-drop-contain">
<div class="hr-drop-filter-item" @click.stop="handleClass1(item.id)" v-for="item in spList" :key="item.value">
<van-icon v-if="listQuery.supplierId && listQuery.supplierId == item.value" name="success" color="#0088FE" />
<span :class="{'hr-drop-filter-item-act': listQuery.supplierId && listQuery.supplierId == item.id }">{{item.companyName}}</span>
</div>
</div>
<div class="common-double-button">
<van-button class="common-double-button-l" @click="handleReset()"></van-button>
<van-button class="common-double-button-r" @click="handleConfirm"></van-button>
</div>
</div>
</van-dropdown-item>
<!-- 类别 -->
<van-dropdown-item title="合同状态" :title-class="isHtab4 ? 'common-act-color' : ''" @open="handleDropOpen()" ref="vanDropItem4">
<div class="hf-drop-view">
<div class="hf-drop-contain">
<div class="hr-drop-filter-item" @click.stop="handleClass2(item.value)" v-for="item in stateList" :key="item.value">
<van-icon v-if="listQuery.contractType && listQuery.contractType == item.value" name="success" color="#0088FE" />
<span :class="{'hr-drop-filter-item-act': listQuery.contractType && listQuery.contractType == item.value }">{{item.label}}</span>
</div>
</div>
<div class="common-double-button">
<van-button class="common-double-button-l" @click="handleReset()"></van-button>
<van-button class="common-double-button-r" @click="handleConfirm"></van-button>
</div>
</div>
</van-dropdown-item>
</van-dropdown-menu>
</div>
<div class="hf-r-list" v-show="!isActSearch">
<div class="hf-r-list-item" @click="handleSearch">
<div class="hf-r-icon-bg">
<van-icon name="search" class="hf-r-icon" />
</div>
</div>
</div>
</div>
<van-popup position="bottom" safe-area-inset-bottom v-model="moreFilterShow" :lock-scroll="true" round get-container="#app" lazy-render>
<div class="common-popup moreContain">
<div class="common-popup-header">
<div></div>
<div class="common-popup-header-title">
<span>筛选</span>
</div>
<div class="common-popup-header-close">
<van-icon name="cross" @click="moreFilterShow = false" />
</div>
</div>
<div class="common-popup-body moreContain-body">
<van-form ref="filterForm" :show-error-message="false" validate-trigger="" :submit-on-enter="false">
<RePick v-model="listQuery.remark" label="bumen" :list="areaTree" isLastSelect isCascader isShowSearch title="行程" titleKey="name" isCascaderAllLevelNameSymnol isCell clearable />
</van-form>
</div>
<div class="common-popup-footer">
<van-button style="width: 8rem; margin-right: 1rem;" round @click="handleMoreReset"></van-button>
<van-button type="info" style="width: 8rem;" round @click.stop="handleMoreConfirm">确认</van-button>
</div>
</div>
</van-popup>
</div>
</template>
<script>
import { mapState, mapGetters } from 'vuex'
import { getDictDatas, DICT_TYPE } from "@/utils/dict";
import { dayTextFormatter } from '@/utils'
import dayjs from 'dayjs'
export default {
props: {
listType: String, // 'detail'
paramProp: Object,
spList: Array, //
},
components: {
RePick: () => import('@/components/ReComponents/RePick'),
},
data() {
return {
defaultDate: null,
dayTextFormatter: dayTextFormatter,
isActSearch: false,
moreFilterShow: false,
isSearch: false,
// courseStateList: [
// { text: '', id: 25 },
// { text: '', id: 0 },
// { text: '', id: 1 }
// ],
listQuery: {},
}
},
computed: {
isHtab1() {
let isShow = false
if (this.paramProp.supplierId) isShow = true
return isShow
},
isHtab4() {
let isShow = false
if (this.paramProp.contractType) isShow = true
return isShow
},
areaTree() {
return this.$store.getters.areaTree
},
isMoreAct() {
let bol = false
const listQuery = this.paramProp || {}
if (listQuery.remark) {
bol = true
}
return bol
},
stateList() {
return getDictDatas(DICT_TYPE.BS_EXPENSE_APPLY_STATUS) || []
}
},
methods: {
//
handleDateReset() {
this.listQuery.startDate = null
this.listQuery.endDate = null
this.defaultDate = null
this.$refs.vanCalendar && this.$refs.vanCalendar.reset()
},
handleDateSelect(val) {
if (val.filter(item => item).length === 2) {
this.listQuery.startDate = `${dayjs(val[0]).format('YYYY/MM/DD')} 00:00:00 `
this.listQuery.endDate = `${dayjs(val[1]).format('YYYY/MM/DD')} 23:59:59 `
}
},
handleQuickDate(e) {
this.defaultDate = [dayjs(e.time[0]).toDate(), dayjs(e.time[1]).toDate()]
this.listQuery.startDate = `${e.time[0]} 00:00:00`
this.listQuery.endDate = `${e.time[1]} 23:59:59`
},
handleConfirm() {
this.$refs.vanDropItem4 && this.$refs.vanDropItem4.toggle(false)
this.$refs.vanDropItem1 && this.$refs.vanDropItem1.toggle(false)
this.$emit('onListQuery', this.listQuery)
},
onKeywordCancel() {
this.listQuery.contractNumber = null
this.isActSearch = false
this.isSearch = false
this.onKeywordSearch()
},
onKeywordSearch() {
this.$emit('onListQuery', this.listQuery)
},
//
handleClass1(val) {
this.listQuery.supplierId = val
},
handleClass2(val) {
this.listQuery.contractType = val
},
// type : 1 2 3
handleState(val, type) {
if (type == 1) {
const i = this.listQuery.states.findIndex(item => item === val)
if (i > -1) {
this.listQuery.states.splice(i, 1)
} else {
this.listQuery.states.push(val)
}
}
if (type == 2 || type == 3) {
const i = this.listQuery.types.findIndex(item => item === val)
if (i > -1) {
this.listQuery.types.splice(i, 1)
} else {
this.listQuery.types.push(val)
}
}
},
handleInit() {
this.listQuery = {
...this.paramProp
}
if (!(this.listQuery.startDate && this.listQuery.endDate)) {
this.handleDateReset()
}
},
handleDropOpen() {
this.handleInit()
},
onSearch() {
this.handleConfirm()
},
//
handleSearch() {
this.handleInit()
this.listQuery.contractNumber = this.paramProp.contractNumber
this.isActSearch = true
},
handleSearchCancel() {
this.listQuery.contractNumber = null
this.isActSearch = false
this.onKeywordSearch()
},
//
handleMoreFilter() {
this.handleInit()
this.moreFilterShow = true
},
//
handleMoreReset() {
this.listQuery.remark = null
},
handleMoreConfirm() {
this.$emit('onListQuery', this.listQuery)
this.moreFilterShow = false
},
handleReset() {
this.listQuery.contractType = null
this.listQuery.supplierId = null
},
},
}
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>

@ -0,0 +1,340 @@
<template>
<!-- 供应商信息列表 -->
<div>
<!-- <HeaderFilter
:listType="listType"
:spList="spList"
@onListQuery="handleListQuery"
:paramProp="listQuery"
/> -->
<!-- 重新的搜索 -->
<div style="padding: 10px">
<van-field
v-model="queryForm.companyName"
placeholder="请输入"
label="供应商名称"
clearable
input-align="left"
/>
<RePick
v-model="queryForm.companyType"
titleKey="label"
idKey="value"
title="供应商类别"
:name="`companyType`"
label="供应商类别"
:list="getDictDatas(DICT_TYPE.BS_ENTERPRISEL_TYPE)"
isCell
clearable
input-align="left"
/>
<div
style="display: flex; justify-content: space-around; margin-top: 10px"
>
<van-button
type="info"
@click="handleSearch"
size="small"
style="width: 80px"
>搜索</van-button
>
<van-button
type="info"
@click="rstSearch"
size="small"
style="width: 80px"
>重置</van-button
>
</div>
</div>
<RMList
:moreLoading.sync="moreLoading"
:refreshing.sync="refreshing"
:finished.sync="finished"
@onLoad="handleLoad"
@onRefresh="handleRefresh"
isMore
:tableList="tableList"
>
<div>
<MysupplierMsgListCard
v-for="(item, index) in tableList"
:key="item.id"
:itemData="item"
:listType="listType"
@onUpdataInfo="handleUpdataInfo($event, index)"
@onAllRefresh="handleAllRefresh"
/>
</div>
</RMList>
<div class="common-bottom-btns" style="bottom: 8rem">
<div class="common-bottom-btn" @click="handleTopPage">
<img src="@/assets/images/icons/top.png" alt="" />
<span>回到顶部</span>
</div>
</div>
<div
class="common-bottom-btns"
v-hasPermi="['bs:supplier-contract:create']"
style="bottom: 10rem"
>
<div class="common-bottom-btn" @click="handleToAdd">
<img src="@/assets/images/icons/add.png" alt="" />
<span>添加申请</span>
</div>
</div>
<div class="common-bottom-btns" style="bottom: 6rem">
<div class="common-bottom-btn" @click="handleBack">
<img src="@/assets/images/icons/home.png" alt="" />
<span>返回首页</span>
</div>
</div>
</div>
</template>
<script>
import { getScrollTop } from '@/utils'
// import { getSupplierCompanyPage } from '@/api/bs/quotationSheet'
// import { getSupplierContractPage } from '@/api/bs/supplierContract' //
import {
createSupplierCompany,
deleteSupplierCompany,
exportSupplierCompanyExcel,
getSupplierCompanyPage,
updateSupplierCompany,
srCttImportTemplate
} from '@/api/bs/supplierMsg'
import {
getDictDataLabel,
handleFilterStatus,
getDictDatas
} from '@/utils/dict'
import { mapState } from 'vuex'
import dayjs from 'dayjs'
export default {
props: {
listType: String // EnrollmentOrder: EnrollmentCollection: ShiftRecord: WaitPay:
},
components: {
// HeaderFilter: () => import('./HeaderFilter.vue'),
RMList: () => import('@/components/ReComponents/RMList'),
MysupplierMsgListCard: () => import('@/components/MysupplierMsgListCard'),
RePick: () => import('@/components/ReComponents/RePick')
},
data() {
return {
height: 0,
moreLoading: false,
refreshing: false,
finished: false,
tableList: [],
spList: [],
listQuery: {
pageNo: 1,
pageSize: 10,
companyName: null,
companyNumber: null,
companyType: null,
legalPerson: null,
phone: null,
creditCode: null,
address: null,
businessStratDate: [],
businessEndDate: [],
capital: null,
bankName: null,
bankNumber: null,
bankOfDeposit: null,
isRegister: null,
status: null,
remark: null,
files: null,
createTime: []
},
//
queryForm: {
companyName: null,
companyType: null
}
}
},
computed: {
...mapState({
singlePageSize: (state) => state.common.setting.singlePageSize,
pageSize: (state) => state.common.setting.pageSize
})
},
activated() {
this.handleScrollInit()
},
deactivated() {
window.removeEventListener('scroll', this.handleScroll)
},
created() {
this.handleInit()
console.log(getDictDatas(this.DICT_TYPE.BS_ENTERPRISEL_TYPE))
},
methods: {
//
handleSearch() {
let queryParams = {
pageNo: 1,
pageSize: this.singlePageSize,
...this.queryForm
}
this.$loading(true, 'tableLoading')
getSupplierCompanyPage(queryParams)
.then((res) => {
let resList = (res.data && res.data.list) || []
this.tableList = resList
})
.finally(() => {
this.$nextTick(() => {
this.refreshing = false
this.$loading(false, 'tableLoading')
})
// this.$loading(false, `cTableLoading_${this.listType}`)
})
},
//
rstSearch() {
this.handleInit()
},
handleBack() {
history.back()
},
handleInitSpList() {
let queryParams = {
pageNo: 1,
pageSize: this.singlePageSize
}
getSupplierCompanyPage(queryParams).then((res) => {
this.spList = res.data.list || []
})
},
handleSetSingle(id) {
return new Promise((resolve, reject) => {
let listQuery = {
pageNo: 1,
pageSize: this.singlePageSize
}
getSupplierCompanyPage(listQuery)
.then((res) => {
let arr = ((res.data && res.data.list) || []).filter(
(item) => item.id == id
)
resolve(arr)
})
.catch((err) => {
reject(err)
})
})
},
handleUpdataInfo(id, index) {
this.$loading(true, 'singleReset')
this.handleSetSingle(id)
.then((arr) => {
if (arr.length) {
this.tableList.splice(index, 1, arr[0])
}
this.$loading(false, 'singleReset')
})
.catch(() => {
this.$loading(false, 'singleReset')
})
},
handleListQuery(paramProp) {
this.listQuery = {
...paramProp,
invoiceDate: paramProp.startDate && [
dayjs(paramProp.startDate).format('YYYY-MM-DD HH:ss:mm'),
dayjs(paramProp.endDate).format('YYYY-MM-DD HH:ss:mm')
]
}
this.finished = false
this.handleRefresh()
},
handleScroll() {
getScrollTop().then((height) => {
this.height = height
})
},
handleScrollInit() {
window.addEventListener('scroll', this.handleScroll)
window.scrollTo(0, this.height)
// this.handleInit()
},
handleScrollToTop() {
window.scrollTo(0, 0)
this.height = 0
},
handleToAdd() {
/* this.$router.push({
path: '/supplier',
query: {
type: 'add'
}
}) */
},
handleAllRefresh() {
// this.getTableList('refresh')
this.handleRefresh()
},
handleInit() {
this.handleInitSpList()
this.getTableList('init')
},
handleTopPage() {
window.scrollTo(0, 0)
this.$nextTick(() => {
this.height = 0
})
},
handleRefresh() {
this.listQuery.pageNo = 1
this.finished = false
this.getTableList('refresh')
},
handleLoad() {
this.listQuery.pageNo += 1
this.getTableList('more')
},
getTableList(val) {
// const { shellIdsLocal, collegeInfoIdLocal, startDate, endDate, keyword, type, method, targets, usePersonId, teacherIds, chargePersonIds } = this.listQuery
const query = {
...this.listQuery
}
this.moreLoading = true
this.$loading(true, 'tableLoading')
getSupplierCompanyPage(query)
.then((res) => {
let resList = (res.data && res.data.list) || []
if (['init', 'refresh'].includes(val)) {
this.tableList = resList
this.handleScrollToTop()
} else {
this.tableList = this.tableList.concat(resList)
}
if (resList.length < this.pageSize) {
this.finished = true
}
})
.finally(() => {
this.$nextTick(() => {
this.moreLoading = false
this.refreshing = false
this.$loading(false, 'tableLoading')
})
// this.$loading(false, `cTableLoading_${this.listType}`)
})
}
}
}
</script>
<style scoped lang="scss">
// @import '~@/assets/style/common/list.scss';
</style>

@ -0,0 +1,163 @@
$hf-contain-p: 0 1.2rem;
$hf-contain-f: 0.76rem;
$hf-high-color: #0088fe;
//
$hf-high-color: #0088fe;
.header-filter {
.hf-r-icon-bg-act {
.van-icon {
color: $hf-high-color !important;
}
}
background: #ffffff;
display: flex;
justify-content: space-between;
align-items: center;
padding: $hf-contain-p;
.hf-l-list {
.hf-l-list-menu {
/deep/.van-dropdown-menu__bar {
height: auto;
box-shadow: none;
.van-dropdown-menu__item {
flex: inherit;
margin-right: 1rem;
.van-dropdown-menu__title {
padding: 0.6rem 0.4rem 0.6rem 0;
font-size: $hf-contain-f;
&::after {
border: 1px solid;
padding: 0.1rem;
border-color: transparent transparent #333333 #333333;
}
}
.van-dropdown-menu__title--active {
color: $hf-high-color;
&::after {
border-color: transparent transparent $hf-high-color $hf-high-color;
}
}
}
}
}
}
.hf-r-list {
display: flex;
.hf-r-list-item {
margin-left: 0.4rem;
.hf-r-icon-bg {
background: #d7d7d7;
width: 1.5rem;
height: 1.5rem;
border-radius: 1.5rem;
display: flex;
justify-content: center;
align-items: center;
color: #ffffff;
}
}
}
.hf-drop-view {
padding: $hf-contain-p;
padding-bottom: 0.8rem;
.hf-drop-contain {
display: flex;
flex-wrap: wrap;
padding-bottom: 0.8rem;
.hr-drop-filter-item {
padding: $hf-contain-p;
font-size: $hf-contain-f;
width: 50%;
box-sizing: border-box;
padding: 0.8rem 0;
}
.hr-drop-filter-item-act {
color: $hf-high-color;
}
}
//
.hf-drop-quick {
margin-top: 1rem;
.hf-drop-quick-item {
margin-bottom: 1.5rem;
.hf-drop-quick-title {
color: #333333;
font-size: 0.84rem;
}
.hf-drop-quick-list {
display: flex;
margin: 0.6rem 0;
font-size: $hf-contain-f;
.hf-drop-quick-list-item {
border: 1px solid #f3f3f3;
background: #f3f3f3;
margin-right: 0.8rem;
padding: 0.4rem 0.6rem;
border-radius: 1rem;
transition: background-color, color 0.2s linear;
}
.hf-drop-quick-list-item-act {
background: #ffffff;
color: $hf-high-color;
border: 1px solid $hf-high-color;
}
.hf-drop-quick-list-item-checkbox {
margin-right: 1rem;
/deep/.van-checkbox__label {
margin-left: 0.2rem;
}
}
}
.hf-drop-quick-calendar {
/deep/.van-calendar__header {
box-shadow: none;
border-bottom: 1px solid #eeeeee;
}
}
}
}
}
.hf-drop-contain-empty {
color: #666666;
text-align: center;
font-size: 0.8rem;
}
.searchInput {
padding: 0.3rem 0;
width: 100%;
.van-search__content {
background: #ffffff;
border: 1px solid #f3f3f3;
border-radius: 0.3rem;
/deep/input {
caret-color: #0088fe;
}
}
}
}

@ -0,0 +1,23 @@
<template>
<!-- 供应商信息列表 -->
<div>
<UserList listType="mySupplierMsg" ref="userList" />
</div>
</template>
<script>
export default {
name: 'contract-mySupplierMsg',
created() {
//
this.$EventBus.$emit('handleAddLive', 'contract-mySupplierMsg')
},
activated() {
//
this.$EventBus.$emit('handleResetLive', 'contract-mySupplierMsg')
},
components: {
UserList: () => import('./components/UserList')
}
}
</script>

@ -0,0 +1,337 @@
<template>
<div class="common-list-contain">
<div class="common-form">
<van-form
ref="form"
:show-error-message="false"
validate-trigger=""
:submit-on-enter="false"
>
<div class="trips-box">
<div class="item-box">
<RePick
v-model="form.type"
title="是否关联合同"
:name="`type`"
titleKey="label"
idKey="vulue"
:disabled="disabled"
label="是否关联合同"
label-width="8rem"
:list="typeList"
isCell
clearable
required
/>
<van-field
v-model="form.contractNumber"
required
placeholder="请输入"
:disabled="disabled"
:rules="[{ required: true, message: '请输入' }]"
label="计划编号"
clearable
input-align="right"
/>
<van-field
v-model="form.startEnd"
placeholder="请输入"
:disabled="disabled"
label="计划起止时间"
clearable
input-align="right"
/>
<van-field
v-model="form.contractName"
placeholder="请输入"
:disabled="disabled"
label="计划名称"
clearable
input-align="right"
/>
<van-field
v-model="form.supplierName"
placeholder="请输入"
:disabled="disabled"
label="供应商名称"
clearable
input-align="right"
/>
<van-field
v-model="form.actualAmount"
placeholder="请输入"
:disabled="disabled"
label="总金额"
clearable
input-align="right"
required
/>
<RePick
v-model="form.payMentStatus"
title="付款状态"
:name="`payMentStatus`"
titleKey="label"
idKey="vulue"
:disabled="disabled"
label="付款状态"
label-width="8rem"
:list="payMentStatusList"
isCell
clearable
required
/>
<RePick
v-model="form.invoiceStatus"
title="开票状态"
:name="`invoiceStatus`"
titleKey="label"
idKey="vulue"
:disabled="disabled"
label="开票状态"
label-width="8rem"
:list="invoiceStatusList"
isCell
clearable
required
/>
<van-field
v-model="form.managerPhone"
placeholder="请输入"
:disabled="disabled"
label="联系方式"
clearable
input-align="right"
/>
<van-field
v-model="form.managerName"
placeholder="请输入"
:disabled="disabled"
label="联系人"
clearable
input-align="right"
/>
<van-field
v-model="form.paymentPlanDetailDOList[0].name"
placeholder="请输入"
:disabled="disabled"
label="付款规则配置名称"
clearable
input-align="right"
required
/>
<van-field
right-icon="arrow"
:disabled="disabled"
placeholder="请选择"
v-model="form.paymentPlanDetailDOList[0].planTime"
label="预计付款时间"
clear-trigger="always"
input-align="right"
/>
<van-field
right-icon="arrow"
:disabled="disabled"
placeholder="请选择"
v-model="form.paymentPlanDetailDOList[0].keyName"
label="期限名称"
clear-trigger="always"
input-align="right"
/>
<van-field
right-icon="arrow"
:disabled="disabled"
placeholder="请选择"
v-model="form.paymentPlanDetailDOList[0].statusName"
label="状态"
clear-trigger="always"
input-align="right"
/>
<van-field
right-icon="arrow"
:disabled="disabled"
placeholder="请选择"
v-model="form.paymentPlanDetailDOList[0].percentage"
label="比例"
clear-trigger="always"
input-align="right"
/>
<van-field
right-icon="arrow"
:disabled="disabled"
placeholder="请选择"
v-model="form.paymentPlanDetailDOList[0].actualAmount"
label="实付金额"
clear-trigger="always"
input-align="right"
/>
<van-field
right-icon="arrow"
:disabled="disabled"
placeholder="请选择"
v-model="form.remark"
label="备注"
clear-trigger="always"
input-align="right"
/>
</div>
</div>
</van-form>
</div>
<BottomBtn
ref="BottomBtn"
:isAuthorised="isAuthorised"
@onBtConfirm="handleBtConfirm"
/>
</div>
</template>
<script>
import { listData } from '@/api/system/dict/data'
import { getDictDatas } from '@/utils/dict'
import dayjs from 'dayjs'
import { getPaymentPlan } from '@/api/bs/myPayPlan'
export default {
name: 'contract-payPlan',
components: {
RePick: () => import('@/components/ReComponents/RePick'),
BottomBtn: () => import('@/components/BottomBtn')
},
data() {
return {
signatoryList: [
{
label: '存续',
value: '1'
},
{
label: '注销',
value: '2'
}
],
typeList: [
{
label: '有合同',
value: 1
},
{
label: '无合同',
value: 2
}
],
payMentStatusList: [
{
label: '已付款',
value: 1
},
{
label: '未付款',
value: 2
}
],
invoiceStatusList: [
{
label: '已开票',
value: 1
},
{
label: '未开票',
value: 2
}
],
gysTypeList: [
/* {
label: '五金类',
value: '1'
} */
],
isAuthorised: false,
typeStr: null, // show: edit: :
id: null,
//
loading: true,
//
form: {
paymentPlanDetailDOList: [
{
actualAmount: null,
percentage: null,
statusName: null,
keyName: null,
name: null,
planTime: null
}
]
}
}
},
computed: {
disabled() {
return ['show'].includes(this.$route.query.type)
}
},
created() {
this.$loading(true)
this.handleInitList().then(() => {
this.$loading(false)
this.handleInitForm()
})
},
methods: {
handleInitForm() {
const { id, type } = this.$route.query || {}
this.typeStr = type
if (id) {
getPaymentPlan(id).then((res) => {
this.form = {
...(res.data || {})
}
if (this.form.startTime && this.form.endTime) {
this.form.startEnd = `${dayjs(this.form.startTime).format(
'YYYY/MM/DD'
)} - ${dayjs(this.form.endTime).format('YYYY/MM/DD')}`
} else {
this.form.startEnd = ''
}
this.form.reviewTime = this.form.reviewTime
? `${dayjs(this.form.reviewTime).format('YYYY/MM/DD')}`
: ''
this.isAuthorised = res.data.isAuthorised
this.$nextTick(() => {
this.$refs.BottomBtn.handleFilterBtnList()
})
})
}
},
handleInitList() {
return new Promise((resolve) => {
listData({
pageNo: 1,
pageSize: 50,
dictType: 'material_type'
}).then((res) => {
this.gysTypeList = res.data.list || []
resolve()
})
listData({
pageNo: 1,
pageSize: 50,
dictType: 'gys_level'
}).then((res) => {
this.gysLevelList = res.data.list || []
resolve()
})
})
},
handleBtConfirm() {
console.log(111)
}
}
}
</script>
<style scoped lang="scss">
@import '~@/assets/style/common/form.scss';
</style>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,312 @@
<template>
<div class="common-list-contain">
<div class="common-form">
<van-form
ref="form"
:show-error-message="false"
validate-trigger=""
:submit-on-enter="false"
>
<div class="trips-box">
<div class="item-box">
<van-field
v-model="form.companyName"
required
placeholder="请输入"
:disabled="disabled"
:rules="[{ required: true, message: '请输入' }]"
label="供应商名称"
clearable
input-align="right"
/>
<van-field
v-model="form.phone"
required
placeholder="请输入"
:disabled="disabled"
:rules="[{ required: true, message: '请输入' }]"
label="联系方式"
clearable
input-align="right"
/>
<van-field
v-model="form.postbox"
required
placeholder="请输入"
:disabled="disabled"
:rules="[{ required: true, message: '请输入' }]"
label="邮箱"
clearable
input-align="right"
/>
<RePick
v-model="form.materialsType"
title="供应商材料类别"
:name="`materialsType`"
titleKey="label"
idKey="vulue"
:disabled="disabled"
label="供应商材料类别"
label-width="8rem"
:list="gysTypeList"
isCell
clearable
/>
<van-field
v-model="form.legalPerson"
placeholder="请输入"
:disabled="disabled"
label="联系人"
clearable
input-align="right"
/>
<RePick
v-model="form.companyType"
titleKey="label"
idKey="id"
title="供应商类别"
:name="`companyType`"
:disabled="disabled"
label="供应商类别"
:list="getDictDatas(DICT_TYPE.BS_ENTERPRISEL_TYPE)"
isCell
clearable
/>
<van-field
right-icon="arrow"
:disabled="disabled"
placeholder="请选择"
v-model="form.reviewTime"
label="评审日期"
clear-trigger="always"
input-align="right"
/>
<van-field
right-icon="arrow"
:disabled="disabled"
placeholder="请选择"
v-model="form.validTime"
label="有效日期"
clear-trigger="always"
input-align="right"
/>
<van-field
v-model="form.creditCode"
placeholder="请输入"
:disabled="disabled"
label="同意社会信用代码"
label-width="10rem"
clearable
input-align="right"
/>
<van-field
v-model="form.address"
placeholder="请输入"
:disabled="disabled"
label="地址"
clearable
input-align="right"
/>
<van-field
v-model="form.purchaserCode"
placeholder="请输入"
:disabled="disabled"
label="采购员代码"
clearable
input-align="right"
/>
<van-field
v-model="form.purchaserId"
placeholder="请输入"
:disabled="disabled"
label="采购员(昵称)"
clearable
input-align="right"
/>
<RePick
v-model="form.exitStatus"
titleKey="label"
idKey="value"
title="营业状态"
:name="`exitStatus`"
:disabled="disabled"
label="营业状态"
:list="signatoryList"
isCell
clearable
/>
<van-field
v-model="form.capital"
placeholder="请输入"
:disabled="disabled"
label="注册资本"
clearable
input-align="right"
/>
<RePick
v-model="form.gradeGys"
titleKey="label"
idKey="id"
title="等级"
:name="`gradeGys`"
:disabled="disabled"
label="等级"
:list="getDictDatas(DICT_TYPE.GYS_LEVEL)"
isCell
clearable
/>
<van-field
label="是否注册"
name="isRegister"
:disabled="disabled"
input-align="right"
label-width="9em"
>
<template #input>
<van-radio-group
:disabled="disabled"
v-model="form.isRegister"
direction="horizontal"
>
<van-radio :name="1"></van-radio>
<van-radio :name="0"></van-radio>
</van-radio-group>
</template>
</van-field>
</div>
</div>
</van-form>
</div>
<div class="trips-box">
<div class="item-box">
<UploadFile :typeStr="typeStr" :fileList="form.files" />
</div>
</div>
<BottomBtn
ref="BottomBtn"
:isAuthorised="isAuthorised"
@onBtConfirm="handleBtConfirm"
/>
</div>
</template>
<script>
import { listData } from '@/api/system/dict/data'
import {
getDictDataLabel,
handleFilterStatus,
getDictDatas
} from '@/utils/dict'
import dayjs from 'dayjs'
import {
baiduScanApi,
createSupplierCompany,
getSupplierCompany,
updateSupplierCompany
} from '@/api/procurement/supplierMsg'
export default {
name: 'contract-supplierMsg',
components: {
UploadFile: () => import('@/components/UploadFile'),
RePick: () => import('@/components/ReComponents/RePick'),
BottomBtn: () => import('@/components/BottomBtn')
},
data() {
return {
signatoryList: [
{
label: '存续',
value: '1'
},
{
label: '注销',
value: '2'
}
],
gysTypeList: [
/* {
label: '五金类',
value: '1'
} */
],
isAuthorised: false,
typeStr: null, // show: edit: :
id: null,
//
loading: true,
//
form: {}
}
},
computed: {
disabled() {
return ['show'].includes(this.$route.query.type)
}
},
created() {
this.$loading(true)
this.handleInitList().then(() => {
this.$loading(false)
this.handleInitForm()
})
},
methods: {
handleInitForm() {
const { id, type } = this.$route.query || {}
this.typeStr = type
if (id) {
getSupplierCompany(id).then((res) => {
this.form = {
// list: res.data.bankVos,
exitStatus: null,
...(res.data || {}),
logo: res.data.files
}
this.form.purchaserId = Number(this.form.purchaserId)
this.form.gradeGys = String(this.form.gradeGys)
this.form.materialsType = String(this.form.materialsType)
this.form.companyType = String(this.form.companyType)
this.form.validTime = this.form.validTime
? `${dayjs(this.form.validTime).format('YYYY/MM/DD')}`
: ''
this.form.reviewTime = this.form.reviewTime
? `${dayjs(this.form.reviewTime).format('YYYY/MM/DD')}`
: ''
this.isAuthorised = res.data.isAuthorised
this.$nextTick(() => {
this.$refs.BottomBtn.handleFilterBtnList()
})
})
}
},
handleInitList() {
return new Promise((resolve) => {
listData({
pageNo: 1,
pageSize: 50,
dictType: 'material_type'
}).then((res) => {
this.gysTypeList = res.data.list || []
resolve()
})
listData({
pageNo: 1,
pageSize: 50,
dictType: 'gys_level'
}).then((res) => {
this.gysLevelList = res.data.list || []
resolve()
})
})
},
handleBtConfirm() {
console.log(111)
}
}
}
</script>
<style scoped lang="scss">
@import '~@/assets/style/common/form.scss';
</style>

@ -8,7 +8,8 @@
</div>
</van-col>
<van-col span="8">
<div class="tt-box">财务数字一体化</div>
<!-- <div class="tt-box">财务数字一体化</div> -->
<div class="tt-box">合同管理系统</div>
</van-col>
<van-col span="8" class="rt-box" @click="handleToWait">
<div class="msg-box">
@ -126,44 +127,44 @@ export default {
handleFilterList() {
this.roterList = []
let arr = [
{
/* {
row: [
// {
// route: '/trips',
// title: '',
// icon: 'logistics',
// show: this.permission_btns.includes('bs:expense-apply:create'),
// },
{
route: '/trips',
title: '出差申请',
icon: 'logistics',
show: this.permission_btns.includes('bs:expense-apply:create'),
},
{
route: '/myNewTrips',
title: '我的申请',
icon: 'manager-o',
show: checkPermission('bs/myExpenseApply/index')
},
/* {
{
route: '/myTrips',
title: '申请单',
icon: 'exchange',
show: checkPermission('bs/expenseApply/index'),
}, */
// {
// route: '/claim',
// title: '',
// icon: 'orders-o',
// show: this.permission_btns.includes('bs:expense-claim:create'),
// },
},
{
route: '/claim',
title: '报销审批',
icon: 'orders-o',
show: this.permission_btns.includes('bs:expense-claim:create'),
},
{
route: '/myNewClaim',
title: '我的报销',
icon: 'bookmark-o',
show: checkPermission('bs/myExpenseClaim/index')
},
/* {
{
route: '/myClaim',
title: '报销单',
icon: 'qr-invalid',
show: checkPermission('bs/expenseClaim/index'),
}, */
},
{
route: '/myInvoice',
title: '我的发票',
@ -172,8 +173,8 @@ export default {
}
],
title: '报销'
},
{
}, */
/* {
row: [
{
route: '/myTrips',
@ -201,24 +202,22 @@ export default {
}
],
title: '审批'
},
}, */
{
row: [
/* {
route: '/mySupplier',
title: '供应商合同审批',
icon: 'friends-o',
show: this.permission_btns.includes(
'procurement:supplierCt:list'
),
},
show: this.permission_btns.includes('procurement:supplierCt:list')
}, */
{
route: '/myCustom',
title: '客户合同审批',
icon: 'manager-o',
show: this.permission_btns.includes('bs:customer-contract:query'),
}, */
/* {
show: this.permission_btns.includes('bs:customer-contract:query')
},
{
route: '/myBidder',
title: '中标审批',
icon: 'bookmark-o',
@ -229,7 +228,7 @@ export default {
title: '付款审批',
icon: 'refund-o',
show: this.permission_btns.includes('procurement:payApply:list')
}, */
},
{
route: '/corporateReceipts',
title: '对公收款',
@ -245,7 +244,7 @@ export default {
],
title: '对公'
},
{
/* {
row: [
{
route: '/myReportForms',
@ -255,6 +254,99 @@ export default {
}
],
title: '报表'
}, */
{
row: [
{
route: '/mySupplier',
title: '供应商合同',
icon: 'friends-o',
show: true
},
{
route: '/mySupplierMsg',
title: '供应商信息列表',
icon: 'user-o',
show: true
},
{
route: '/myPay',
title: '付款申请',
icon: 'user-o',
show: true
},
{
route: '/myPayPlan',
title: '付款计划',
icon: 'user-o',
show: true
}
],
title: '采购合同'
},
{
row: [
{
route: '/myCustom',
title: '客户合同',
icon: 'user-o',
show: true
},
{
route: '/contract/cs/customer-company',
title: '客户信息列表',
icon: 'user-o',
show: true
},
{
route: '/contract/cs/getPlan',
title: '收款计划',
icon: 'user-o',
show: true
}
],
title: '销售合同'
},
{
row: [
{
route: '/contract/ct/protocolFramework',
title: '协议框架',
icon: 'user-o',
show: true
}
],
title: '通用合同'
},
{
row: [
{
route: '/contract/procure/quotation-sheet',
title: '报价单管理',
icon: 'user-o',
show: true
},
{
route: '/contract/procure/quotation-sheet-bidding',
title: '报价单中标管理',
icon: 'user-o',
show: true
},
{
route: '/contract/procure/materiel',
title: '物料管理',
icon: 'user-o',
show: true
},
{
route: '/contract/procure/supplier-ad',
title: '供应商招标',
icon: 'user-o',
show: true
}
],
title: '报价招标管理'
},
{
row: [

@ -12,7 +12,8 @@
<div class="login-contaion flex-c flex-c-center">
<div class="contain-topbg flex flex-center flex-c flex-c-center">
<img class="logo-img" src="@/assets/logo.png" alt="" />
<div class="logo-text">链友融财务数字一体化信息系统</div>
<!-- <div class="logo-text">链友融财务数字一体化信息系统</div> -->
<div class="logo-text">合同管理系统</div>
<div class="logo-text logo-text-new">OA办公每一天都高效</div>
<div class="round"></div>
</div>

Loading…
Cancel
Save