123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236 |
- <template>
- <zj-page-container>
- <zj-page-fill class="neibuview">
- <zj-form-container ref="formRef" v-if="formData.orderType" :form-data="formData"
- :formAttributes="{ 'label-position': 'top' }">
- <zj-form-module :title="`费用结算-${({ INSTALL: '安装', REPAIR: '维修' })[formData.orderType]}`" :form-data="formData"
- :form-items="repairInfo" />
- </zj-form-container>
- <el-empty v-else description="暂时没有结算信息"></el-empty>
- </zj-page-fill>
- <div v-if="formData.settleStatus == 'YWG'" style="box-sizing: border-box;padding: 16px;">
- <el-button size="mini" @click="queding">确定结算</el-button>
- </div>
- <div v-else style="box-sizing: border-box;padding: 16px;">
- <el-button v-if="showbtn" type="danger" plain size="mini" @click="itemOrderBaseSettleNormReset">重新结算</el-button>
- </div>
- </zj-page-container>
- </template>
- <script>
- import { getClassifyList } from '@/api/goods'
- import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
- import { listPageV2 } from "@/api/workOrder/settlementStandardInstall";
- import { listPageV2 as listPageV2Repair } from "@/api/workOrder/settlementStandardRepair";
- import { listPageV2 as listPageV2Other } from "@/api/workOrder/settlementStandardOther";
- import { orderBaseSettleNormDetail, orderBaseSettleNormConfirm, settleNormInstallQuery, settleNormOtherQuery, orderBaseSettleNormReset } from "@/api/workOrderPool.js";
- import { EventBus } from '@/utils/eventBus'
- export default {
- props: {
- id: {
- type: [String, Number],
- default: null,
- }
- },
- data() {
- return {
- gonglv: [],
- gonglr: [],
- classifyList: [],
- otherList: [],
- formData: {},
- showbtn:false,
- }
- },
- computed: {
- // 产品信息
- productInfoColumns() {
- return [
- {
- columnAttributes: {
- label: '工单来源',
- prop: 'orderChannelText'
- },
- },
- {
- columnAttributes: {
- label: '产品品牌',
- prop: 'brand'
- },
- },
- {
- columnAttributes: {
- label: '产品大类',
- prop: 'mainName'
- },
- },
- {
- columnAttributes: {
- label: '产品小类',
- prop: 'smallName'
- },
- },
- {
- columnAttributes: {
- label: '产品机型',
- prop: 'goodsName'
- },
- },
- {
- columnAttributes: {
- label: '数量',
- prop: 'orderNum'
- },
- }]
- },
- // 师傅信息
- masterInfoColumns() {
- return [{
- columnAttributes: {
- label: '工程师名称',
- prop: 'workerName'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- </div>
- }
- },
- {
- columnAttributes: {
- label: '联系电话',
- prop: 'workerMobile',
- width: '140px'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- </div>
- }
- },
- {
- columnAttributes: {
- label: '结算费用',
- prop: 'settleAmount'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${row.pfuqinid}.workerList.${row.zijideid}.${column.columnAttributes.prop}`} rules={required}>
- <el-input
- type="number"
- disabled={!this.formData.normList[row.pfuqinid].bianji || this.formData?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.["poolStatus"] == "YES"}
- value={this.formData?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- onInput={(val) => {
- // var num = 0
- // this.formData?.normList[row.pfuqinid]?.workerList.map((item, in_dex) => {
- // if (in_dex !== row.zijideid) {
- // num += Number(item.settleAmount)
- // }
- // })
- // // 最大
- // var maxNum = Number(this.formData.normList[row.pfuqinid]["settleAmount"]) - num
- // this.formData.normList[row.pfuqinid].workerList[row.zijideid][column.columnAttributes.prop] = Number(val) > maxNum ? maxNum : Number(val)
- this.formData.normList[row.pfuqinid].workerList[row.zijideid][column.columnAttributes.prop] = val
- }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div>
- }
- }, {
- columnAttributes: {
- label: '确认人',
- prop: 'confirmBy'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- </div>
- }
- },
- {
- columnAttributes: {
- label: '确认时间',
- prop: 'confirmTime'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- </div>
- }
- },
- {
- columnAttributes: {
- label: '汇总状态',
- prop: 'poolStatus'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {({ "NO": "未汇总", "YES": "已汇总" })[this.formData?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]]}
- </div>
- }
- }, {
- columnAttributes: {
- label: '操作',
- prop: '',
- fixed: 'right',
- width: "100px"
- },
- render: (h, { row, column, index }) => {
- return this.formData.settleStatus == 'YWG' || (this.formData.settleStatus == 'YJS' && this.formData?.normList[row.pfuqinid]?.workerList.find(item => item.poolStatus == "NO")) ? (<div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData.normList[row.pfuqinid].bianji ? <el-button type="text" onClick={
- () => {
- var yjsje = [0, 0, 0, this.formData?.normList[row.pfuqinid]?.workerList.filter(item => item.poolStatus == "YES").map(item => item.settleAmount)].reduce(function (prev, curr, idx, arr) {
- return prev + curr;
- })
- var nou = this.formData?.normList[row.pfuqinid]?.workerList.filter(item => item.poolStatus == "NO")
- var qian = ((((Number(this.formData?.normList[row.pfuqinid]["settleAmount"]) - yjsje) / nou.length) * 100) / 100).toFixed(2)
- var rongyu = ((Number(this.formData?.normList[row.pfuqinid]["settleAmount"]) - yjsje) - (qian * nou.length)).toFixed(2)
- nou.map((item, index) => {
- if (index === 0) {
- item.settleAmount = (Number(qian) + Number(rongyu)).toFixed(2)
- } else {
- item.settleAmount = qian
- }
- })
- }
- }>平分费用</el-button> : null}
- {this.formData.normList[row.pfuqinid].bianji ? <el-button type="text" onClick={
- () => {
- this.formData.normList[row.pfuqinid].bianji = false
- }
- }>确定</el-button> : null}
- {!this.formData.normList[row.pfuqinid].bianji ? <el-button type="text" onClick={
- () => {
- this.formData.normList[row.pfuqinid].bianji = true
- }
- }>修改</el-button> : null}
- </div>) : null
- }
- }]
- },
- masterInfoColumnsOther() {
- return [{
- columnAttributes: {
- label: '工程师名称',
- prop: 'workerName'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- </div>
- }
- },
- {
- columnAttributes: {
- label: '联系电话',
- prop: 'workerMobile',
- width: '140px'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- </div>
- }
- },
- {
- columnAttributes: {
- label: '结算费用',
- prop: 'settleAmount'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`otherNormList.${row.pfuqinid}.workerList.${row.zijideid}.${column.columnAttributes.prop}`} rules={required}>
- <el-input
- type="number"
- disabled={!this.formData.otherNormList[row.pfuqinid].bianji || this.formData?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.["poolStatus"] == "YES"}
- value={this.formData?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- onInput={(val) => {
- // var num = 0
- // this.formData?.otherNormList[row.pfuqinid]?.workerList.map((item, in_dex) => {
- // if (in_dex !== row.zijideid) {
- // num += Number(item.settleAmount)
- // }
- // })
- // // 最大
- // var maxNum = Number(this.formData.otherNormList[row.pfuqinid]["settleAmount"]) - num
- // this.formData.otherNormList[row.pfuqinid].workerList[row.zijideid][column.columnAttributes.prop] = Number(val) > maxNum ? maxNum : Number(val)
- this.formData.otherNormList[row.pfuqinid].workerList[row.zijideid][column.columnAttributes.prop] = val
- }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div>
- }
- }, {
- columnAttributes: {
- label: '确认人',
- prop: 'confirmBy'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- </div>
- }
- },
- {
- columnAttributes: {
- label: '确认时间',
- prop: 'confirmTime'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
- </div>
- }
- },
- {
- columnAttributes: {
- label: '汇总状态',
- prop: 'poolStatus'
- },
- render: (h, { row, column, index }) => {
- return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {({ "NO": "未汇总", "YES": "已汇总" })[this.formData?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]]}
- </div>
- }
- }, {
- columnAttributes: {
- label: '操作',
- prop: '',
- fixed: 'right',
- width: "100px"
- },
- render: (h, { row, column, index }) => {
- return this.formData.settleStatus == 'YWG' || (this.formData.settleStatus == 'YJS' && this.formData?.otherNormList[row.pfuqinid]?.workerList.find(item => item.poolStatus == "NO")) ? (<div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
- {this.formData.otherNormList[row.pfuqinid].bianji ? <el-button type="text" onClick={
- () => {
- var yjsje = [0, 0, 0, this.formData?.otherNormList[row.pfuqinid]?.workerList.filter(item => item.poolStatus == "YES").map(item => item.settleAmount)].reduce(function (prev, curr, idx, arr) {
- return prev + curr;
- })
- var nou = this.formData?.otherNormList[row.pfuqinid]?.workerList.filter(item => item.poolStatus == "NO")
- var qian = ((((Number(this.formData?.otherNormList[row.pfuqinid]["settleAmount"]) - yjsje) / nou.length) * 100) / 100).toFixed(2)
- var rongyu = ((Number(this.formData?.otherNormList[row.pfuqinid]["settleAmount"]) - yjsje) - (qian * nou.length)).toFixed(2)
- nou.map((item, index) => {
- if (index === 0) {
- item.settleAmount = (Number(qian) + Number(rongyu)).toFixed(2)
- } else {
- item.settleAmount = qian
- }
- })
- }
- }>平分费用</el-button> : null}
- {this.formData.otherNormList[row.pfuqinid].bianji ? <el-button type="text" onClick={
- () => {
- this.formData.otherNormList[row.pfuqinid].bianji = false
- }
- }>确定</el-button> : null}
- {!this.formData.otherNormList[row.pfuqinid].bianji ? <el-button type="text" onClick={
- () => {
- this.formData.otherNormList[row.pfuqinid].bianji = true
- }
- }>修改</el-button> : null}
- </div>) : null
- }
- }]
- },
- classifyColumns() {
- return [{
- columnAttributes: {
- label: '工单类型',
- prop: 'typeName'
- },
- },
- {
- columnAttributes: {
- label: '结算工单来源',
- prop: 'channelId',
- width: '110'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-select
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- onChange={(val) => {
- row.parentCategoryId = ""
- row.parentCategoryName = ""
- row.categoryId = ""
- row.categoryName = ""
- row.label = ""
- row.normAmount = ""
- row.repairAmount = ""
- row.settleNormId = ""
- if (val) {
- var data = this.classifyListChuLi("orderChannelId", "orderChannelText").find(item => item.value == val)
- row.channelText = data.label
- } else {
- row.channelText = ""
- }
- }}
- placeholder="请选择">
- {this.classifyListChuLi("orderChannelId", "orderChannelText").map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
- </el-select>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '结算产品大类',
- prop: 'parentCategoryId',
- width: '110'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-select
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- onChange={(val) => {
- row.categoryId = ""
- row.categoryName = ""
- row.label = ""
- row.normAmount = ""
- row.repairAmount = ""
- row.settleNormId = ""
- if (val) {
- var data = this.classifyListChuLi("parentCategoryId", "parentCategoryName", (item) => item.orderChannelId == row.channelId).find(item => item.value == val)
- row.parentCategoryName = data.label
- } else {
- row.parentCategoryName = ""
- }
- }}
- placeholder="请选择">
- {this.classifyListChuLi("parentCategoryId", "parentCategoryName", (item) => item.orderChannelId == row.channelId).map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
- </el-select>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '结算产品小类',
- prop: 'categoryId',
- width: '110'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-select
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- onChange={(val) => {
- row.label = ""
- row.normAmount = ""
- row.repairAmount = ""
- row.settleNormId = ""
- if (val) {
- var data = this.classifyListChuLi("categoryId", "categoryName", (item) => item.orderChannelId == row.channelId && item.parentCategoryId == row.parentCategoryId).find(item => item.value == val)
- row.categoryName = data.label
- } else {
- row.categoryName = ""
- }
- }}
- placeholder="请选择">
- {this.classifyListChuLi("categoryId", "categoryName", (item) => item.orderChannelId == row.channelId && item.parentCategoryId == row.parentCategoryId).map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
- </el-select>
- </el-form-item>
- </div> : null
- }
- }]
- },
- normColumns() {
- return [
- ...this.productInfoColumns,
- ...this.classifyColumns,
- ...(() => {
- if (this.formData.orderType == 'INSTALL') {
- return [
- {
- columnAttributes: {
- label: '结算功率',
- prop: 'label'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-select
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- onChange={(val) => {
- if (val) {
- var data = this.getflList(this.gonglv, row).find(item => item.label == val)
- row.normAmount = data.normAmount
- row.settleNormId = data.id
- } else {
- row.normAmount = ""
- row.settleNormId = ""
- }
- }}
- placeholder="请选择">
- {this.getflList(this.gonglv, row).map((item, index_) => <el-option key={index_} label={item.label} value={item.label}></el-option>)}
- </el-select>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '结算标准(元/套)',
- prop: 'normAmount'
- },
- },
- {
- columnAttributes: {
- label: '结算数量',
- prop: 'settleNum'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-input
- type="number"
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '结算金额(元)',
- prop: 'settleAmount',
- },
- render: (h, { row, column, index }) => {
- row.settleAmount = (((Number(row.normAmount || 0) * Number(row.settleNum || 0)) * 100) / 100).toFixed(2)
- return this.panfuan(row) ? <div class="redbordererr">
- {row.settleAmount}
- </div> : null
- }
- },
- ]
- }
- return []
- })(),
- ...(() => {
- if (this.formData.orderType == 'REPAIR') {
- return [
- {
- columnAttributes: {
- label: '质保类型',
- prop: 'label'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-select
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- onChange={(val) => {
- if (val) {
- var data = this.getflList(this.gonglr, row).find(item => item.label == val)
- row.repairAmount = data.repairAmount
- row.normAmount = data.normAmount
- row.settleNormId = data.id
- } else {
- row.repairAmount = ""
- row.normAmount = ""
- row.settleNormId = ""
- }
- }}
- placeholder="请选择">
- {this.getflList(this.gonglr, row).map((item, index_) => <el-option key={index_} label={({ INSIDE: '保内', OUT: '保外' })[item.label]} value={item.label}></el-option>)}
- </el-select>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '上门费(元/单)',
- prop: 'repairAmount',
- width: '110'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-input
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- type="number"
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '维修费结算比例%',
- prop: 'normAmount',
- width: '110'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- {row[column.columnAttributes.prop]}%
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '维修费用结算',
- prop: 'repairNormAmount',
- width: '110'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-input
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- type="number"
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '结算数量',
- prop: 'settleNum'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-input
- type="number"
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '结算金额(元)',
- prop: 'settleAmount',
- },
- render: (h, { row, column, index }) => {
- row.settleAmount = (((Number(row.repairAmount || 0) + (Number(row.normAmount || 0) / 100) * Number(row.repairNormAmount || 0) * Number(row.settleNum || 0)) * 100) / 100).toFixed(2)
- return this.panfuan(row) ? <div class="redbordererr">
- {row.settleAmount}
- </div> : null
- }
- },
- ]
- }
- return []
- })(),
- {
- columnAttributes: {
- label: '备注',
- prop: 'remark'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px">
- <el-input
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div> : null
- }
- },
- ...this.masterInfoColumns
- ]
- },
- otherclassifyColumns() {
- return [
- {
- columnAttributes: {
- label: '结算工单来源',
- prop: 'channelId',
- width: '110'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px" prop={`normList.${index}.${column.columnAttributes.prop}`} rules={required}>
- <el-select
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- onChange={(val) => {
- row.type = ""
- row.label = ""
- row.normAmount = ""
- row.settleNormId = ""
- row.settleNum = ""
- if (val) {
- var data = this.otherListChuLi("orderChannelId", "orderChannelText").find(item => item.value == val)
- row.channelText = data.label
- } else {
- row.channelText = ""
- }
- }}
- placeholder="请选择">
- {this.otherListChuLi("orderChannelId", "orderChannelText").map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
- </el-select>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '费用类型',
- prop: 'type'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px">
- <el-select
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- onChange={(val) => {
- row.label = ""
- row.normAmount = ""
- row.settleNormId = ""
- row.settleNum = ""
- }}
- placeholder="请选择">
- {this.otherListChuLi("type", "typeName", (item) => item.orderChannelId == row.channelId).map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
- </el-select>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '规格',
- prop: 'label'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px">
- <el-select
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- onChange={(val) => {
- row.settleNum = ""
- if (val) {
- var data = this.otherListChuLi("label", "label", (item) => { return item.orderChannelId == row.channelId && item.type == row.type }, "normAmount", "id").find(item => item.label == val)
- row.normAmount = data.normAmount
- row.settleNormId = data.id
- } else {
- row.normAmount = ""
- row.settleNormId = ""
- }
- }}
- placeholder="请选择">
- {this.otherListChuLi("label", "label", (item) => item.orderChannelId == row.channelId && item.type == row.type).map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
- </el-select>
- </el-form-item>
- </div> : null
- }
- }]
- },
- otherColumns() {
- return [
- ...this.productInfoColumns,
- ...this.otherclassifyColumns,
- {
- columnAttributes: {
- label: '单价(元/套)',
- prop: 'normAmount'
- },
- },
- {
- columnAttributes: {
- label: '数量',
- prop: 'settleNum'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px">
- <el-input
- type="number"
- disabled={!row.bianji || row.normAmount ? this.formData.settleStatus != 'YWG' : true}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '结算金额(元)',
- prop: 'settleAmount',
- },
- render: (h, { row, column, index }) => {
- row.settleAmount = (((Number(row.normAmount || 0) * Number(row.settleNum || 0)) * 100) / 100).toFixed(2)
- return this.panfuan(row) ? <div class="redbordererr">
- {row.settleAmount}
- </div> : null
- }
- },
- {
- columnAttributes: {
- label: '备注',
- prop: 'remark'
- },
- render: (h, { row, column, index }) => {
- return this.panfuan(row) ? <div class="redbordererr">
- <el-form-item label="" label-width="0px">
- <el-input
- disabled={!row.bianji || this.formData.settleStatus != 'YWG'}
- value={row[column.columnAttributes.prop]}
- onInput={(val) => { row[column.columnAttributes.prop] = val }}
- placeholder="请输入内容"
- >
- </el-input>
- </el-form-item>
- </div> : null
- }
- },
- ...this.masterInfoColumnsOther
- ]
- },
- // 师傅汇总
- shiFuHuiZongColumns() {
- return [
- {
- columnAttributes: {
- label: '工程师名称',
- prop: 'workerName'
- },
- },
- {
- columnAttributes: {
- label: '联系电话',
- prop: 'workerMobile'
- },
- },
- {
- columnAttributes: {
- label: '费用结算总金额',
- prop: 'zonjine'
- },
- },
- {
- columnAttributes: {
- label: '结算总金额',
- prop: 'settleAmount'
- },
- }]
- },
- repairInfo() {
- return [
- {
- name: 'el-input',
- md: 6,
- attributes: { disabled: true, },
- formItemAttributes: { label: '网点名称', prop: 'websitName' },
- },
- {
- name: 'el-input',
- md: 6,
- attributes: { disabled: true, },
- formItemAttributes: { label: '工程师', prop: 'workerName' },
- },
- {
- name: 'el-input',
- md: 6,
- attributes: { disabled: true, },
- formItemAttributes: { label: '联系电话', prop: 'mobile' },
- },
- {
- name: 'el-input',
- md: 6,
- attributes: { disabled: true, },
- formItemAttributes: { label: '身份证', prop: 'idcard' },
- },
- {
- md: 24,
- name: 'slot-component',
- formItemAttributes: {
- label: '费用结算',
- prop: 'normList',
- },
- render: (h, { props, onInput }) => {
- var { formData } = props
- return (
- <zj-table
- columns={this.normColumns}
- table-data={formData.normList}
- tableAttributes={{
- 'span-method': ({ row, column, rowIndex, columnIndex }) => {
- if (columnIndex === this.normColumns.length - 1) {
- if (row.zijideid == 0) {
- return {
- rowspan: formData.normList[row.pfuqinid].workerList.length,
- colspan: 1
- };
- } else {
- return {
- rowspan: 0,
- colspan: 0
- };
- }
- }
- }
- }}
- />
- )
- }
- },
- {
- md: 24,
- name: 'slot-component',
- formItemAttributes: {
- label: '其他费用结算',
- prop: 'otherNormList',
- },
- render: (h, { props, onInput }) => {
- var { formData } = props
- return (
- <zj-table
- columns={this.otherColumns}
- table-data={formData.otherNormList}
- tableAttributes={{
- 'span-method': ({ row, column, rowIndex, columnIndex }) => {
- if (columnIndex === this.otherColumns.length - 1) {
- if (row.zijideid == 0) {
- return {
- rowspan: formData.otherNormList[row.pfuqinid].workerList.length,
- colspan: 1
- };
- } else {
- return {
- rowspan: 0,
- colspan: 0
- };
- }
- }
- }
- }}
- />
- )
- }
- },
- {
- md: 24,
- name: 'slot-component',
- formItemAttributes: {
- label: '师傅结算费用汇总',
- prop: 'otherNormList',
- },
- render: (h, { props, onInput }) => {
- var { formData } = props
- return (
- <zj-table
- columns={this.shiFuHuiZongColumns}
- table-data={this.zongbiaoheji}
- tableAttributes={{
- 'span-method': ({ row, column, rowIndex, columnIndex }) => {
- if (columnIndex === 2) {
- if (rowIndex == 0) {
- return {
- rowspan: this.zongbiaoheji.length,
- colspan: 1
- };
- } else {
- return {
- rowspan: 0,
- colspan: 0
- };
- }
- }
- }
- }}
- />
- )
- }
- }
- ]
- },
- zongbiaoheji() {
- var workers = {}
- var zonjine = 0
- this.formData.normList.map(item => {
- zonjine += (Number(item.settleAmount) || 0);
- item?.workerList?.map(data => {
- if (!workers[data.workerId]) {
- workers[data.workerId] = JSON.parse(JSON.stringify(data))
- } else {
- workers[data.workerId].settleAmount = (((Number(workers[data.workerId].settleAmount) + Number(data.settleAmount)) * 100) / 100).toFixed(2)
- }
- })
- })
- this.formData.otherNormList.map(item => {
- zonjine += (Number(item.settleAmount) || 0);
- item?.workerList?.map(data => {
- if (!workers[data.workerId]) {
- workers[data.workerId] = JSON.parse(JSON.stringify(data))
- } else {
- workers[data.workerId].settleAmount = (((Number(workers[data.workerId].settleAmount) + Number(data.settleAmount)) * 100) / 100).toFixed(2)
- }
- })
- })
- return Object.keys(workers).map(key => {
- workers[key].zonjine = ((zonjine * 100) / 100).toFixed(2)
- return workers[key]
- })
- },
- },
- watch: {
- id: {
- handler(newVal, oldVal) {
- this.init()
- },
- deep: true,
- immediate: true,
- },
- },
- methods: {
- panfuan(item) {
- if (!!item.id) {
- return true
- } else {
- return false
- }
- },
- // 产品类型过滤筛选
- classifyListChuLi(value, label, func, ...keys) {
- var obj = {}
- this.classifyList.map(item => {
- if (func && !func(item)) {
- return
- }
- obj[item[value]] = {
- label: item[label]
- }
- for (var key of keys) {
- obj[item[value]][key] = item[key]
- }
- })
- return Object.keys(obj).map(value => {
- return {
- value: value,
- ...obj[value]
- }
- })
- },
- // 其他类型筛选
- otherListChuLi(value, label, func, ...keys) {
- var obj = {}
- this.otherList.map(item => {
- if (func && !func(item)) {
- return
- }
- obj[item[value]] = {
- label: item[label]
- }
- for (var key of keys) {
- obj[item[value]][key] = item[key]
- }
- })
- return Object.keys(obj).map(value => {
- return {
- value: value,
- ...obj[value]
- }
- })
- },
- getflList(list = [], row = {},) {
- return list.filter(item => (
- item.type == row.type &&
- item.parentCategoryId == row.parentCategoryId &&
- item.categoryId == row.categoryId
- // &&
- // !~this.formData.normList.map(v => `${v.type}_${v.parentCategoryId}_${v.categoryId}_${v.label}`).filter(v => (
- // v != `${row.type}_${row.parentCategoryId}_${row.categoryId}_${row.label}`
- // )).indexOf(`${item.type}_${item.parentCategoryId}_${item.categoryId}_${item.label}`)
- ))
- },
- queding() {
- this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
- if (valid) {
- try {
- this.formData.normList.filter(item => !!item.id).map(item => {
- if ([0, 0, 0, ...item.workerList.map(val => Number(val.settleAmount))].reduce(function (prev, curr, idx, arr) {
- return prev + curr;
- }) !== Number(item.settleAmount)) {
- throw new Error(`费用信息-${item.channelText}-${item.parentCategoryName}-${item.categoryName}-${item.label}:合计结算总金额与总金额不等`);
- }
- })
- this.formData.otherNormList.filter(item => !!item.id).map(item => {
- if ([0, 0, 0, ...item.workerList.map(val => Number(val.settleAmount))].reduce(function (prev, curr, idx, arr) {
- return prev + curr;
- }) !== Number(item.settleAmount)) {
- throw new Error(`其他费用信息-${item.channelText}-${item.type}-${item.label}:合计结算总金额与总金额不等`);
- }
- })
- } catch (err) {
- this.$message.warning(err.message)
- return
- }
- orderBaseSettleNormConfirm({
- ...this.formData,
- normList: this.formData.normList.filter(item => !!item.id),
- otherNormList: this.formData.otherNormList.filter(item => !!item.id),
- }).then(res => {
- this.$message({
- type: 'success',
- message: '结算成功'
- })
- // 结算成功后跳转列表
- EventBus.$emit('handleOrderClone')
- })
- }
- })
- },
- itemOrderBaseSettleNormReset() {
- try {
- this.formData.normList.filter(item => !!item.id).map(item => {
- if ([0, 0, 0, ...item.workerList.map(val => Number(val.settleAmount))].reduce(function (prev, curr, idx, arr) {
- return prev + curr;
- }) !== Number(item.settleAmount)) {
- throw new Error(`费用信息-${item.channelText}-${item.parentCategoryName}-${item.categoryName}-${item.label}:合计结算总金额与总金额不等`);
- }
- })
- this.formData.otherNormList.filter(item => !!item.id).map(item => {
- if ([0, 0, 0, ...item.workerList.map(val => Number(val.settleAmount))].reduce(function (prev, curr, idx, arr) {
- return prev + curr;
- }) !== Number(item.settleAmount)) {
- throw new Error(`其他费用信息-${item.channelText}-${item.type}-${item.label}:合计结算总金额与总金额不等`);
- }
- })
- } catch (err) {
- this.$message.warning(err.message)
- return
- }
- orderBaseSettleNormReset({
- ...this.formData,
- normList: this.formData.normList.filter(item => !!item.id),
- otherNormList: this.formData.otherNormList.filter(item => !!item.id),
- }).then(res => {
- this.$message({
- type: 'success',
- message: '结算成功'
- })
- // 结算成功后跳转列表
- EventBus.$emit('handleOrderClone')
- })
- },
- init() {
- if (this.id) {
- orderBaseSettleNormDetail({
- id: this.id
- }).then(res => {
- var orderChannelId
- var normList = []
- var pfuqinid = 0
- res.data.normList.map((item, index) => {
- if (!orderChannelId) { orderChannelId = item.orderChannelId }
- item.settleNum = item.settleNum || ""
- normList.push({ ...item, pfuqinid: pfuqinid, zijideid: 0, bianji: res.data.settleStatus == 'YJS' ? false : true })
- item.workerList.map((resdata, ind_) => {
- if(resdata.poolStatus === "NO"){ this.showbtn = true }
- if (ind_ !== 0) { normList.push({ pfuqinid: pfuqinid, zijideid: ind_ }) }
- if (ind_ == item.workerList.length - 1) { pfuqinid += (ind_ + 1) }
- })
- })
- var otherNormList = []
- var qtpfuqinid = 0
- res.data.otherNormList.map((item, index) => {
- item.settleNum = item.settleNum || ""
- otherNormList.push({ ...item, pfuqinid: qtpfuqinid, zijideid: 0, bianji: res.data.settleStatus == 'YJS' ? false : true })
- item.workerList.map((resdata, ind_) => {
- if(resdata.poolStatus === "NO"){ this.showbtn = true }
- if (ind_ !== 0) { otherNormList.push({ pfuqinid: qtpfuqinid, zijideid: ind_ }) }
- if (ind_ == item.workerList.length - 1) { qtpfuqinid += (ind_ + 1) }
- })
- })
- this.formData = res.data ? { ...res.data, normList, otherNormList } : {};
- // -------------------------------------------------------------------
- if (this.formData.orderType == "INSTALL") {
- // 安装单请求
- listPageV2({ "pageNum": 1, "pageSize": -1 }).then(res => {
- this.gonglv = res.data.records
- })
- } else if (this.formData.orderType == "REPAIR") {
- // 维修单请求
- listPageV2Repair({ "pageNum": 1, "pageSize": -1 }).then(res => {
- this.gonglr = res.data.records
- })
- }
- settleNormInstallQuery({
- settleNormType: this.formData.orderType,
- type: this.formData.orderSmallType
- }).then(res => {
- this.classifyList = res.data
- })
- settleNormOtherQuery().then(res => {
- this.otherList = res.data
- })
- })
- }
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .neibuview {
- box-sizing: border-box;
- padding-left: 16px;
- ::v-deep &>.zj-page-fill-scroll {
- box-sizing: border-box;
- padding-right: 16px;
- &>div:nth-child(1) {
- margin-top: 20px;
- }
- }
- }
- </style>
|