|
@@ -1,19 +1,155 @@
|
|
<template>
|
|
<template>
|
|
<view class="settlement-form">
|
|
<view class="settlement-form">
|
|
- <form-list
|
|
|
|
- :key="showFormList"
|
|
|
|
- :id="id"
|
|
|
|
- :filed-list="formDataSet.fields"
|
|
|
|
- :form-key="formKey"
|
|
|
|
- :uplod-key="544"
|
|
|
|
- :old-form-data="JSON.stringify(dataForm)"
|
|
|
|
- />
|
|
|
|
|
|
+ <wd-form ref="form" :model="dataForm" :rules="rules">
|
|
|
|
+ <wd-cell-group>
|
|
|
|
+ <wd-calendar
|
|
|
|
+ v-model="dataForm[536]"
|
|
|
|
+ label="开票日期"
|
|
|
|
+ :prop="'536'"
|
|
|
|
+ placeholder="请选择开票日期"
|
|
|
|
+ type="date"
|
|
|
|
+ />
|
|
|
|
+ <wd-calendar
|
|
|
|
+ v-model="dataForm[741]"
|
|
|
|
+ label="结算开始日期"
|
|
|
|
+ :prop="'741'"
|
|
|
|
+ placeholder="请选择结算结束日期"
|
|
|
|
+ type="date"
|
|
|
|
+ />
|
|
|
|
+ <wd-calendar
|
|
|
|
+ v-model="dataForm[742]"
|
|
|
|
+ label="结算结束日期"
|
|
|
|
+ :prop="'742'"
|
|
|
|
+ placeholder="请选择结算结束日期"
|
|
|
|
+ type="date"
|
|
|
|
+ />
|
|
|
|
+ <!-- 项目名称 -->
|
|
|
|
+ <wd-select-picker
|
|
|
|
+ v-model="dataForm[540]"
|
|
|
|
+ :columns="projectList"
|
|
|
|
+ label="项目名称"
|
|
|
|
+ :prop="'540'"
|
|
|
|
+ placeholder="请选择项目名称"
|
|
|
|
+ @change="projectNameChange"
|
|
|
|
+ type="radio"
|
|
|
|
+ />
|
|
|
|
+ <wd-select-picker
|
|
|
|
+ v-model="dataForm[537]"
|
|
|
|
+ :columns="oilList"
|
|
|
|
+ label="油品名称"
|
|
|
|
+ :prop="'537'"
|
|
|
|
+ placeholder="请选择油品名称"
|
|
|
|
+ type="radio"
|
|
|
|
+ @change="ypNameChange"
|
|
|
|
+ v-if="dataForm[541]"
|
|
|
|
+ />
|
|
|
|
+ <!-- 油品型号 538 -->
|
|
|
|
+ <wd-select-picker
|
|
|
|
+ v-model="dataForm[538]"
|
|
|
|
+ :columns="oilTypeList"
|
|
|
|
+ label="油品型号"
|
|
|
|
+ :prop="'538'"
|
|
|
|
+ placeholder="请选择油品型号"
|
|
|
|
+ type="radio"
|
|
|
|
+ @change="oilTypeChange"
|
|
|
|
+ v-if="dataForm[537] && dataForm[541]"
|
|
|
|
+ />
|
|
|
|
+ <!-- 升 548 -->
|
|
|
|
+ <wd-cell title="升" :prop="'548'" title-width="150rpx">
|
|
|
|
+ <view style="text-align: left">
|
|
|
|
+ <wd-input-number
|
|
|
|
+ v-model="dataForm[548]"
|
|
|
|
+ :placeholder="'请选择'"
|
|
|
|
+ :min="0"
|
|
|
|
+ :precision="2"
|
|
|
|
+ input-width="140rpx"
|
|
|
|
+ @change="onChangeL"
|
|
|
|
+ />
|
|
|
|
+ </view>
|
|
|
|
+ </wd-cell>
|
|
|
|
+ <!-- 密度 549 input number -->
|
|
|
|
+ <wd-input
|
|
|
|
+ v-model="dataForm[549]"
|
|
|
|
+ :label="'密度'"
|
|
|
|
+ :prop="'549'"
|
|
|
|
+ :placeholder="'请输入密度'"
|
|
|
|
+ type="number"
|
|
|
|
+ :disabled="true"
|
|
|
|
+ />
|
|
|
|
+ <!-- 吨 550 -->
|
|
|
|
+ <wd-input
|
|
|
|
+ v-model="dataForm[550]"
|
|
|
|
+ :label="'吨'"
|
|
|
|
+ :prop="'550'"
|
|
|
|
+ :placeholder="'请输入吨'"
|
|
|
|
+ type="number"
|
|
|
|
+ :disabled="true"
|
|
|
|
+ />
|
|
|
|
+ <!-- 单价 551 -->
|
|
|
|
+ <wd-input
|
|
|
|
+ v-model="dataForm[551]"
|
|
|
|
+ :label="'单价'"
|
|
|
|
+ :prop="'551'"
|
|
|
|
+ :placeholder="'请输入单价'"
|
|
|
|
+ type="number"
|
|
|
|
+ :disabled="true"
|
|
|
|
+ />
|
|
|
|
+ <!-- 金额 552 -->
|
|
|
|
+ <wd-input
|
|
|
|
+ v-model="dataForm[552]"
|
|
|
|
+ :label="'金额'"
|
|
|
|
+ :prop="'552'"
|
|
|
|
+ :placeholder="'请输入金额'"
|
|
|
|
+ type="number"
|
|
|
|
+ />
|
|
|
|
+ <wd-cell :title="'发票上传'" title-width="150rpx" :prop="'544'">
|
|
|
|
+ <wd-upload
|
|
|
|
+ :file-list="dataForm[544]"
|
|
|
|
+ :action="config.baseURL + 'api/file/uploadFile'"
|
|
|
|
+ @change="handleChangeFile"
|
|
|
|
+ />
|
|
|
|
+ </wd-cell>
|
|
|
|
+ <!--开票公司543 -->
|
|
|
|
+ <wd-select-picker
|
|
|
|
+ v-if="dataForm[540]"
|
|
|
|
+ v-model="dataForm[543]"
|
|
|
|
+ :columns="companyList"
|
|
|
|
+ label="开票公司"
|
|
|
|
+ :prop="'543'"
|
|
|
|
+ placeholder="请选择开票公司"
|
|
|
|
+ type="radio"
|
|
|
|
+ />
|
|
|
|
+ <!-- 客户名称 542 -->
|
|
|
|
+ <wd-select-picker
|
|
|
|
+ v-if="dataForm[540]"
|
|
|
|
+ v-model="dataForm[542]"
|
|
|
|
+ :columns="kehuList"
|
|
|
|
+ label="客户名称"
|
|
|
|
+ :prop="'542'"
|
|
|
|
+ placeholder="请选择客户名称"
|
|
|
|
+ type="radio"
|
|
|
|
+ />
|
|
|
|
+ <!-- isInvoice 是否开发票 539 -->
|
|
|
|
+ <wd-select-picker
|
|
|
|
+ v-model="dataForm[539]"
|
|
|
|
+ :columns="isInvoice"
|
|
|
|
+ label="是否开发票"
|
|
|
|
+ :prop="'539'"
|
|
|
|
+ placeholder="请选择是否开发票"
|
|
|
|
+ type="radio"
|
|
|
|
+ />
|
|
|
|
+ </wd-cell-group>
|
|
|
|
+ <view class="footer">
|
|
|
|
+ <wd-button type="primary" size="large" block @click="handleSubmit">提交</wd-button>
|
|
|
|
+ </view>
|
|
|
|
+ </wd-form>
|
|
|
|
+ <wd-toast />
|
|
</view>
|
|
</view>
|
|
</template>
|
|
</template>
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
import DemoApi from '@/api/DemoApi';
|
|
import DemoApi from '@/api/DemoApi';
|
|
-import formList from '@/components/formList.vue';
|
|
|
|
import config from '@/http/config';
|
|
import config from '@/http/config';
|
|
|
|
+import { useToast } from 'wot-design-uni';
|
|
|
|
|
|
const formKey = ref<string>('');
|
|
const formKey = ref<string>('');
|
|
const id = ref<string>('');
|
|
const id = ref<string>('');
|
|
@@ -24,9 +160,26 @@ onLoad((option) => {
|
|
id.value = filedsData.value.id;
|
|
id.value = filedsData.value.id;
|
|
init();
|
|
init();
|
|
});
|
|
});
|
|
|
|
+const toast = useToast();
|
|
|
|
+
|
|
const formDataSet = ref({});
|
|
const formDataSet = ref({});
|
|
const dataForm = ref({});
|
|
const dataForm = ref({});
|
|
-const rules = ref({});
|
|
|
|
|
|
+const rules = ref({
|
|
|
|
+ //项目名称 油品类型 油品名称 金额 升 开票公司 必填
|
|
|
|
+ 540: [{ required: true, message: '项目名称未填写' }],
|
|
|
|
+
|
|
|
|
+ 537: [{ required: true, message: '油品名称未填写' }],
|
|
|
|
+ 538: [{ required: true, message: '油品型号未填写' }],
|
|
|
|
+ 552: [
|
|
|
|
+ { required: true, message: '金额未填写' },
|
|
|
|
+ // 金额不能有字符 但是可以有小数位
|
|
|
|
+ { pattern: /^[0-9]+(.[0-9]{1,2})?$/, message: '金额格式不正确' },
|
|
|
|
+ ],
|
|
|
|
+ 548: [{ required: true, message: '升未填写' }],
|
|
|
|
+ 543: [{ required: true, message: '开票公司未填写' }],
|
|
|
|
+ 542: [{ required: true, message: '客户名称未填写' }],
|
|
|
|
+ 539: [{ required: true, message: '是否开发票未填写' }],
|
|
|
|
+});
|
|
const showFormList = ref(1);
|
|
const showFormList = ref(1);
|
|
function init() {
|
|
function init() {
|
|
DemoApi.getConfig(formKey.value).then((res) => {
|
|
DemoApi.getConfig(formKey.value).then((res) => {
|
|
@@ -34,7 +187,11 @@ function init() {
|
|
const obj = {};
|
|
const obj = {};
|
|
const objAllSet = {};
|
|
const objAllSet = {};
|
|
formDataSet.value.fields.map((item) => {
|
|
formDataSet.value.fields.map((item) => {
|
|
- obj[item.__vModel__] = item.defaultValue || null;
|
|
|
|
|
|
+ obj[item.__vModel__] = item.defaultValue || '';
|
|
|
|
+ if (item.__config__.jnpfKey === 'date') {
|
|
|
|
+ // 13位时间戳 代表当天时间 不算时分秒
|
|
|
|
+ obj[item.__vModel__] = new Date(new Date().toLocaleDateString()).getTime();
|
|
|
|
+ }
|
|
objAllSet[item.__vModel__] = item.__config__.jnpfKey;
|
|
objAllSet[item.__vModel__] = item.__config__.jnpfKey;
|
|
if (item.__config__.required) {
|
|
if (item.__config__.required) {
|
|
rules.value[item.__vModel__] = [
|
|
rules.value[item.__vModel__] = [
|
|
@@ -69,7 +226,284 @@ function init() {
|
|
}
|
|
}
|
|
});
|
|
});
|
|
dataForm.value = obj;
|
|
dataForm.value = obj;
|
|
- showFormList.value += 1;
|
|
|
|
|
|
+ oldFormData.value = JSON.stringify(obj);
|
|
|
|
+ initProjectList();
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+const projectList = ref([]);
|
|
|
|
+function initProjectList() {
|
|
|
|
+ DemoApi.getProjectNameList().then((res) => {
|
|
|
|
+ projectList.value = res.data.map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ label: item.项目名称,
|
|
|
|
+ value: item.项目编号,
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+ // 如果 dataForm.value[541] 的值不属于项目列表,push进去
|
|
|
|
+ let type = projectList.value.some((item) => item.value === dataForm.value[541]);
|
|
|
|
+ if (dataForm.value[541] && !type) {
|
|
|
|
+ projectList.value.push({
|
|
|
|
+ label: dataForm.value[541],
|
|
|
|
+ value: dataForm.value[541],
|
|
|
|
+ prjId: dataForm.value[540],
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+const oilList = ref([
|
|
|
|
+ // 柴油 汽油
|
|
|
|
+ { label: '柴油', value: '柴油' },
|
|
|
|
+ { label: '汽油', value: '汽油' },
|
|
|
|
+]);
|
|
|
|
+watch(
|
|
|
|
+ () => dataForm.value[541],
|
|
|
|
+ (newVal) => {
|
|
|
|
+ if (newVal) {
|
|
|
|
+ allInit();
|
|
|
|
+ getPriceList();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+);
|
|
|
|
+watch(
|
|
|
|
+ () => dataForm.value[537],
|
|
|
|
+ (newVal) => {
|
|
|
|
+ if (newVal) {
|
|
|
|
+ initOilTypeList();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+);
|
|
|
|
+
|
|
|
|
+function allInit() {
|
|
|
|
+ initProjectList();
|
|
|
|
+ initOilTypeList();
|
|
|
|
+ getPriceList();
|
|
|
|
+ getInvoiceCompanyLists();
|
|
|
|
+ getKehuLists();
|
|
|
|
+}
|
|
|
|
+const oilTypeList = ref([]);
|
|
|
|
+function initOilTypeList() {
|
|
|
|
+ let params = {
|
|
|
|
+ projectid: dataForm.value[540],
|
|
|
|
+ ypmc: dataForm.value[537],
|
|
|
|
+ };
|
|
|
|
+ DemoApi.getOilTypeList(params).then((res) => {
|
|
|
|
+ oilTypeList.value = res.data.map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ label: item.油品型号,
|
|
|
|
+ value: item.油品型号,
|
|
|
|
+ md: item.合同定油品密度,
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+function oilTypeChange({ value }) {
|
|
|
|
+ dataForm.value[538] = value;
|
|
|
|
+ dataForm.value[549] = oilTypeList.value.find((item) => item.value === value).md;
|
|
|
|
+ findPrice();
|
|
|
|
+}
|
|
|
|
+function ypNameChange({ value }) {
|
|
|
|
+ dataForm.value[537] = value;
|
|
|
|
+ findPrice();
|
|
|
|
+}
|
|
|
|
+// 升变化 根据密度和升计算吨
|
|
|
|
+function onChangeL({ value }) {
|
|
|
|
+ dataForm.value[548] = value;
|
|
|
|
+ dataForm.value[550] = ((dataForm.value[548] * dataForm.value[549]) / 1000).toFixed(2);
|
|
|
|
+}
|
|
|
|
+// 上传
|
|
|
|
+function handleChangeFile({ fileList }) {
|
|
|
|
+ // 如果不是数组
|
|
|
|
+ const arr = [];
|
|
|
|
+ if (!Array.isArray(fileList)) {
|
|
|
|
+ fileList = [];
|
|
|
|
+ }
|
|
|
|
+ for (let i = 0; i < fileList.length; i++) {
|
|
|
|
+ const val = fileList[i];
|
|
|
|
+ const response = JSON.parse(val.response);
|
|
|
|
+ if (response.code === 200) {
|
|
|
|
+ const obj = {
|
|
|
|
+ url: config.baseURL + response.msg,
|
|
|
|
+ name: response.msg,
|
|
|
|
+ fileld: response.msg,
|
|
|
|
+ };
|
|
|
|
+ arr.push(obj);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ dataForm.value[544] = arr;
|
|
|
|
+}
|
|
|
|
+// 获取开票公司
|
|
|
|
+const companyList = ref([]);
|
|
|
|
+// getInvoiceCompanyList
|
|
|
|
+function getInvoiceCompanyLists() {
|
|
|
|
+ DemoApi.getInvoiceCompanyList({
|
|
|
|
+ ppid: dataForm.value[540],
|
|
|
|
+ }).then((res) => {
|
|
|
|
+ companyList.value = res.data.map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ label: item.付款单位名称,
|
|
|
|
+ value: item.付款单位名称,
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+ if (
|
|
|
|
+ dataForm.value[543] &&
|
|
|
|
+ !companyList.value.some((item) => item.value === dataForm.value[543])
|
|
|
|
+ ) {
|
|
|
|
+ companyList.value.push({
|
|
|
|
+ label: dataForm.value[543],
|
|
|
|
+ value: dataForm.value[543],
|
|
|
|
+ });
|
|
|
|
+ }
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
+// 获取单价
|
|
|
|
+const priceList = ref([]);
|
|
|
|
+// getPriceList
|
|
|
|
+function getPriceList() {
|
|
|
|
+ DemoApi.getUnitPriceList({
|
|
|
|
+ xiangmu_id: dataForm.value[540],
|
|
|
|
+ }).then((res) => {
|
|
|
|
+ priceList.value = res.data;
|
|
|
|
+ findPrice();
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+function findPrice() {
|
|
|
|
+ if (priceList.value === undefined) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const find = priceList.value.find(
|
|
|
|
+ (item) =>
|
|
|
|
+ // 型号 名称
|
|
|
|
+ item.COL_3 === dataForm.value[538] && item.COL_2 === dataForm.value[537]
|
|
|
|
+ );
|
|
|
|
+ if (!find) {
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+ dataForm.value[551] = find.COL_5;
|
|
|
|
+}
|
|
|
|
+function projectNameChange({ value }) {
|
|
|
|
+ dataForm.value[540] = value;
|
|
|
|
+ dataForm.value[541] = projectList.value.find((item) => item.value === value).label;
|
|
|
|
+}
|
|
|
|
+// 获取客户kehuList
|
|
|
|
+const kehuList = ref([]);
|
|
|
|
+function getKehuLists() {
|
|
|
|
+ DemoApi.getKehuList({
|
|
|
|
+ projectid: dataForm.value[540],
|
|
|
|
+ }).then((res) => {
|
|
|
|
+ kehuList.value = res.data.map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ label: item.客户名称,
|
|
|
|
+ value: item.客户名称,
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+ if (dataForm.value[542] && !kehuList.value.some((item) => item.value === dataForm.value[542])) {
|
|
|
|
+ kehuList.value.push({
|
|
|
|
+ label: dataForm.value[542],
|
|
|
|
+ value: dataForm.value[542],
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+// 是否发票
|
|
|
|
+const isInvoice = ref([
|
|
|
|
+ {
|
|
|
|
+ label: '是',
|
|
|
|
+ value: '是',
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ label: '否',
|
|
|
|
+ value: '否',
|
|
|
|
+ },
|
|
|
|
+]);
|
|
|
|
+const form = ref();
|
|
|
|
+const oldFormData = ref('');
|
|
|
|
+function handleSubmit() {
|
|
|
|
+ form.value
|
|
|
|
+ .validate()
|
|
|
|
+ .then(({ valid, errors }) => {
|
|
|
|
+ if (valid) {
|
|
|
|
+ dataForm.value[544] = dataForm.value[544].map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ name: item.name,
|
|
|
|
+ fileld: item.fileld,
|
|
|
|
+ url: item.fileld,
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ const params = {
|
|
|
|
+ id: id.value ? '/' + id.value : '',
|
|
|
|
+ formKey: formKey.value,
|
|
|
|
+ data: [
|
|
|
|
+ {
|
|
|
|
+ data: JSON.stringify(dataForm.value),
|
|
|
|
+ id: id.value ? id.value : '',
|
|
|
|
+ oldData: id.value ? oldFormData.value : null,
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ };
|
|
|
|
+ // 如果 id 存在则是编辑 否则是新增getAddData
|
|
|
|
+ if (id.value) {
|
|
|
|
+ DemoApi.getEditData(params).then((res) => {
|
|
|
|
+ toast.close();
|
|
|
|
+ dataForm.value[544] = dataForm.value[544].map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ name: item.name,
|
|
|
|
+ fileld: item.fileld,
|
|
|
|
+ url: config.baseURL + item.fileld,
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
+ // 如果res.data是数组则提示新增成功
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ uni.redirectTo({
|
|
|
|
+ url: '/pages/settlement/list',
|
|
|
|
+ });
|
|
|
|
+ }, 3000);
|
|
|
|
+ } else {
|
|
|
|
+ toast.error('提交失败');
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ DemoApi.getAddData(params).then((res) => {
|
|
|
|
+ toast.close();
|
|
|
|
+ dataForm.value[544] = dataForm.value[544].map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ name: item.name,
|
|
|
|
+ fileld: item.fileld,
|
|
|
|
+ url: config.baseURL + item.fileld,
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
+ // 如果res.data是数组则提示新增成功
|
|
|
|
+ if (res.data.length > 0) {
|
|
|
|
+ toast.success('新增成功');
|
|
|
|
+ // 返回上一页
|
|
|
|
+ // 三秒后返回上一页
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ uni.redirectTo({
|
|
|
|
+ url: '/pages/settlement/list',
|
|
|
|
+ });
|
|
|
|
+ }, 3000);
|
|
|
|
+ } else {
|
|
|
|
+ toast.success('更新成功');
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ toast.error('提交失败');
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ .catch((error) => {
|
|
|
|
+ console.log(error, 'error');
|
|
|
|
+ });
|
|
|
|
+}
|
|
</script>
|
|
</script>
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+.footer {
|
|
|
|
+ padding-bottom: 20px;
|
|
|
|
+}
|
|
|
|
+</style>
|