|
@@ -0,0 +1,483 @@
|
|
|
+<template>
|
|
|
+ <view>
|
|
|
+ <cu-custom :backUrl="'/pages/index/index?id=apps'" :isBack="true" bgColor="bg-gradual-blue">
|
|
|
+ <block slot="content">建筑垃圾清运处理</block>
|
|
|
+ </cu-custom>
|
|
|
+
|
|
|
+ <!-- First Section: 巡视工单 to 联系方式 -->
|
|
|
+ <view class="form-section">
|
|
|
+ <u--form :model="inputForm" labelWidth="100px" class="u-form" labelPosition="left" :rules="rules" ref="inputForm" v-if="!nodeFlag">
|
|
|
+
|
|
|
+ <u-form-item label="清运编号" prop="no">
|
|
|
+ <u--input v-model="inputForm.no" :disabled="true" placeholder="工单编号" clearable></u--input>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="所属单位" prop="processingUnitName" :required="true" v-if="disFlag">
|
|
|
+ <u--input v-model="inputForm.processingUnitName" :disabled="true" placeholder="处理单位" clearable></u--input>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="清运专员" prop="clearUserName">
|
|
|
+ <u--input v-model="inputForm.clearUserName" :disabled="true" placeholder="清运专员" clearable></u--input>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="联系方式" prop="clearUserMobile">
|
|
|
+ <u--input v-model="inputForm.clearUserMobile" :disabled="true" placeholder="联系方式" clearable></u--input>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="处理单位" prop="disposeType" :required="true">
|
|
|
+ <jp-picker v-model="inputForm.disposeType" rangeKey="label" rangeValue="value" :range="[
|
|
|
+ { label: '转运调剂处理', value: '1' },
|
|
|
+ { label: '自行处理', value: '2' },
|
|
|
+ ]" ></jp-picker>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="垃圾站点" prop="rubbishStation">
|
|
|
+ <u--input v-model="inputForm.rubbishStation" :disabled="true" placeholder="垃圾站点" clearable></u--input>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+
|
|
|
+ <u-row :key="index_workOver" v-for="(item,index_workOver) in this.inputForm.workOverNoList">
|
|
|
+
|
|
|
+ <u-form-item :label="`巡视工单 ${index_workOver + 1}`" :required="true" :prop="'workOverNoList[' + index_workOver + '].no'"
|
|
|
+ :rules="[
|
|
|
+ ]">
|
|
|
+ <u--input v-model="inputForm.workOverNoList[index_workOver].no" placeholder="请选择巡视工单编号" @focus="showWorkOver(index_workOver)" clearable></u--input>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <u-form-item label="" >
|
|
|
+ <u-button type="error" text="删除" @click="removeRow(index_workOver)"></u-button>
|
|
|
+ </u-form-item>
|
|
|
+ </u-row>
|
|
|
+
|
|
|
+ <u-form-item label="" >
|
|
|
+ <u-button style="width: 100%" type="primary" @click="addRow()" plain>新增基本信息</u-button>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+
|
|
|
+ </u--form>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- Second Section: 上传图片 -->
|
|
|
+ <view class="form-section">
|
|
|
+ <text class="u-demo-block__title">现场照片</text>
|
|
|
+ <view class="u-page__upload-item">
|
|
|
+ <u-upload
|
|
|
+ :fileList="fileList1"
|
|
|
+ @afterRead="afterRead"
|
|
|
+ @delete="deletePic"
|
|
|
+ name="1"
|
|
|
+ multiple
|
|
|
+ :maxCount="10"
|
|
|
+ ></u-upload>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- Third Section: 备注 -->
|
|
|
+ <view class="form-section">
|
|
|
+ <u--form :model="inputForm" labelWidth="100px" class="u-form" labelPosition="left" :rules="rules" ref="inputForm" v-if="!nodeFlag">
|
|
|
+ <u-form-item label="备注" borderBottom prop="remarks">
|
|
|
+ <u--textarea placeholder='请填写备注' :maxlength="500" v-model="inputForm.remarks"></u--textarea>
|
|
|
+ </u-form-item>
|
|
|
+
|
|
|
+ <!--<view class="button-container">
|
|
|
+ <u-button
|
|
|
+ text="提交"
|
|
|
+ size="large"
|
|
|
+ type="primary"
|
|
|
+ @click="saveForm"
|
|
|
+ ></u-button>
|
|
|
+ </view>-->
|
|
|
+ </u--form>
|
|
|
+ </view>
|
|
|
+ <WorkOverChoose ref="workOverChoose" @input="selectProjectChange" title="报告项目选择"/>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ import disposeRubbishService from '@/api/garbageClearance/disposeRubbishService'
|
|
|
+ import overService from '@/api/garbageClearance/overService'
|
|
|
+ import WorkOverChoose from './WorkOverChoose'
|
|
|
+ import {mapState, mapMutations, mapActions} from 'vuex'
|
|
|
+ import * as $auth from "../../common/auth";
|
|
|
+ export default {
|
|
|
+ components: {
|
|
|
+ WorkOverChoose,
|
|
|
+ },
|
|
|
+ computed: mapState({
|
|
|
+ userInfo: (state) => state.user.userInfo,
|
|
|
+ avatar: (state) => state.user.avatar
|
|
|
+ }),
|
|
|
+ data () {
|
|
|
+ return {
|
|
|
+ disFlag: true, // 启用动态获取处理单位则设置为false
|
|
|
+ processingUnits: [],
|
|
|
+ fileList1: [],
|
|
|
+ nodeFlag: false,
|
|
|
+ inputForm: {
|
|
|
+ no: '',
|
|
|
+ processingUnit: '',
|
|
|
+ processingUnitName: '',
|
|
|
+ clearUserId: '',
|
|
|
+ clearUserName: '',
|
|
|
+ clearUserMobile: '',
|
|
|
+ remarks: '',
|
|
|
+ workOverNoList: [],
|
|
|
+ disposeType: '',
|
|
|
+ rubbishStation: '',
|
|
|
+ },
|
|
|
+ rules: {
|
|
|
+ 'processingUnit': [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '处理单位不能为空',
|
|
|
+ trigger: ['blur', 'change']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 页面加载时执行
|
|
|
+ async created() {
|
|
|
+
|
|
|
+ let data = await disposeRubbishService.getMaxNo();
|
|
|
+ if (data) {
|
|
|
+ let newNo = parseInt(data, 10) + 1;
|
|
|
+ this.inputForm.no = 'XJ-J' + newNo;
|
|
|
+ } else {
|
|
|
+ // 获取当前年份
|
|
|
+ let nowY = new Date().getFullYear();
|
|
|
+ this.inputForm.no = 'XJ-J' + nowY + '0001';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果要使用动态获取处理单位则设置为true
|
|
|
+ if (false) {
|
|
|
+ let units = await overService.getProcessingUnit();
|
|
|
+ let childs = units[0].children;
|
|
|
+
|
|
|
+ if (childs) {
|
|
|
+ this.processingUnits = []; // 初始化数组
|
|
|
+
|
|
|
+ for (let i = 0; i < childs.length; i++) {
|
|
|
+ this.processingUnits.push({
|
|
|
+ label: childs[i].name,
|
|
|
+ value: childs[i].id
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.inputForm.processingUnit = this.userInfo.officeDTO.id
|
|
|
+ this.inputForm.processingUnitName = this.userInfo.officeDTO.name
|
|
|
+ // 不动态获取 根据当前登录人去查
|
|
|
+ await overService.getUserInfoByOffId(this.userInfo.officeDTO.id)
|
|
|
+ .then(data => {
|
|
|
+ this.inputForm.clearUserId = data.id
|
|
|
+ this.inputForm.clearUserName = data.name
|
|
|
+ this.inputForm.clearUserMobile = data.mobile
|
|
|
+ })
|
|
|
+ .catch(e => {
|
|
|
+ throw e;
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
+ props: {
|
|
|
+ status: {
|
|
|
+ type: String,
|
|
|
+ default: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ init (id) {
|
|
|
+ this.nodeFlag = true
|
|
|
+ this.inputForm.id = id
|
|
|
+ /*if (id) {
|
|
|
+ financeInvoiceService.queryById(id).then((data) => {
|
|
|
+
|
|
|
+ if (this.status === 'testSee') {
|
|
|
+ this.nodeFlag = true
|
|
|
+ this.testFlag = true
|
|
|
+ } else {
|
|
|
+ this.commonApi.getTaskNameByProcInsId(data.procInsId).then((data) => {
|
|
|
+ if (this.isNotEmpty(data)) {
|
|
|
+ if (data === '发起人重新申请' || this.isEmpty(data)) {
|
|
|
+ this.nodeFlag = false
|
|
|
+ } else if (data === '发票管理员审核'){
|
|
|
+ this.nodeFlag = true
|
|
|
+ this.addFlag = true
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ this.testFlag = true
|
|
|
+ this.addFlag = true
|
|
|
+ console.log('没有')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.inputForm = this.recover(this.inputForm, data)
|
|
|
+
|
|
|
+ if (this.inputForm.workAttachmentDtoList) {
|
|
|
+ this.inputForm.workAttachmentDtoList.forEach( (item,index) => {
|
|
|
+ this.$set(this.showFileList, index, true);
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ let i = this.inputForm.financeInvoiceBaseDTOList.length
|
|
|
+ let sun = 0
|
|
|
+ for (let j = 0; j < i; j++) {
|
|
|
+ sun = (100*sun + 100* this.inputForm.financeInvoiceBaseDTOList[j].account)/100
|
|
|
+ }
|
|
|
+
|
|
|
+ this.inputForm.accountTotal = sun
|
|
|
+ this.inputForm.billingDate = this.formatDate(new Date())
|
|
|
+ if ( !this.nodeFlag && this.status !== 'testSee') {
|
|
|
+ this.inputForm.financeInvoiceDetailDTOList.push({
|
|
|
+ code: '',
|
|
|
+ number: '',
|
|
|
+ account: sun,
|
|
|
+ rate: '',
|
|
|
+ amount: '',
|
|
|
+ tax: '',
|
|
|
+ allAmount: ''
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!this.isEmpty(this.inputForm.billingWorkplaceRealId)) {
|
|
|
+ this.bankList = []
|
|
|
+ workClientService.queryById(this.inputForm.billingWorkplaceRealId).then((data) => {
|
|
|
+ if (this.isNotEmpty(data.cwWorkClientBillingDTOList)) {
|
|
|
+ data.cwWorkClientBillingDTOList.forEach(i => {
|
|
|
+ i.ourBank = i.accountHolder
|
|
|
+ let test = {label: i.ourBank, value: i.id, account: i.account}
|
|
|
+ this.bankList.push(test)
|
|
|
+ this.$set(this.inputForm, 'openBank', i.id);
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.bankList = []
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }*/
|
|
|
+ },
|
|
|
+ addRow() {
|
|
|
+ this.inputForm.workOverNoList.push({ recipientAgent: this.userInfo.name,
|
|
|
+ recipientAgentId: this.userInfo.id, recipientOffice: this.userInfo.officeDTO.name });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 显示 项目选择器
|
|
|
+ showWorkOver(index) {
|
|
|
+ this.$refs.workOverChoose.init(index);
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ removeRow(type,index) {
|
|
|
+ // 点击删除按钮时,从表格中移除指定行
|
|
|
+ this.inputForm.workOverNoList.splice(index, 1);
|
|
|
+ },
|
|
|
+
|
|
|
+ formatDate(date) {
|
|
|
+ const dateNew = new Date(date); // 将日期字符串转换为 Date 对象
|
|
|
+ const year = dateNew.getFullYear();
|
|
|
+ const month = (dateNew.getMonth() + 1).toString().padStart(2, '0');
|
|
|
+ const day = dateNew.getDate().toString().padStart(2, '0');
|
|
|
+ return `${year}-${month}-${day}`;
|
|
|
+ },
|
|
|
+ isEmpty(value) {
|
|
|
+ let result = false;
|
|
|
+ if (value == null || value == undefined) {
|
|
|
+ result = true;
|
|
|
+ }
|
|
|
+ if (typeof value == 'string' && (value.replace(/\s+/g, "") == "" || value == "")) {
|
|
|
+ result = true;
|
|
|
+ }
|
|
|
+ if (typeof value == "object" && value instanceof Array && value.length === 0) {
|
|
|
+ result = true;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ isNotEmpty (value) {
|
|
|
+ return !this.isEmpty(value)
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 判断是否为空
|
|
|
+ */
|
|
|
+ isNull(val) {
|
|
|
+ if (val instanceof Array) {
|
|
|
+ if (val.length === 0) return true;
|
|
|
+ } else if (val instanceof Object) {
|
|
|
+ if (JSON.stringify(val) === "{}") return true;
|
|
|
+ } else {
|
|
|
+ if (
|
|
|
+ val === "null" ||
|
|
|
+ val == null ||
|
|
|
+ val === "undefined" ||
|
|
|
+ val === undefined ||
|
|
|
+ val === ""
|
|
|
+ )
|
|
|
+ return true;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+
|
|
|
+ formatDateNew(date) {
|
|
|
+ const year = date.getFullYear();
|
|
|
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
|
|
+ const day = date.getDate().toString().padStart(2, '0');
|
|
|
+ const hours = date.getHours().toString().padStart(2, '0');
|
|
|
+ const minutes = date.getMinutes().toString().padStart(2, '0');
|
|
|
+ const seconds = date.getSeconds().toString().padStart(2, '0');
|
|
|
+
|
|
|
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
|
+ },
|
|
|
+ saveForm(callback) {
|
|
|
+
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ // 表单规则验证
|
|
|
+ // ...
|
|
|
+
|
|
|
+ let errors = [];
|
|
|
+
|
|
|
+ if (this.fileList1 && this.fileList1.length > 0) {
|
|
|
+ // 将 fileList1 中的每个文件对象的属性名调整为新的属性名
|
|
|
+ this.inputForm.fileList1 = this.fileList1.map(file => {
|
|
|
+ return {
|
|
|
+ attachmentName: file.name,
|
|
|
+ fileSize: file.size,
|
|
|
+ url: file.url,
|
|
|
+ type: file.type, // 如果不需要,可以不写
|
|
|
+ };
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (errors.length > 0) {
|
|
|
+ // 存在错误,显示提示信息
|
|
|
+ errors.forEach(error => {
|
|
|
+ uni.showToast({
|
|
|
+ title: error,
|
|
|
+ icon: 'none',
|
|
|
+ duration: 2000
|
|
|
+ });
|
|
|
+ });
|
|
|
+ reject('Form validation failed');
|
|
|
+ } else {
|
|
|
+ // 所有验证通过,执行保存操作
|
|
|
+ this.$refs.inputForm.validate().then(() => {
|
|
|
+ uni.showLoading();
|
|
|
+
|
|
|
+ overService.save(this.inputForm).then(data => {
|
|
|
+
|
|
|
+ uni.showToast({title:"提交成功", icon:"success"});
|
|
|
+ // 返回上一页
|
|
|
+ uni.navigateBack({
|
|
|
+ delta: 1
|
|
|
+ });
|
|
|
+ resolve('Form saved successfully');
|
|
|
+ }).catch(error => {
|
|
|
+ reject('Save operation failed');
|
|
|
+ });
|
|
|
+ }).catch(() => {
|
|
|
+ reject('Form validation failed');
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 删除图片
|
|
|
+ deletePic(event) {
|
|
|
+ this[`fileList${event.name}`].splice(event.index, 1)
|
|
|
+ },
|
|
|
+ // 新增图片
|
|
|
+ async afterRead(event) {
|
|
|
+ // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
|
|
|
+ let lists = [].concat(event.file)
|
|
|
+ let fileListLen = this[`fileList${event.name}`].length
|
|
|
+ lists.map((item) => {
|
|
|
+ this[`fileList${event.name}`].push({
|
|
|
+ ...item,
|
|
|
+ status: 'uploading',
|
|
|
+ message: '上传中'
|
|
|
+ })
|
|
|
+ })
|
|
|
+ for (let i = 0; i < lists.length; i++) {
|
|
|
+ const result = await this.uploadFilePromise(lists[i].url, fileListLen)
|
|
|
+ let item = this[`fileList${event.name}`][fileListLen]
|
|
|
+ this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
|
|
|
+ status: 'success',
|
|
|
+ message: '',
|
|
|
+ url: result
|
|
|
+ }))
|
|
|
+ fileListLen++
|
|
|
+ }
|
|
|
+ },
|
|
|
+ uploadFilePromise(url, index) {
|
|
|
+ console.log($auth.getUserToken())
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ let a = uni.uploadFile({
|
|
|
+ url: 'http://localhost:8000/app/file/webUpload/fileUpload', // 仅为示例,非真实的接口地址
|
|
|
+ filePath: url,
|
|
|
+ name: 'file',
|
|
|
+ formData: {
|
|
|
+ user: this.$store.state.user.userInfo
|
|
|
+ },
|
|
|
+ header: {
|
|
|
+ 'token': $auth.getUserToken(),
|
|
|
+ },
|
|
|
+ success: (res) => {
|
|
|
+
|
|
|
+ // this.fileList1[index].url = url
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
+ const dataObj = JSON.parse(res.data);
|
|
|
+ const url = dataObj.url;
|
|
|
+ resolve(url);
|
|
|
+ }, 1000);
|
|
|
+ },
|
|
|
+ fail: (err) => {
|
|
|
+ console.error('Upload failed:', err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getUserInfoByOffId(){
|
|
|
+ // 根据组织ID 获取 该村的 村支书
|
|
|
+ overService.getUserInfoByOffId(this.inputForm.processingUnit)
|
|
|
+ .then(data => {
|
|
|
+ this.inputForm.clearUserId = data.id
|
|
|
+ this.inputForm.clearUserName = data.name
|
|
|
+ this.inputForm.clearUserMobile = data.mobile
|
|
|
+ })
|
|
|
+ .catch(e => {
|
|
|
+ throw e;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style>
|
|
|
+ .form-section {
|
|
|
+ padding: 10px 15px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ background-color: #ffffff;
|
|
|
+ border-radius: 5px;
|
|
|
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
|
|
+ }
|
|
|
+
|
|
|
+ .u-page__upload-item {
|
|
|
+ margin-top: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .button-container {
|
|
|
+ margin-top: 20px;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .cu-form-group .title {
|
|
|
+ min-width: 100px;
|
|
|
+ }
|
|
|
+</style>
|