庞东旭 1 år sedan
förälder
incheckning
e6b36f9b29
6 ändrade filer med 795 tillägg och 21 borttagningar
  1. +12
    -0
      src/api/onlineHome/bankAgriculture/paymentAccount.js
  2. +216
    -0
      src/components/form/FieldCascadeSelect.vue
  3. +9
    -0
      src/router/index.js
  4. +83
    -21
      src/views/sunVillage_info/bankAgriculture/bankOfDeposit/bankOfDepositAdd.vue
  5. +10
    -0
      src/views/sunVillage_info/list_multipleLots.vue
  6. +465
    -0
      src/views/sunVillage_info/list_multipleLotsContract_nh.vue

+ 12
- 0
src/api/onlineHome/bankAgriculture/paymentAccount.js Visa fil

@@ -84,3 +84,15 @@ export function getCentralSubjects(query) {
params: query
})
}

//检索
export function realtimeBankList(data, dump = true) {
return request({
url: '/yinnong/deposit/realtimeList',
method: 'post',
data: data,
params: {
dump,
}
})
}

+ 216
- 0
src/components/form/FieldCascadeSelect.vue Visa fil

@@ -0,0 +1,216 @@
<!-- 下拉列表表单组件 zhao -->
<template>
<div>
<van-field
:readonly="true"
:clickable="!readonly"
:name="name"
:value="visibleValue"
:label="label"
:placeholder="placeholder"
@click="openPopup"
input-align="right"
right-icon="arrow-down"
:rules="rules"
:required="required"
:label-width="labelWidth || 'auto'"
>
</van-field>
<van-popup v-model="popupVisible" position="bottom">
<van-picker
ref="picker"
:title="label"
show-toolbar
:columns="columns ? columns : remoteColumns"
:readonly="readonly"
:value-key="valueKey"
:loading="loading"
@confirm="onConfirm"
@cancel="onCancel"
@change="onChanged"
/>
</van-popup>
</div>
</template>

<script>
import request from "@/utils/request";

export default {
name: "fieldCascadeSelect",
props: [
'name', 'readonly', 'value', 'label', 'placeholder', 'required', 'rules', 'labelWidth',
'columns', // 列表数据 Array
'valueKey', // 名称键名 String
'dataKey', // 值键名 String
'remoteUrl', // 远程列表加载地址 String
'onRemoteResponse', // 远程获取到结果的处理回调 String|Function 如果是函数需返回数组, 如果是字符串支持.分割
'clearable', // 点击取消时清空绑定值
],
watch: {
value: function (newVal, oldVal) {
this.internalValue = newVal;
this.visibleValue = newVal ? newVal.join(' / ') : '';
this.syncIndex();
},
columns: function (newVal, oldVal) {
this.syncIndex();
},
remoteUrl: function (newVal, oldVal) {
this.requestRemote();
},
onRemoteResponse: function (newVal, oldVal) {
this.parseRemote();
}
},
created() {
if(this.remoteUrl)
this.requestRemote();
},
data() {
return {
popupVisible: false,
internalValue: this.value,
visibleValue: '',
defaultIndex: [],
remoteColumns: null,
loading: false,
remoteResponse: null,
};
},
methods: {
openPopup() {
if(!this.readonly)
{
this.popupVisible = true;
this.$nextTick(() => {
this.$refs.picker.setIndexes(this.defaultIndex);
})
}
},
closePopup() {
this.popupVisible = false;
},
onChanged(data) {
this.$emit('change', data);
},
onConfirm(data) {
this.syncValue(data);
this.$emit('input', this.internalValue);
this.$emit('confirm', this.internalValue);
this.closePopup();
},
onCancel() {
this.closePopup();
this.$emit('cancel');
if(this.clearable)
{
this.visibleValue = '';
this.internalValue = [];
this.$emit('input', this.internalValue);
}
},
getValue(data) {
return typeof(data) === 'object' && this.dataKey ? data[this.dataKey] : data;
},
getLabel(data) {
return typeof(data) === 'object' && this.valueKey ? data[this.valueKey] : data;
},
syncValue(data) {
let res = [];
for(let a of data)
{
res.push(this.getValue(a));
}
this.internalValue = res;
res = [];
for(let a of data)
{
res.push(this.getLabel(a));
}
this.visibleValue = res.join(' / ');
},
syncIndex() {
let columns = this.getColumns();
if(!columns)
return -1;
let arr = [];
let dataArr = [];
let ptr = columns;
for(let i = 0; i < this.internalValue.length; i++)
{
if(!ptr)
break;
let p = null;
for(let m = 0; m < ptr.length; m++)
{
if(this.getValue(ptr[m]) == this.internalValue[i]) {
arr.push(m);
dataArr.push(ptr[m]);
p = ptr[m];
break;
}
}
if(p)
ptr = p.children;
}
if(arr.length)
{
this.defaultIndex = arr;
this.visibleValue = dataArr.map((x) => this.getLabel(x)).join(' / ');
this.onChanged(dataArr);
return dataArr;
}
if(1) // 不存在
{
this.defaultIndex = [];
this.visibleValue = (this.internalValue || []).join(' / ');
this.onChanged([]);
}
return -1;
},
getColumns() {
return this.columns ? this.columns : this.remoteColumns;
},
requestRemote() {
if(!this.remoteUrl)
return;
this.loading = true;
this.remoteColumns = [];
let promise = typeof(this.remoteUrl) === 'function' ? this.remoteUrl() : (this.remoteUrl instanceof Promise ? this.remoteUrl : request(this.remoteUrl));
promise.then((resp) => {
this.remoteResponse = resp;
this.parseRemote();
this.syncIndex();
}).catch((e) => {
console.error(e);
}).finally(() => {
this.loading = false;
})
},
parseRemote() {
if(!this.remoteResponse)
return;
let type = typeof(this.onRemoteResponse);
if(type === 'function')
this.remoteColumns = this.onRemoteResponse(this.remoteResponse);
else if(type === 'string')
{
let arr = this.onRemoteResponse.split('.');
let ptr = this.remoteResponse;
for(let i in arr)
{
ptr = this.remoteResponse[arr[i]];
}
this.remoteColumns = ptr;
}
else
this.remoteColumns = this.remoteResponse;
},
},
}
</script>

<style scoped>

</style>

+ 9
- 0
src/router/index.js Visa fil

@@ -3759,6 +3759,15 @@ export const constantRoutes = [
},
component: (resolve) => require(['@/views/sunVillage_info/list_multipleLots_detail'], resolve)
},
{ ////阳光村务(新)-- 标段合同中的查看标段农户
path: '/sunVillage_info/list_multipleLotsContract_nh',
name: 'sunVillageInfoListMultipleLotsContractNh',
meta: {
title: '标段农户',
hidden: true,
},
component: (resolve) => require(['@/views/sunVillage_info/list_multipleLotsContract_nh'], resolve)
},
{ ////阳光村务(新)-- 标段农户网签
path: '/sunVillage_info/list_multipleLotsNh',
name: 'sunVillageInfoListMultipleLotsNh',


+ 83
- 21
src/views/sunVillage_info/bankAgriculture/bankOfDeposit/bankOfDepositAdd.vue Visa fil

@@ -18,32 +18,34 @@

<van-form @submit="goModify" @failed="getError" :show-error-message="false" scroll-to-error validate-first>
<div class="main_box">
<van-field label="省" required :rules="[{ required: true , message:'请输入省' }]" v-model="form.sheng" placeholder="请输入省" input-align="right" label-width="auto"/>
<van-field label="市" required :rules="[{ required: true , message:'请输入市' }]" v-model="form.shi" placeholder="请输入市" input-align="right" label-width="auto"/>

<van-field
readonly
clickable
<FieldCascadeSelect :required="true" :rules="[{ required: true , message:'请选择省市' }]" data-key="value" value-key="label" :columns="regionOptions" v-model="form.region" placeholder="请选择开户省市" label="开户省市" label-width="auto" @input="onRegionChanged"/>
<FieldSelect
label="所属银行"
placeholder="请选择"
v-model="bankType"
@click="showBankType = true"
input-align="right"
right-icon="arrow-down"
v-model="form.bankType"
label-width="auto"
required
:required="true"
:rules="[{ required: true , message:'请选择所属银行' }]"
:columns="bankTypeOptions"
data-key="dictValue"
value-key="dictLabel"
/>
<van-popup v-model="showBankType" position="bottom">
<van-field label="开户行" required :rules="[{ required: true , message:'请输入开户行' }]" v-model="form.bankDeposit" placeholder="请输入开户行" input-align="right" label-width="auto">
<template #button>
<van-button :disabled="!canFetch" size="small" type="primary" native-type="button" @click="searchBankAddress">手动检索</van-button>
</template>
</van-field>
<van-popup v-model:show="showBankAddress" position="bottom">
<van-picker
show-toolbar
:columns="bankTypeOptions"
@confirm="onConfirmBankType"
@cancel="showBankType = false"
value-key="bankDeposit"
:columns="bankAddressOption"
@confirm="onConfirmBankAddress"
@cancel="showBankAddress = false"
/>
</van-popup>

<van-field label="开户行" required :rules="[{ required: true , message:'请输入开户行' }]" v-model="form.bankDeposit" placeholder="请输入开户行" input-align="right" label-width="auto"/>
<van-field label="联行号" required :rules="[{ required: true , message:'请输入联行号' }]" v-model="form.payeePaymentLines" placeholder="请输入联行号" input-align="right" label-width="auto"/>
<van-field label="机构号" v-model="form.institutionNumber" placeholder="请输入机构号" input-align="right" label-width="auto"/>

@@ -62,21 +64,29 @@

<script>
import { addDeposit } from "@/api/onlineHome/bankAgriculture/bankOfDeposit";
import {options} from "@/api/user";
import FieldCascadeSelect from "@/components/form/FieldCascadeSelect";
import {listDeposit, realtimeBankList} from "@/api/onlineHome/bankAgriculture/paymentAccount";
import FieldSelect from "@/components/form/FieldSelect";
export default {
name: "paymentAccountAdd",
components: {FieldSelect, FieldCascadeSelect},
data() {
return {
showBankType:false,
bankType:'',
// 所属银行字典
bankTypeOptions: [],
showBankAddress: false,
bankAddressOption: [],
form:{
sheng: "", //省 必填
shi: "", //市 必填
bankType: "", //所属银行 必填
bankDeposit: "", //开户行 必填
payeePaymentLines: "", //联行号 //必填
}
region: [],
},
};
},
created() {
@@ -89,9 +99,7 @@
getDetail(){
// 所属银行
this.getDicts("bank_type_all").then(res => {
for (var i = 0; i < res.data.length; i++) {
this.bankTypeOptions.push({text: res.data[i].dictLabel, value: res.data[i].dictValue});
}
this.bankTypeOptions = res.data;
});
},
getError(e){
@@ -114,7 +122,61 @@
},
goBack(){
window.history.go(-1)
}
},
onRegionChanged(val) {
val = val || [];
this.form.sheng = val.length > 0 ? val[0] : null;
this.form.shi = val.length > 1 ? val[1] : null;
},
onConfirmBankAddress(value){
this.form.bankAddress = value.bankDeposit;
this.form.payeePaymentLines = value.payeePaymentLines;
this.form.bankDeposit = value.bankDeposit;
this.showBankAddress = false;
},
checkFormField(what, desc) {
if(!this.form[what])
{
this.$toast({
icon: 'fail',
message: '请选择' + desc,
duration:"1000",
});
return false;
}
return true;
},
searchBankAddress(){
if(!this.checkFormField('sheng', '省')) return;
if(!this.checkFormField('shi', '市')) return;
if(!this.checkFormField('bankType', '所属银行')) return;
if(!this.checkFormField('bankDeposit', '关键词')) return;
let data = {
sheng: this.form.sheng,
shi: this.form.shi,
bankType: this.form.bankType,
bankDeposit: this.form.bankDeposit,
}
listDeposit(data).then(response => {
if (response.rows.length<1){
realtimeBankList(data, false).then(response2 => {
this.bankAddressOption = response2.data;
this.showBankAddress = true;
});
}else{
this.bankAddressOption = response.rows;
this.showBankAddress = true;
}
});
},
},
computed: {
regionOptions() {
return options;
},
canFetch() {
return this.form.sheng && this.form.shi && this.form.bankType && this.form.bankDeposit;
},
},
}
</script>


+ 10
- 0
src/views/sunVillage_info/list_multipleLots.vue Visa fil

@@ -41,6 +41,10 @@
<img src="../../assets/images/sunVillage_info/signature_icon_02.png" alt="" width="35">
<p>签名</p>
</div>
<div class="opera_btn" @click="showMultipleLotsNh(item.id)">
<img src="../../assets/images/sunVillage_info/signature_icon_03.png" alt="" width="35">
<p>查看农户</p>
</div>
<div class="opera_btn" @click="openPopupFile(item.id)">
<img src="../../assets/images/sunVillage_info/signature_icon_04.png" alt="" width="35">
<p>附件</p>
@@ -240,6 +244,12 @@
type: mime
})
},
showMultipleLotsNh(id) {
this.$router.push({
path: '/sunVillage_info/list_multipleLotsContract_nh',
query: { id: id }
})
},
},
}
</script>


+ 465
- 0
src/views/sunVillage_info/list_multipleLotsContract_nh.vue Visa fil

@@ -0,0 +1,465 @@
<template>
<div class="home_wrapper">
<div
class="header_main"
:style="`background-image:url(${require(showBtn?'@/assets/images/sunVillage_info/list_head.png':'@/assets/images/sunVillage_info/list_head_red.png')})`"
>
标段农户
<div class="return_btn" @click="onClickLeft"></div>
<!-- <div class="add_btn" @click="goAdd" v-show="showBtn"></div>-->
</div>

<div class="list_main">
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="getList"
>
<!----1-->
<van-swipe-cell v-for="item in applicationList" :key="item.id" >
<div class="item" @click="goDetail(item.id)">
<div class="info">
<div class="title">
<i class="icon_box" v-if="item.secondSigning==null"></i>
<i class="icon_box1" v-if="item.secondSigning!=null"></i>
<p class="news_title" :style="{'color': item.secondSigning!=null?'#2bc30c':'#eb1616'}">{{item.memberName}}</p>
<p class="tips_mark" :style="{'color': item.secondSigning!=null?'#79bc29':'#f8a83d','background': item.secondSigning!=null?'#e8ffcd':'#ffedcd'}">{{item.signingMode}}</p>
<p class="tips_mark2" v-if="item.signingMode === '线上'" :style="{'background': item.secondSigning!=null?'#2bc30c':'#eb1616'}">{{item.secondIsSign === '是' ? '已签名' : '未签名'}}</p>
</div>
<div class="time">
<p :style="{'color': item.secondSigning!=null?'#2bc30c':'#eb1616'}">{{item.idcard}}</p>
<p style="color:#eb1616;font-weight: bold;"><span style="font-size: 12px;">¥</span>{{item.logAmount.toFixed(2)}}</p>
</div>
</div>
</div>
<template #right>
<div class="operation">
<div class="opera_btn" @click="openPopupFile(item.id)">
<img src="../../assets/images/sunVillage_info/signature_icon_04.png" alt="" width="35">
<p>附件</p>
</div>
</div>
</template>
</van-swipe-cell>
</van-list>
</div>
<!-- 附件弹出层 -->
<van-popup v-model="showFile" round closeable position="bottom" :style="{ height: '30%' }" >
<div style="padding: 0 3%;">
<van-divider>附件</van-divider>
<van-uploader v-model="fileList" accept="" :after-read="afterRead" @delete="deleteFile" /> <!-- accept=".jpg, .gif, .png, .jpeg, .txt, .pdf, .doc, .docx, .xls, .xlsx" -->
</div>
</van-popup>
</div>
</template>

<script>
import { listMultipleLotsNh, multipleLotsSecondSign, attachmentQuery, attachmentUpload, attachmentRemove } from "@/api/sunVillage_info/fixedAssets";
import vueEsign from "vue-esign";
import signatureUploadSignature from "@/views/yinnong/signatureUploadSignature";
import $ from "jquery";
import Cookies from "js-cookie";

export default {
name: "sunVillageInfoListMultipleLotsContractNh",
components: {vueEsign, signatureUploadSignature},
data() {
return {
applicationList: [],
loading: false,
finished: false,
show: false,
showFile: false,
fileList: [],
listLength: '0',
queryParams: {
pageNum: 1,
pageSize: 10,
multiplelotsId: null,
translate_dict: 1,
},
showBtn: true,
signaId: '',
height: null
};
},
created() {
this.height = window.screen.height * 1.28 - 20;
this.queryParams.multiplelotsId = this.$route.query.id;
},
methods: {
getList() {
listMultipleLotsNh(this.queryParams).then(response => {
response.rows.forEach(item => {
this.applicationList.push(item);
});
if (this.applicationList.length >= response.total) {
this.finished = true;
return;
} else {
this.loading = false;
this.queryParams.pageNum += 1;
}
});
},
goDetail(id) {
this.$router.push({
path: '/sunVillage_info/list_multipleLotsNh_detail',
query: { id: id }
})
},
openPopupFile(id){
this.fileList = [];
this.signaId = id;
this.showFile = true;
let queryParams = {
tableId: id,
tableName: 't_transaction_multiplelotsnh',
};
attachmentQuery(queryParams).then(response => {
response.rows.map(res => {
// let baseUrl = location.protocol+"//"+location.host+request.defaults.baseURL
this.fileList.push({
url: '/api'+res.fileUrl,
file: new File([], res.fileName,{}),
id: res.id
});
})
});
},
afterRead(file) {
// 此时可以自行将文件上传至服务器
let params = new FormData();
params.append("tableId", this.signaId);
params.append("tableName", "t_transaction_multiplelotsnh");
params.append("bizPath", "transaction");
params.append("fileType", '0');
params.append("file", file.file);
params.append("userName", JSON.parse(Cookies.get('user')).memberName);
attachmentUpload(params).then(response => {
this.$notify({ type: 'success', message: '上传成功' });
let newFile = this.fileList[this.fileList.length - 1];
this.$set(newFile, 'id', response.id);
});
},
deleteFile(file){
attachmentRemove(file.id).then(res => {
this.$notify({ type: 'success', message: '删除成功' });
});
},
},
}
</script>

<style scoped lang="scss">
.home_wrapper {
background: #e9e9e9;
min-height: 100vh;
width: 100vw;

.header_main {
height: 116px;
background: url('../../assets/images/sunVillage_info/list_head.png') no-repeat;
background-size: 100% 100%;
position: fixed;
top: 0;
left: 0;
width: 100%;
font-size: 36px;
line-height: 116px;
text-align: center;
color: #fff;
position: relative;

.return_btn {
width: 24px;
height: 43.2px;
background: url('../../assets/images/sunVillage_info/list_icon_5.png') center center no-repeat;
background-size: 20px 36px;
position: absolute;
left: 38px;
top: 36px;
}

.add_btn {
width: 56.4px;
height: 40.8px;
background: url('../../assets/images/sunVillage_info/list_icon_9.png') center center no-repeat;
background-size: 47px 34px;
position: absolute;
right: 38px;
top: 36px;
}
}

.record_main {
padding: 30px 22px;

.record_det {
height: 38px;
line-height: 38px;
display: flex;
justify-content: space-between;

.year_l {
font-size: 30px;
display: flex;
align-items: center;
color: #858585;

.unit {
padding-left: 5px;
}

.icon {
width: 23px;
height: 12px;
display: block;
background: url('../../assets/images/sunVillage_info/list_icon_1.png') no-repeat;
background-size: 100% 100%;
margin-bottom: 4px;
margin-right: 8px;

&.zk {
transform: rotate(0deg)
}

&.ss {
transform: rotate(180deg)
}

}
}

.total_r {
font-size: 26px;
letter-spacing: 2px;
}
}

.record_list {
display: flex;
flex-flow: wrap;
margin-top: 12PX;

.flex_block {
font-size: 30px;
color: #878787;
padding-right: 30px;

&.current {
color: #4199fe;
font-weight: bold;
}
}
}
}

.list_main {
padding: 0 22px;
margin-top: 15PX;

.item {
border-radius: 30px;
background: #fff;
box-shadow: 4px 6px 5px rgba(63, 68, 75, 0.1);
padding: 25px 32px;
margin-bottom: 20px;

.info {
.title {
display: flex;
font-size: 32px;
align-items: center;
height: 58px;

.icon_box {
width: 34px;
display: block;
height: 30px;
background: url('../../assets/images/sunVillage_info/signature_icon_01.png') no-repeat;
background-size: 100% 100%;
margin-right: 10px;
flex-shrink: 0;
}

.icon_box1 {
width: 34px;
display: block;
height: 30px;
background: url('../../assets/images/sunVillage_info/signature_icon_01g.png') no-repeat;
background-size: 100% 100%;
margin-right: 10px;
flex-shrink: 0;
}

.news_title {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
word-break: break-all;
overflow: hidden;
}

.tips_mark {
background: #ffedcd;
border-radius: 8px;
font-size: 24px;
color: #f8a83d;
text-align: center;
line-height: 34px;
flex-shrink: 0;
padding: 0 5Px;
margin-left: auto;
}

.tips_mark2 {
background: #eb1616;
border-radius: 8px;
font-size: 24px;
color: #ffffff;
text-align: center;
line-height: 34px;
flex-shrink: 0;
padding: 0 5Px;
margin-left: 10PX;
}
}

.time {
font-size: 16PX;
color: #333333;
display: flex;
align-items: center;
margin-top: 5PX;
justify-content: space-between;

.icon_time {
width: 25px;
height: 25px;
background: url('../../assets/images/sunVillage_info/list_icon_4.png') no-repeat;
background-size: 100% 100%;
margin-right: 10px;
}
}
}
}

.operation {
display: flex;
align-items: center;
justify-content: right;
text-align: center;
border-radius: 30px;
background: #fff;
box-shadow: 4px 6px 5px rgba(63, 68, 75, 0.1);
height: 100%;
padding: 0 15Px;
margin-left: 10PX;

.opera_btn {
border-radius: 50%;
padding: 0 10px;
&.delete {
background: #df0707;
margin-left: 10PX;

.icon {
width: 22PX;
height: 29PX;
background: url('../../assets/images/sunVillage_info/signature_icon_03.png') no-repeat;
background-size: 100% 100%;
display: block;
}
}

&.edit {
background: #79cf13;
margin-left: 10PX;

.icon {
width: 26PX;
height: 25PX;
background: url('../../assets/images/sunVillage_info/signature_icon_02.png') no-repeat;
background-size: 100% 100%;
display: block;
}
}

&.view {
background: #3494ff;
margin-left: 10PX;

.icon {
width: 29PX;
height: 21PX;
background: url('../../assets/images/sunVillage_info/signature_icon_04.png') no-repeat;
background-size: 100% 100%;
display: block;
}
}

&.list {
background: #79cf13;
margin-left: 10PX;

.icon {
width: 29px;
height: 21px;
background: url('../../assets/images/sunVillage_info/list_icon_10.png') no-repeat;
background-size: 100% 100%;
display: block;
}
}
}
}
}

.bottom_tips {
font-size: 24px;
color: #a7a6a6;
text-align: center;
margin-top: 32px;
background: url('../../assets/images/sunVillage_info/list_icon_8.png') center center no-repeat;
background-size: 260px 2px;

.xs {
padding: 0 8px;
background: #e9e9e9;
}
}

.signature-box {
border: 1px dashed #666;
margin: 2px 20px;
height: 100%;
/*canvas{*/
/* height: 100%!important;*/
/*}*/
}

.signature-footer {
transform: rotate(90deg);
width: auto;
position: absolute;
top: 50%;
left: 0PX;

.clearBtn {
margin-left: 15px;
}
}

.esigh-result {
margin: 15px 20px;
// height: 110px;
border: 1px solid #666;
font-size: 0;

.imgs {
width: 100%;
}
}
}
</style>

Laddar…
Avbryt
Spara