Commit c1e5b4b2 authored by dragondean@qq.com's avatar dragondean@qq.com

完善供应商

parent 476e44dc
...@@ -42,7 +42,8 @@ ...@@ -42,7 +42,8 @@
'directionalityltr', 'directionalityrtl', 'indent', '|', 'directionalityltr', 'directionalityrtl', 'indent', '|',
'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|', 'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
'simpleupload' // 'simpleupload',
'insertimage'
// , 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|', // , 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
// 'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|', // 'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
// 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|', // 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
......
...@@ -52,3 +52,12 @@ export function exportBusiPwdExcel(query) { ...@@ -52,3 +52,12 @@ export function exportBusiPwdExcel(query) {
responseType: 'blob' responseType: 'blob'
}) })
} }
// 验证业务密码
export function validatePwd(data){
return request({
url: '/ecw/busi-pwd/validate-pwd',
method: 'post',
data: data
})
}
\ No newline at end of file
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<el-breadcrumb class="app-breadcrumb" separator="/"> <el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb"> <transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path"> <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
<span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span> <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ $l(item.meta,'title') }}</span>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a> <a v-else @click.prevent="handleLink(item)">{{ $l(item.meta,'title') }}</a>
</el-breadcrumb-item> </el-breadcrumb-item>
</transition-group> </transition-group>
</el-breadcrumb> </el-breadcrumb>
......
<template>
<div class="xselect">
<el-select v-model="valueSync">
<el-option v-for="(item, index) in options" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</div>
</template>
<script>
export default {
props:{
value:{
type: String,
},
options:{
type: Array,
default(){
return []
}
}
},
watch: {
valueSync(newValue) {
this.$emit('input', newValue)
}
},
data(){
return {
valueSync: []
}
},
created() {
this.$set(this, 'valueSync', this.value)
},
methods: {
}
}
</script>
let modules = {}
const files = require.context('', false, /\.vue$/);
files.keys().forEach((filename) => {
modules[filename.slice(2, -4)] = files(filename).default || files(filename)
});
export default modules
\ No newline at end of file
<template>
<el-card shadow="never">
<div slot="header" class="clearfix card-header">
<div class="card-title">{{title}}</div>
<el-button size="mini" type="primary" icon="el-icon-plus" @click="listData.push({})"></el-button>
</div>
<el-table :data="listData" border>
<el-table-column :label="$t('序号')" width="90px">
<template slot-scope="scope">
{{scope.$index + 1}}
</template>
</el-table-column>
<template v-for="col in fields">
<el-table-column :label="col.label" :key="col.field">
<template slot-scope="{row}">
<component :is="col.tag || 'el-input'" v-model="row[col.field]" v-bind="col.attrs" />
</template>
</el-table-column>
</template>
<!-- <el-table-column label="职位">
<template slot-scope="{row}">
<el-input v-model="row.job" />
</template>
</el-table-column> -->
<el-table-column :label="$t('操作')">
<template slot-scope="scope">
<el-button type="danger" size="mini" icon="el-icon-delete" @click="del(scope.$index)"></el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<script>
/*
fields:
[
{
field: 'name',
label: '字段名'
tag: 'el-input',
attr: {}
}
]
*/
import FormComponents from './components/index.js'
export default {
components: {...FormComponents},
props:{
title: String,
fields: Array,
value: Array
},
data(){
return {
listData: []
}
},
watch:{
listData(val){
console.log('数据更新')
this.$emit('input', val)
},
value(){
this.listData = this.value
}
},
methods:{
del(index){
this.$confirm(this.$t('确定删除此行?'))
.then(res => {
this.listData.splice(index, 1)
})
}
}
}
</script>
<style scoped lang="scss">
.card-header{
display: flex;
.card-title{
flex: 1;
display: flex;
align-items: center;
font-size: 16px;
}
}
</style>
\ No newline at end of file
...@@ -54,5 +54,7 @@ ...@@ -54,5 +54,7 @@
</script> </script>
<style> <style>
#edui_fixedlayer{
z-index: 10005 !important;
}
</style> </style>
...@@ -12,7 +12,7 @@ const i18n = new VueI18n({ ...@@ -12,7 +12,7 @@ const i18n = new VueI18n({
} }
}) })
console.log({i18n}) console.log({i18n})
Vue.prototype.$l = (object, field) => { Vue.prototype.$l = (object, field = '') => {
let prefix = i18n.locale.split('_')[0] let prefix = i18n.locale.split('_')[0]
let append = prefix.charAt(0).toUpperCase() + prefix.toLowerCase().substr(1) let append = prefix.charAt(0).toUpperCase() + prefix.toLowerCase().substr(1)
// 如果object是null则返回字段名 // 如果object是null则返回字段名
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
@click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''" @click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''"
@contextmenu.prevent.native="openMenu(tag,$event)" @contextmenu.prevent.native="openMenu(tag,$event)"
> >
{{ tag.title }} {{ $l(tag.meta, 'title') }}
<span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" /> <span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" />
</router-link> </router-link>
</scroll-pane> </scroll-pane>
......
...@@ -66,7 +66,6 @@ Vue.component('DictTag', DictTag) ...@@ -66,7 +66,6 @@ Vue.component('DictTag', DictTag)
Vue.component('DocAlert', DocAlert) Vue.component('DocAlert', DocAlert)
Vue.component('Pagination', Pagination) Vue.component('Pagination', Pagination)
Vue.component('RightToolbar', RightToolbar) Vue.component('RightToolbar', RightToolbar)
// Vue.component('TableForm', TableForm)
Vue.component('DictSelector', DictSelector) Vue.component('DictSelector', DictSelector)
// 字典标签组件 // 字典标签组件
import DictTag from '@/components/DictTag' import DictTag from '@/components/DictTag'
......
...@@ -69,40 +69,137 @@ ...@@ -69,40 +69,137 @@
:style="{width: '100%'}"></el-input> :style="{width: '100%'}"></el-input>
</el-form-item> </el-form-item>
</div> </div>
<div> <el-card>
<el-form-item label-width="0"> <div class="card-header" slot="header">
<table-form :title="$t('联系人')" :fields="[ <div class="title">{{$t('联系人')}}</div>
{ label: this.$t('部门'), field: 'department'}, <el-button type="primary" icon="el-icon-plus" size="mini" @click="formData.contactList.push({})"></el-button>
{ label: this.$t('职位'), field: 'position'}, </div>
{ label: this.$t('名称'), field: 'name', required: true}, <el-table :data="formData.contactList" border class="data-list">
{ label: this.$t('电话'), field: 'phone', required: true}, <el-table-column :label="$t('序号')" width="80px">
]" v-model="formData.contactList" class="w-1000"> <template slot-scope="scope">{{scope.$index + 1}}</template>
</table-form> </el-table-column>
</el-form-item> <el-table-column :label="$t('部门')">
</div> <template slot-scope="scope">
<div> <el-input v-model="scope.row.department" placeholder=""></el-input>
<el-form-item label-width="0" prop="field110"> </template>
<table-form :title="$t('银行信息')" :fields="[ </el-table-column>
{ label: this.$t('账户名称'), field: 'accountName', required: true}, <el-table-column :label="$t('职位')">
{ label: this.$t('币别') , field: 'currency', tag: 'selector', attr: currentcyAttr, required: true}, <template slot-scope="scope">
{ label: this.$t('银行名称'), field: 'bankName', required: true}, <el-input v-model="scope.row.position" placeholder=""></el-input>
{ label: this.$t('银行账户'), field: 'bankAccount', required: true}, </template>
{ label: this.$t('银行代码'), field: 'bankCode'}, </el-table-column>
{ label: this.$t('账户类型'), field: 'accountType'}, <el-table-column :label="$t('名称') + '*'">
{ label: this.$t('银行地址'), field: 'bankAddress'}, <template slot-scope="scope">
{ label: this.$t('状态'), field: 'status', tag:'el-switch', attrs: bankStatusAttr}, <el-form-item
{label: this.$t('操作'), buttons: [ class="mb-0 mr-0"
{ :prop="`contactList.${scope.$index}.name`"
type: 'danger', :rules="{required: true, message: $t('不能为空'), trigger: 'blur'}"
text: '删除', >
hander: delBank <el-input v-model="scope.row.name"></el-input>
} </el-form-item>
]} </template>
]" v-model="formData.bankList" class="w-1000"> </el-table-column>
</table-form> <el-table-column :label="$t('电话') + '*'">
</el-form-item> <template slot-scope="scope">
</div> <el-form-item
<el-form-item size="large"> class="mb-0 mr-0"
:prop="`contactList.${scope.$index}.phone`"
:rules="{required: true, message: $t('不能为空'), trigger: 'blur'}"
>
<el-input v-model="scope.row.phone"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('操作')" width="80px">
<template slot-scope="scope">
<el-button type="danger" size="mini" @click="delContact(scope.$index)" icon="el-icon-delete"></el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card class="mt-10">
<div class="card-header" slot="header">
<div class="title">{{$t('银行信息')}}</div>
<el-button type="primary" icon="el-icon-plus" size="mini" @click="formData.bankList.push({})"></el-button>
</div>
<el-table :data="formData.bankList" border class="data-list">
<el-table-column :label="$t('序号')" width="80px">
<template slot-scope="scope">{{scope.$index + 1}}</template>
</el-table-column>
<el-table-column :label="$t('账户名称') + '*'">
<template slot-scope="scope">
<el-form-item
class="mb-0 mr-0"
:prop="`bankList.${scope.$index}.accountName`"
:rules="{required: true, message: $t('不能为空'), trigger: 'blur'}"
>
<el-input v-model="scope.row.accountName" placeholder=""></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('币别') + '*'">
<template slot-scope="scope">
<el-form-item
class="mb-0 mr-0"
:prop="`bankList.${scope.$index}.currency`"
:rules="{required: true, message: $t('不能为空'), trigger: 'blur'}"
>
<selector :options="currencyList" v-model="scope.row.currency" value-field="id" :label-field="'title' + $l()"></selector>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('银行名称') + '*'">
<template slot-scope="scope">
<el-form-item
class="mb-0 mr-0"
:prop="`bankList.${scope.$index}.bankName`"
:rules="{required: true, message: $t('不能为空'), trigger: 'blur'}"
>
<el-input v-model="scope.row.bankName"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('银行账户') + '*'">
<template slot-scope="scope">
<el-form-item
class="mb-0 mr-0"
:prop="`bankList.${scope.$index}.bankAccount`"
:rules="{required: true, message: $t('不能为空'), trigger: 'blur'}"
>
<el-input v-model="scope.row.bankAccount"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="$t('银行代码')">
<template slot-scope="scope">
<el-input v-model="scope.row.bankCode" placeholder=""></el-input>
</template>
</el-table-column>
<el-table-column :label="$t('账户类型')">
<template slot-scope="scope">
<el-input v-model="scope.row.accountType" placeholder=""></el-input>
</template>
</el-table-column>
<el-table-column :label="$t('状态')">
<template slot-scope="scope">
<dict-selector :type="DICT_TYPE.COMMON_STATUS" v-model="scope.row.status" defaultable />
</template>
</el-table-column>
<el-table-column :label="$t('银行地址')">
<template slot-scope="scope">
<el-input v-model="scope.row.bankAddress" placeholder=""></el-input>
</template>
</el-table-column>
<el-table-column :label="$t('操作')" width="80px">
<template slot-scope="scope">
<el-button type="danger" size="mini" @click="delBank(scope.$index)" icon="el-icon-delete"></el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<el-form-item size="large" class="mt-20">
<el-button type="primary" @click="submitForm">{{$t('提交')}}</el-button> <el-button type="primary" @click="submitForm">{{$t('提交')}}</el-button>
<el-button @click="resetForm">{{$t('重置')}}</el-button> <el-button @click="resetForm">{{$t('重置')}}</el-button>
</el-form-item> </el-form-item>
...@@ -113,10 +210,12 @@ ...@@ -113,10 +210,12 @@
import { createSupplier, updateSupplier, getSupplier} from "@/api/ecw/supplier"; import { createSupplier, updateSupplier, getSupplier} from "@/api/ecw/supplier";
import upload from '@/components/ImageUpload' import upload from '@/components/ImageUpload'
import { getListTree } from "@/api/ecw/region"; import { getListTree } from "@/api/ecw/region";
import TableForm from '@/components/TableForm'
import AreaSelector from '@/components/AreaSelector' import AreaSelector from '@/components/AreaSelector'
import {getCurrencyList} from '@/api/ecw/currency'
import Selector from '@/components/Selector'
import {validatePwd} from '@/api/ecw/busiPwd'
export default { export default {
components: {upload, TableForm, AreaSelector}, components: {upload, AreaSelector, Selector},
props: [], props: [],
data() { data() {
return { return {
...@@ -132,6 +231,8 @@ export default { ...@@ -132,6 +231,8 @@ export default {
license: null, license: null,
contract: null, contract: null,
licenseNumber: undefined, licenseNumber: undefined,
contactList:[],
bankList: []
}, },
rules: { rules: {
companyZh: [{ companyZh: [{
...@@ -159,11 +260,7 @@ export default { ...@@ -159,11 +260,7 @@ export default {
treeList:[], treeList:[],
provinceList:[], provinceList:[],
cityList:[], cityList:[],
bankStatusAttr:{ currencyList:[]
"active-value":1,
"inactive-value": 0
},
currentcyAttr: []
} }
}, },
computed: { computed: {
...@@ -186,7 +283,10 @@ export default { ...@@ -186,7 +283,10 @@ export default {
} }
}, },
created() { created() {
getCurrencyList().then(res => {
this.currencyList = res.data
})
// 回显数据需要在加载了地区数据之后,否则无法正常回显 // 回显数据需要在加载了地区数据之后,否则无法正常回显
getListTree({treeType: 1}).then(response => { getListTree({treeType: 1}).then(response => {
this.treeList = response.data this.treeList = response.data
...@@ -202,8 +302,37 @@ export default { ...@@ -202,8 +302,37 @@ export default {
}, },
mounted() {}, mounted() {},
methods: { methods: {
delBank(){ delContact(index){
console.log('删除银行卡') this.$confirm(this.$t('确定删除此联系人么?')).then(() => {
this.formData.contactList.splice(index, 1)
})
},
delBank(index){
if(this.formData.bankList[index].id){
this.$prompt(this.$t("请输入密码"), {
inputType: 'password'
})
.then(({value}) => {
if(value && value != ''){
return validatePwd({
busiType: 5,
pwd: value
})
}
this.$message.error(this.$t('密码不能为空'))
})
.then(res => {
if(!res.data){
return this.$message.error(this.$t('密码错误'))
}
this.formData.bankList.splice(index, 1)
})
return
}
this.$confirm(this.$t('确定删除此银行信息么?')).then(() => {
this.formData.bankList.splice(index, 1)
})
}, },
onAreaChange(type, val){ onAreaChange(type, val){
this.$set(this.formData, type, val) this.$set(this.formData, type, val)
...@@ -226,7 +355,7 @@ export default { ...@@ -226,7 +355,7 @@ export default {
} }
// 添加的提交 // 添加的提交
createSupplier(data).then(response => { createSupplier(data).then(response => {
this.$modal.msgSuccess(this.$t("新增成功")); this.$modal.msgSuccess(this.$t(this.$t("新增成功")));
this.$router.replace('supplier') this.$router.replace('supplier')
}); });
}); });
...@@ -238,9 +367,19 @@ export default { ...@@ -238,9 +367,19 @@ export default {
} }
</script> </script>
<style> <style lang="scss" scoped>
.el-upload__tip { .el-upload__tip {
line-height: 1.2; line-height: 1.2;
} }
.card-header{
display: flex;
align-items: center;
justify-content: space-between;
.title{
font-size: 18px;
}
}
::v-deep .data-list .el-form-item__error{
position: static;
}
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment