Browse Source

优化成本中心SOC 新加POL POD模板模块

Qukatie 11 months ago
parent
commit
8b42ece45b

+ 21 - 0
src/api/iosBasicData/losbfeestemplate.js

@@ -56,4 +56,25 @@ export const itemRemove = (row) => {
     method: 'post',
     params: row
   })
+}
+export const remove = (row) => {
+  return request({
+    url: '/api/blade-los/feestemplatesonitems/remove',
+    method: 'post',
+    params: row
+  })
+}
+export const getListTemplate = (data) => {
+  return request({
+    url: '/api/blade-los/losbfeestemplate/getListTemplate',
+    method: 'get',
+    params:data
+  })
+}
+export const getListTemplatelist = (data) => {
+  return request({
+    url: '/api/blade-los/feestemplatesonitems/list',
+    method: 'get',
+    params:data
+  })
 }

+ 3 - 0
src/enums/column-name.js

@@ -2016,6 +2016,9 @@ const columnName = [{
   },{
     code: 457,
     name: '博瑞科-设备管理-主表弹窗列表页'
+  },{
+    code: 458,
+    name: '永发-航线成本SOC-SOC二程明细'
   }
 ]
 export const getColumnName = (key) => {

+ 1 - 1
src/views/iosBasicData/costcenter/airlineProfit/index.vue

@@ -353,7 +353,7 @@ export default {
                         overHidden: true,
                     },
                     {
-                        label: "利润",
+                        label: "全程利润",
                         prop: "profit",
                         width: "120",
                         overHidden: true,

File diff suppressed because it is too large
+ 51 - 711
src/views/iosBasicData/costcenter/coc/detailsPage.vue


+ 5 - 17
src/views/iosBasicData/costcenter/coc/index.vue

@@ -5,8 +5,8 @@
                 v-model="form" id="out-table" :header-cell-class-name="headerClassName" ref="crud" @row-del="rowDel"
                 @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
                 @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
-                @resetColumn="resetColumn('crud', 'option', 'optionBack', 446)"
-                @saveColumn="saveColumn('crud', 'option', 'optionBack', 446)" @on-load="onLoad">
+                @resetColumn="resetColumn('crud', 'option', 'optionBack', 451)"
+                @saveColumn="saveColumn('crud', 'option', 'optionBack', 451)" @on-load="onLoad">
                 <template slot="sortSearch">
                     <el-radio-group v-model="query.sort">
                         <el-radio :label="0">按箱利润</el-radio>
@@ -236,30 +236,18 @@ export default {
                         valueFormat: "yyyy-MM-dd 23:59:59",
                     },
                     {
-                        label: "20利润",
+                        label: "利润20GP",
                         prop: "profit20",
                         width: "100",
                         overHidden: true,
                     },
                     {
-                        label: "40利润",
+                        label: "利润40GP",
                         prop: "profit40",
                         width: "100",
                         overHidden: true,
                     },
                     {
-                        label: "40HC利润",
-                        prop: "profitHc",
-                        width: "100",
-                        overHidden: true,
-                    },
-                    {
-                        label: "其他利润",
-                        prop: "otherProfit",
-                        width: "100",
-                        overHidden: true,
-                    },
-                    {
                         label: "状态",
                         prop: "status",
                         width: "100",
@@ -316,7 +304,7 @@ export default {
         detailsPage
     },
     async created() {
-        this.option = await this.getColumnData(this.getColumnName(446), this.optionBack);
+        this.option = await this.getColumnData(this.getColumnName(451), this.optionBack);
     },
     activated() {
         setTimeout(() => {

File diff suppressed because it is too large
+ 567 - 342
src/views/iosBasicData/costcenter/soc/detailsPage.vue


+ 563 - 231
src/views/iosBasicData/losbfeestemplate/feesTemplateItems.vue

@@ -9,7 +9,7 @@
                 </el-button>
             </div>
             <div class="add-customer-btn">
-                <el-button size="small" type="primary" style="margin-right: 8px" v-if="detailData.seeDisabled"
+                <el-button size="small" type="primary" style="margin-right: 8px" v-if="basicData.disabled"
                     :loading="saveLoading" @click="editHandle">编 辑
                 </el-button>
                 <el-button size="small" type="primary" style="margin-right: 8px" v-else :loading="saveLoading"
@@ -18,103 +18,82 @@
             </div>
         </div>
         <div class="customer-main">
-            <el-form :model="form" ref="form" label-width="100px" class="demo-ruleForm">
-                <containerTitle title="基础资料"></containerTitle>
-                <basic-container :showBtn="true">
-                    <el-row>
-                        <el-col v-for="(item, index) in basicData.column" :key="index" :span="item.span ? item.span : 8"
-                            :class="{ isShow: item.display }">
-                            <el-form-item :label="item.label" :prop="item.prop" :rules="item.rules">
-                                <el-select v-if="item.type == 'select'" v-model="form[item.prop]"
-                                    :placeholder="'请选择' + item.label" clearable filterable style="width: 100%"
-                                    size="small" :disabled="item.disabled || detailData.seeDisabled">
-                                    <el-option v-for="(ite, inde) in item.dicData" :key="inde" :label="ite.label"
-                                        :value="ite.value"></el-option>
-                                </el-select>
-                                <el-input type="textarea" v-else-if="item.type === 'textarea'"
-                                    v-model.trim="form[item.prop]" size="small" autocomplete="off"
-                                    :disabled="item.disabled || detailData.seeDisabled"
-                                    :placeholder="'请输入' + item.label"></el-input>
-                                <el-input v-else type="age" style="width: 100%;" v-model.trim="form[item.prop]"
-                                    size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"
-                                    clearable :placeholder="'请输入' + item.label"></el-input>
-                            </el-form-item>
-                        </el-col>
-                    </el-row>
-                </basic-container>
-            </el-form>
+            <containerTitle title="基础信息"></containerTitle>
+            <basic-container>
+                <avue-form :option="basicData" v-model="form" ref="form">
+                    <tempalte slot="shippingCompanyCname">
+                        <dic-select v-model="form.shippingCompanyCname" placeholder="船公司" key="id" label="cnName"
+                            res="records" url="/blade-los/bcorps/list?corpTypeName=船公司" :filterable="true"
+                            :remote="true" dataName="cnName" @selectChange="dicChange('shippingCompanyCname', $event)"
+                            :disabled="basicData.disabled"></dic-select>
+                    </tempalte>
+                    <tempalte slot="addressCname">
+                        <dic-select v-model="form.addressCname" placeholder="港口地址" key="id" label="cnName" res="records"
+                            url="/blade-los/bports/list" :filterable="true" :remote="true" dataName="cnName"
+                            @selectChange="dicChange('addressCname', $event)"
+                            :disabled="basicData.disabled"></dic-select>
+                    </tempalte>
+                </avue-form>
+            </basic-container>
         </div>
 
         <div class="customer-main margintop">
             <containerTitle title="费用详情"></containerTitle>
             <basic-container>
-                <div style="margin-bottom: 10px">
-                    <el-button type="primary" size="small" :disabled="detailData.seeDisabled"
-                        @click="feestemplatepingCompanyAdd">新增数据
-                    </el-button>
-                </div>
-                <el-table stripe border :row-style="{ height: '20px', padding: '0px', fontSize: '12px' }"
-                    :cell-style="{ padding: '0px', fontSize: '12px' }" :data="form.feesTemplateItemsList" id="out-table"
-                    :header-cell-style="tableHeaderCellStyle" style="width: 100%">
-                    <el-table-column prop="corpCnName" label="客户">
-                        <template slot-scope="{ row }">
-                            <span class="nowrapClass">{{ row.corpCnName }}</span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="corpType" label="客户类型">
-                        <template slot-scope="{ row }">
-                            <span class="nowrapClass">{{ row.corpType }}</span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="corpEnName" label="客户英文">
-                        <template slot-scope="{ row }">
-                            <span class="nowrapClass">{{ row.corpEnName }}</span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="feeCode" label="费用编码">
-                        <template slot-scope="{ row }">
-                            <span class="nowrapClass">{{ row.feeCode }}</span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="feeCnName" label="费用">
-                        <template slot-scope="{ row }">
-                            <span class="nowrapClass">{{ row.feeCnName }}</span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="feeEnName" label="费用英文">
-                        <template slot-scope="{ row }">
-                            <span class="nowrapClass">{{ row.feeEnName }}</span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="quantityRule" label="数量规则">
-                        <template slot-scope="{ row }">
-                            <span v-for="item of quantityRuleData" :key="item.dictKey"
-                                v-if="item.dictKey == row.quantityRule">
-                                {{ item.dictValue }}
-                            </span>
-                        </template>
-                    </el-table-column>
-                    <el-table-column prop="quantity" label="数量">
-                    </el-table-column>
-                    <el-table-column prop="price" label="单价">
-                    </el-table-column>
-                    <el-table-column prop="unitNo" label="计量单位">
-                    </el-table-column>
-                    <el-table-column prop="curCode" label="币别">
-                    </el-table-column>
-                    <el-table-column prop="remarks" label="备注">
-                    </el-table-column>
-                    <el-table-column label="操作" width="120">
-                        <template slot-scope="scope">
-                            <el-button type="text" size="small" :disabled="detailData.seeDisabled"
-                                @click="feestemplateCompanyEdit(scope.$index, scope.row)">编辑</el-button>
-                            <el-button size="small" type="text" :disabled="detailData.seeDisabled"
-                                @click="feestemplateCompanyDelete(scope.$index, scope.row)">删除</el-button>
-                            <el-button type="text" size="small" :disabled="detailData.seeDisabled"
-                                @click="copyItem(scope.$index, scope.row)">复制</el-button>
-                        </template>
-                    </el-table-column>
-                </el-table>
+                <avue-crud :option="option" :data="form.feesTemplateItemsList" id="out-table" ref="crud"
+                    :header-cell-class-name="headerClassName" :row-style="{ height: '20px', padding: '0px' }"
+                    :cell-style="{ height: '20px', padding: '0px' }">
+                    <template slot="indexHeader" slot-scope="{row,index}">
+                        <el-button type="primary" size="mini" icon="el-icon-plus" :disabled="basicData.disabled" circle
+                            @click="feestemplatepingCompanyAdd()">
+                        </el-button>
+                    </template>
+                    <template slot="index" slot-scope="{row,index}">
+                        <span>{{ index + 1 }}</span>
+                    </template>
+                    <template slot="corpCnNameForm" slot-scope="{ row }">
+                        <dic-select v-if="row.$cellEdit" v-model="row.corpCnName" key="id" label="cnName" res="records"
+                            url="/blade-los/bcorps/selectList?status=0&current=1&size=20" :filterable="true"
+                            :remote="true" dataName="cnName" :disabled="row.corpType"
+                            @selectChange="rowDicChange('corpCnName', $event, row)"></dic-select>
+                        <span v-else>{{ row.corpCnName }}</span>
+                    </template>
+                    <template slot="corpTypeForm" slot-scope="{row,index}">
+                        <dic-select v-if="row.$cellEdit" v-model="row.corpType" key="id" label="dictValue"
+                            :disabled="row.corpCnName" url="/blade-system/dict-biz/dictionary?code=corp_type"
+                            :filterable="true" @selectChange="rowDicChange('corpType', $event, row)"></dic-select>
+                        <span v-else>{{ row.corpType }}</span>
+                    </template>
+                    <template slot="feeCnNameForm" slot-scope="{ row }">
+                        <dic-select v-if="row.$cellEdit" v-model="row.feeCnName" key="id" placeholder="费用名称"
+                            label="cnName" res="records" url="/blade-los/bfees/list?status=0&current=1&size=20"
+                            :filterable="true" :remote="true" dataName="cnName"
+                            @selectChange="rowDicChange('feeCnName', $event, row)"></dic-select>
+                        <span v-else>{{ row.feeCnName }}</span>
+                    </template>
+                    <template slot="quantityRuleForm" slot-scope="{row,index}">
+                        <dic-select v-if="row.$cellEdit" v-model="row.quantityRule" key="id" label="dictValue"
+                            url="/blade-system/dict-biz/dictionary?code=number_rule" :filterable="true"></dic-select>
+                        <span v-else>{{ row.quantityRule }}</span>
+                    </template>
+                    <template slot="unitNoForm" slot-scope="{row,index}">
+                        <dic-select v-if="row.$cellEdit" v-model="row.unitNo" key="id" label="cnName"
+                            url="/blade-los//bunits/listAll" :filterable="true"
+                            @selectChange="rowDicChange('unitNo', $event, row)"></dic-select>
+                        <span v-else>{{ row.unitNo }}</span>
+                    </template>
+                    <template slot="menu" slot-scope="{ row, index }">
+                        <el-button type="text" size="small" :disabled="basicData.disabled"
+                            @click="feestemplateCompanyEdit(index, row)">详情</el-button>
+                        <el-button size="small" type="text" :disabled="basicData.disabled" @click="rowCell(row, index)">
+                            {{ row.$cellEdit ? '保存' : '编辑' }}
+                        </el-button>
+                        <el-button size="small" type="text" :disabled="basicData.disabled"
+                            @click="feestemplateCompanyDelete(index, row)">删除</el-button>
+                        <el-button type="text" size="small" :disabled="basicData.disabled"
+                            @click="copyItem(index, row)">复制</el-button>
+                    </template>
+                </avue-crud>
             </basic-container>
         </div>
 
@@ -123,83 +102,52 @@
         <el-dialog title="费用详情" :visible.sync="feestemplateVisible" width="60%" append-to-body :destroy-on-close="true"
             :modal-append-to-body="false" :close-on-click-modal="false" :before-close="feestemplateClose">
             <div>
-                <el-form :model="feestemplateForm" ref="feestemplateForm" label-width="100px" class="demo-ruleForm">
-                    <el-row>
-                        <el-col v-for="(item, index) in feestemplateData.column" :key="index"
-                            :span="item.span ? item.span : 12" :class="{ isShow: item.display }">
-                            <el-form-item :label="item.label" :prop="item.prop" :rules="item.rules">
-                                <div v-if="item.prop == 'corpType'">
-                                    <search-query ref="SearchQuery" :datalist="corpTypeData"
-                                        :selectValue="feestemplateForm[item.prop]" title="客户类型" :filterable="true"
-                                        :clearable="true" :buttonIf="false"
-                                        :forParameter="{ key: 'dictKey', label: 'dictValue', value: 'dictKey' }"
-                                        :disabled="feestemplateForm.corpCnName == '' || feestemplateForm.corpCnName == null || !feestemplateForm.corpCnName ? false : true"
-                                        @corpChange="corpTypeChange">
-                                    </search-query>
-                                </div>
-                                <div v-else-if="item.prop == 'corpCnName'">
-                                    <search-query ref="SearchCorp" :datalist="corpData"
-                                        :selectValue="feestemplateForm[item.prop]" title="客户" :filterable="true"
-                                        :clearable="true" :remote="true"
-                                        :forParameter="{ key: 'id', label: 'cnName', value: 'cnName' }"
-                                        :disabled="feestemplateForm.corpType == '' || feestemplateForm.corpType == null || !feestemplateForm.corpType ? false : true"
-                                        @remoteMethod="getBcorpsListfun" @corpChange="corpCorpChange"
-                                        @eldialogConfirm="eldialogConfirm(item.prop)">
-                                        <bcorps ref="bcorps" :eldialog="true"
-                                            @selectionChange="eldialogMultipleChoice($event, 'bcorps')"></bcorps>
-                                    </search-query>
-                                </div>
-                                <div v-else-if="item.prop == 'feeCnName'">
-                                    <search-query ref="SearchFee" :datalist="feeData"
-                                        :selectValue="feestemplateForm[item.prop]" title="费用" :filterable="true"
-                                        :clearable="true" :remote="true"
-                                        :forParameter="{ key: 'id', label: 'cnName', value: 'id' }"
-                                        @remoteMethod="bfeesListfun" @corpChange="feeCorpChange"
-                                        @eldialogConfirm="eldialogConfirm(item.prop)">
-                                        <bfeesdefine ref="bfeesdefine" :eldialog="true"
-                                            @selectionChange="eldialogMultipleChoice($event, 'feeCnName')">
-                                        </bfeesdefine>
-                                    </search-query>
-                                </div>
-                                <div v-else-if="item.prop == 'quantityRule'">
-                                    <search-query ref="SearchQuery" :datalist="quantityRuleData"
-                                        :selectValue="feestemplateForm[item.prop]" title="数量规则" :filterable="true"
-                                        :clearable="true" :buttonIf="false"
-                                        :forParameter="{ key: 'dictKey', label: 'dictValue', value: 'dictKey' }"
-                                        @corpChange="quantityRuleChange">
-                                    </search-query>
-                                </div>
-                                <div v-else-if="item.prop == 'curCode'">
-                                    <search-query ref="SearchQuery" :datalist="curCodeData"
-                                        :selectValue="feestemplateForm[item.prop]" title="币别" :buttonIf="false"
-                                        :filterable="true" :clearable="true" :remote="true"
-                                        :forParameter="{ key: 'id', label: 'code', value: 'code' }"
-                                        @remoteMethod="getRateListfun" @corpChange="curCodeCorpChange">
-                                        <bfeesdefine></bfeesdefine>
-                                    </search-query>
-                                </div>
-                                <div v-else-if="item.prop == 'unitNo'">
-                                    <search-query ref="SearchUnitNo" :datalist="unitNoData"
-                                        :selectValue="feestemplateForm[item.prop]" title="计量单位" :filterable="true"
-                                        :clearable="true" :remote="true"
-                                        :forParameter="{ key: 'id', label: 'code', value: 'code', disabled: 'status' }"
-                                        @remoteMethod="getBunitsListfun" @corpChange="unitNoCorpChange"
-                                        @eldialogConfirm="eldialogConfirm(item.prop)">
-                                        <bunits ref="bunits" :eldialog="true"
-                                            @selectionChange="eldialogMultipleChoice($event, 'bunits')"></bunits>
-                                    </search-query>
-                                </div>
-
-                                <el-input type="textarea" v-else-if="item.type === 'textarea'"
-                                    v-model.trim="feestemplateForm[item.prop]" size="small" autocomplete="off"
-                                    :disabled="item.disabled" :placeholder="'请输入' + item.label"></el-input>
-                                <el-input v-else type="age" style="width: 100%;"
-                                    v-model.trim="feestemplateForm[item.prop]" size="small" autocomplete="off"
-                                    :disabled="item.disabled" clearable :placeholder="'请输入' + item.label"></el-input>
-                            </el-form-item>
-                        </el-col>
-                    </el-row>
-                </el-form>
+                <avue-crud :option="sonOption" :data="feestemplateForm.sonItemsList">
+                    <template slot="indexHeader" slot-scope="{row,index}">
+                        <el-button type="primary" size="mini" icon="el-icon-plus" :disabled="basicData.disabled" circle
+                            @click="addRow()">
+                        </el-button>
+                    </template>
+                    <template slot="index" slot-scope="{row,index}">
+                        <span>{{ index + 1 }}</span>
+                    </template>
+                    <template slot="typeForm" slot-scope="{row,index}">
+                        <dic-select v-if="row.$cellEdit" v-model="row.type" key="id" label="dictValue"
+                            url="/blade-system/dict-biz/dictionary?code=corp_type" :filterable="true"></dic-select>
+                        <span v-else>{{ row.type }}</span>
+                    </template>
+                    <template slot="feeCnNameForm" slot-scope="{ row }">
+                        <dic-select v-if="row.$cellEdit" v-model="row.feeCnName" key="id" placeholder="箱型"
+                            label="cnName" res="records" url="/blade-los/bfees/list?status=0&current=1&size=20"
+                            :filterable="true" :remote="true" dataName="cnName"
+                            @selectChange="rowDicChange('feeCnName', $event, row)"></dic-select>
+                        <span v-else>{{ row.feeCnName }}</span>
+                    </template>
+                    <template slot="unitNoForm" slot-scope="{row,index}">
+                        <span>
+                            <dic-select
+                                v-if="row.$cellEdit && (feestemplateForm.quantityRule == '按箱型' || feestemplateForm.quantityRule == '按TEU')"
+                                v-model="row.unitNo" key="id" label="cnName" res="records"
+                                url="/blade-los/bcntrtypes/list?status=0&current=1&size=20" :filterable="true"
+                                :remote="true" dataName="cnName"
+                                @selectChange="rowDicChange('unitNo', $event, row)"></dic-select>
+                            <dic-select
+                                v-if="row.$cellEdit && !(feestemplateForm.quantityRule == '按箱型' || feestemplateForm.quantityRule == '按TEU')"
+                                v-model="row.unitNo" key="id" label="cnName" res="records"
+                                url="/blade-los/bunits/list?status=0&current=1&size=20" :filterable="true"
+                                :remote="true" dataName="cnName"
+                                @selectChange="rowDicChange('unitNo', $event, row)"></dic-select>
+                            <span v-if="!row.$cellEdit">{{ row.unitNo }}</span>
+                        </span>
+                    </template>
+                    <template slot="menu" slot-scope="{ row, index }">
+                        <el-button size="small" type="text" :disabled="basicData.disabled" @click="rowEdit(row, index)">
+                            {{ row.$cellEdit ? '保存' : '编辑' }}
+                        </el-button>
+                        <el-button type="text" size="small" :disabled="basicData.disabled"
+                            @click="rowDel(index, row)">删除</el-button>
+                    </template>
+                </avue-crud>
             </div>
             <span slot="footer" class="dialog-footer">
                 <el-button @click="feestemplateVisible = false;">取 消</el-button>
@@ -210,7 +158,7 @@
 </template>
 
 <script>
-import { losbfeestemplateDetail, losbfeestemplateSubmit, copytemplateDetail, itemRemove } from "@/api/iosBasicData/losbfeestemplate";
+import { losbfeestemplateDetail, losbfeestemplateSubmit, copytemplateDetail, itemRemove, remove } from "@/api/iosBasicData/losbfeestemplate";
 import { bfeesList } from "@/api/iosBasicData/bfees";
 import { getBcorpsList } from "@/api/iosBasicData/bcorps";
 import { getRateList } from "@/api/iosBasicData/rateManagement";
@@ -222,9 +170,9 @@ import bbusinesstype from "@/views/iosBasicData/bbusinesstype/index.vue";
 import bunits from "@/views/iosBasicData/bunits/index.vue";
 import { getWorkDicts } from "@/api/system/dictbiz";
 import { bcntrtypesList } from "@/api/iosBasicData/bcntrtypes";
-
+import dicSelect from "@/components/dicSelect/main";
 export default {
-    components: { SearchQuery, bcorps, bfeesdefine, bbusinesstype, bunits },
+    components: { SearchQuery, bcorps, bfeesdefine, bbusinesstype, bunits, dicSelect },
     props: {
         detailData: {
             type: Object
@@ -233,12 +181,91 @@ export default {
 
     data() {
         return {
+            sonOption: {
+                calcHeight: 30,
+                // tip: false,
+                border: true,
+                // addBtn: false,
+                // viewBtn: false,
+                editBtn: false,
+                delBtn: false,
+                // refreshBtn: false,
+                // selection: true,
+                header: false,
+                align: 'center',
+                menu: true,
+                menuWidth: 100,
+                column: [
+                    {
+                        label: "index",
+                        prop: "index",
+                        width: "55",
+                        headerslot: true,
+                    },
+                    {
+                        label: '类别',
+                        prop: 'type',
+                        overHidden: true,
+                        cell: true,
+                        slot: true,
+                        formslot: true,
+                    },
+                    {
+                        label: '费用名称',
+                        prop: 'feeCnName',
+                        overHidden: true,
+                        cell: true,
+                        slot: true,
+                        formslot: true,
+                    },
+                    {
+                        label: '币种',
+                        prop: 'curCode',
+                        overHidden: true,
+                        cell: true,
+                        type: 'select',
+                        dicData: [{
+                            label: 'CNY',
+                            value: 'CNY'
+                        }, {
+                            label: 'USD',
+                            value: 'USD'
+                        }],
+                    },
+                    {
+                        label: '计量单位',
+                        prop: 'unitNo',
+                        overHidden: true,
+                        cell: true,
+                        slot: true,
+                        formslot: true,
+                    },
+                    {
+                        label: '销售价',
+                        prop: 'salesPrice',
+                        cell: true,
+                        type: 'number',
+                        controls: false,
+                        overHidden: true,
+                    },
+                    {
+                        label: '成本价',
+                        prop: 'costPrice',
+                        cell: true,
+                        type: 'number',
+                        controls: false,
+                        overHidden: true,
+                    }
+                ]
+            },
             pageLoading: false,
             saveLoading: false,
             // 费用详细弹窗
             feestemplateVisible: false,
             // 费用详细弹窗绑定的数据
-            feestemplateForm: {},
+            feestemplateForm: {
+                sonItemsList: []
+            },
             feestemplateIndex: null,
             // 客户请求数据
             corpData: [],
@@ -261,39 +288,15 @@ export default {
             },
             // 基础资料数据
             basicData: {
+                menuBtn: false,
+                span: 8,
+                disabled: false,
+                labelWidth: 100,
                 column: [
-                    // {
-                    //     label: "业务类型",
-                    //     prop: "businessTypeId",
-                    //     rules: [{
-                    //         required: true,
-                    //         message: "",
-                    //         trigger: "blur"
-                    //     }]
-                    // },
-                    // {
-                    //     label: "业务类型",
-                    //     prop: "businessTypeCnName",
-                    //     rules: [{
-                    //         required: true,
-                    //         message: "",
-                    //         trigger: "blur"
-                    //     }]
-                    // },
-                    // {
-                    //     label: "业务类型英文",
-                    //     prop: "businessTypeEnName",
-                    //     disabled:true,
-                    //     rules: [{
-                    //         required: true,
-                    //         message: "请输入业务类型英文名称",
-                    //         trigger: "blur"
-                    //     }]
-                    // },
                     {
                         label: "模版编号",
                         prop: "code",
-                        search: true,
+                        disabled: false,
                         rules: [{
                             required: true,
                             message: "请输入模版编号",
@@ -303,6 +306,7 @@ export default {
                     {
                         label: "模版中文名称",
                         prop: "cnName",
+                        disabled: false,
                         rules: [{
                             required: true,
                             message: "请输入模版中文名称",
@@ -312,6 +316,7 @@ export default {
                     {
                         label: "模版英文名称",
                         prop: "enName",
+                        disabled: false,
                         rules: [{
                             required: true,
                             message: "请输入模版英文名称",
@@ -322,6 +327,7 @@ export default {
                         label: "收付",
                         prop: "dc",
                         type: 'select',
+                        disabled: false,
                         dicData: [{
                             label: '收',
                             value: 'D'
@@ -336,9 +342,34 @@ export default {
                         }]
                     },
                     {
+                        label: "船公司",
+                        prop: "shippingCompanyCname",
+                        disabled: false,
+                    },
+                    {
+                        label: "港口地址",
+                        prop: "addressCname",
+                        disabled: false,
+                    },
+                    {
+                        label: "运输条款",
+                        prop: "transportationTerms",
+                        disabled: false,
+                        type: 'select',
+                        filterable: true,
+                        remote: true,
+                        dicUrl: "/api/blade-los/bserviceterms/list?status=0&current=1&size=20&cnName={{key}}",
+                        props: {
+                            label: 'cnName',
+                            value: 'cnName',
+                            res: 'data.records'
+                        },
+                    },
+                    {
                         label: "是否公开共享",
                         prop: "isShared",
                         width: 100,
+                        disabled: false,
                         type: 'select',
                         dicData: [{
                             label: '否',
@@ -351,6 +382,7 @@ export default {
                     {
                         label: "状态",
                         prop: "status",
+                        disabled: false,
                         type: 'select',
                         dicData: [{
                             label: '启用',
@@ -363,6 +395,7 @@ export default {
                     {
                         label: "备注",
                         prop: "remarks",
+                        disabled: false,
                         span: 24,
                         type: 'textarea',
                         minRows: 3,
@@ -370,6 +403,158 @@ export default {
 
                 ]
             },
+            option: {
+                // height: 'auto',
+                calcHeight: 30,
+                menuWidth: 160,
+                border: true,
+                header: false,
+                editBtn: false,
+                delBtn: false,
+                align: 'center',
+                menu: true,
+                column: [
+                    {
+                        label: "index",
+                        prop: "index",
+                        width: "55",
+                        headerslot: true,
+                    },
+                    {
+                        label: "客户",
+                        prop: "corpCnName",
+                        width: "120",
+                        overHidden: true,
+                        cell: true,
+                        slot: true,
+                        formslot: true,
+                    },
+                    {
+                        label: "客户类型",
+                        prop: "corpType",
+                        width: "120",
+                        overHidden: true,
+                        cell: true,
+                        slot: true,
+                        formslot: true,
+                    },
+                    {
+                        label: "客户英文",
+                        prop: "corpEnName",
+                        width: "80",
+                        overHidden: true,
+                    },
+                    {
+                        label: "费用名称",
+                        prop: "feeCnName",
+                        width: "120",
+                        overHidden: true,
+                        cell: true,
+                        slot: true,
+                        formslot: true,
+                        rules: [{
+                            required: true,
+                            message: "请选择费用名称",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "费用编码",
+                        prop: "feeCode",
+                        width: "80",
+                        overHidden: true,
+                    },
+                    {
+                        label: "费用英文",
+                        prop: "feeEnName",
+                        width: "80",
+                        overHidden: true,
+                    },
+                    {
+                        label: "数量规则",
+                        prop: "quantityRule",
+                        width: "120",
+                        overHidden: true,
+                        cell: true,
+                        slot: true,
+                        formslot: true,
+                        rules: [{
+                            required: true,
+                            message: "请选择数量规则",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "数量",
+                        prop: "quantity",
+                        width: "80",
+                        cell: true,
+                        type: 'number',
+                        controls: false,
+                        overHidden: true,
+                        rules: [{
+                            required: true,
+                            message: "请输入数量",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "单价",
+                        prop: "price",
+                        width: "80",
+                        cell: true,
+                        type: 'number',
+                        controls: false,
+                        overHidden: true,
+                        rules: [{
+                            required: true,
+                            message: "请输入单价",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "计量单位",
+                        prop: "unitNo",
+                        width: "120",
+                        overHidden: true,
+                        cell: true,
+                        slot: true,
+                        formslot: true,
+                        rules: [{
+                            required: true,
+                            message: "请选择计量单位",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "币别",
+                        prop: "curCode",
+                        width: "100",
+                        cell: true,
+                        type: 'select',
+                        dicData: [{
+                            label: 'CNY',
+                            value: 'CNY'
+                        }, {
+                            label: 'USD',
+                            value: 'USD'
+                        }],
+                        overHidden: true,
+                        rules: [{
+                            required: true,
+                            message: "请选择币别",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "备注",
+                        prop: "remarks",
+                        width: "120",
+                        cell: true,
+                        overHidden: true,
+                    }
+                ]
+            },
             // 费用详细数据
             feestemplateData: {
                 column: [
@@ -476,14 +661,117 @@ export default {
         }
     },
     created() {
+        if (this.detailData.businessTypeId) {
+            this.form = {
+                businessTypeId: this.detailData.businessTypeId,
+                businessTypeCnName: this.detailData.businessTypeCnName,
+                businessTypeEnName: this.detailData.businessTypeEnName,
+                businessTypeCode: this.detailData.businessTypeCode
+            }
+        }
         this.getBcorpsListfun()
         this.bfeesListfun()
         this.quantityRuleWorkDictsfun()
         this.getRateListfun()
         this.getBunitsListfun()
         this.getcorpTypeData()
+        if (this.detailData.id) {
+            this.basicData.disabled = true
+            this.losbfeestemplateDetailfun(this.detailData.id)
+        }
     },
     methods: {
+        rowCell(row, index) {
+            if (!row.feeCnName || !row.quantityRule || !row.quantity || !row.price || !row.unitNo || !row.curCode) {
+                this.$refs.crud.rowCell(row, index)
+                return this.$message.error("请完善明细信息");
+            }
+            if (row.$cellEdit == true) {
+                this.$set(row, "$cellEdit", false);
+            } else {
+                this.$set(row, "$cellEdit", true);
+            }
+        },
+        rowEdit(row) {
+            if (row.$cellEdit == true) {
+                this.$set(row, "$cellEdit", false);
+            } else {
+                this.$set(row, "$cellEdit", true);
+            }
+        },
+        rowDicChange(name, row, el) {
+            if (name == 'corpCnName') {
+                if (row) {
+                    el.corpId = row.id
+                    el.corpEnName = row.enName
+                } else {
+                    el.corpId = null
+                    el.corpEnName = null
+                    el.corpCnName = null
+                }
+            }
+            if (name == 'feeCnName') {
+                if (row) {
+                    el.feeId = row.id
+                    el.feeCode = row.code
+                    el.feeEnName = row.enName
+                } else {
+                    el.feeId = null
+                    el.feeCode = null
+                    el.feeCnName = null
+                    el.feeEnName = null
+                }
+            }
+            if (name == 'unitNo') {
+                if (row) {
+                    el.unitId = row.id
+                } else {
+                    el.unitId = null
+                    el.unitNo = null
+                }
+            }
+            if (name == 'corpType') {
+                if (!row) {
+                    el.corpType = null
+                }
+            }
+        },
+        dicChange(name, row) {
+            if (name == 'shippingCompanyCname') {
+                if (row) {
+                    this.form.shippingCompanyId = row.id
+                    this.form.shippingCompanyCode = row.code
+                } else {
+                    this.form.shippingCompanyId = null
+                    this.form.shippingCompanyCode = null
+                    this.form.shippingCompanyCname = null
+                }
+            }
+            if (name == 'addressCname') {
+                if (row) {
+                    this.form.addressId = row.id
+                    this.form.addressCode = row.code
+                } else {
+                    this.form.podId = null
+                    this.form.addressCode = null
+                    this.form.addressCname = null
+                }
+            }
+        },
+        addRow() {
+            this.feestemplateForm.sonItemsList.push({
+                pid: this.form.id,
+                type: this.feestemplateForm.corpType,
+                feeId: this.feestemplateForm.feeId,
+                feeCode: this.feestemplateForm.feeCode,
+                feeCnName: this.feestemplateForm.feeCnName,
+                feeEnName: this.feestemplateForm.feeEnName,
+                curCode: this.feestemplateForm.curCode,
+                salesPrice: 0,
+                costPrice: 0,
+                $cellEdit: true
+            })
+        },
         copyItem(index, row) {
             let item = this.deepClone(row)
             item.id = null;
@@ -672,11 +960,12 @@ export default {
         },
         // 编辑按钮更改状态
         editHandle() {
-            this.detailData.seeDisabled = false;
+            this.basicData.disabled = false;
         },
         // 保存按钮
         editCustomer() {
-            this.$refs.form.validate((valid) => {
+            this.$refs["form"].validate((valid, done) => {
+                done();
                 if (valid) {
                     this.losbfeestemplateSubmitfun()
                 } else {
@@ -693,7 +982,7 @@ export default {
                     message: "操作成功!"
                 });
                 this.losbfeestemplateDetailfun(res.data.data.id)
-                this.detailData.seeDisabled = true;
+                // this.basicData.disabled = true;
             }).finally(() => {
                 this.saveLoading = false;
             })
@@ -701,16 +990,37 @@ export default {
 
         // 费用详细添加
         feestemplatepingCompanyAdd() {
-            this.feestemplateForm = {
+            if (!this.form.id) {
+                this.$message({
+                    type: "error",
+                    message: "请保存数据!"
+                });
+                return
+            }
+            this.form.feesTemplateItemsList.push({
                 quantity: 1,
                 price: 1,
+                quantityRule: '按箱型',
                 curCode: 'CNY',
-                unitNo: 'KGS'
-            }
-            this.feestemplateVisible = true
+                unitNo: '20GP',
+                sonItemsList: [],
+                $cellEdit: true
+            })
+            // this.feestemplateForm = {
+            //     quantity: 1,
+            //     price: 1,
+            //     curCode: 'CNY',
+            //     unitNo: 'KGS',
+            //     sonItemsList: []
+            // }
+            // this.feestemplateVisible = true
         },
         // 费用详细编辑
         feestemplateCompanyEdit(index, row) {
+            if (!row.feeCnName || !row.quantityRule || !row.quantity || !row.price || !row.unitNo || !row.curCode) {
+                this.$refs.crud.rowCell(row, index)
+                return this.$message.error("请完善明细信息");
+            }
             this.feestemplateForm = JSON.parse(JSON.stringify(row))
             this.feestemplateIndex = index
             this.feestemplateVisible = true
@@ -734,30 +1044,52 @@ export default {
             }
 
         },
-        // 费用详细确认
-        feestemplatecompanyConfirm() {
-            if (!this.feestemplateForm.corpCnName && !this.feestemplateForm.corpType) {
+        // 费用详细删除
+        rowDel(index, row) {
+            if (row.id) {
+                remove({ ids: row.id }).then(res => {
+                    this.$message({
+                        type: "success",
+                        message: "删除成功!"
+                    });
+                    this.feestemplateForm.sonItemsList.splice(index, 1)
+                })
+            } else {
                 this.$message({
-                    type: "error",
-                    message: "客户和客户类型必须填一项!"
+                    type: "success",
+                    message: "删除成功!"
                 });
-                return
+                this.feestemplateForm.sonItemsList.splice(index, 1)
             }
-            this.$refs.feestemplateForm.validate((valid) => {
-                if (valid) {
-                    if (this.feestemplateIndex != null) {
-                        this.form.feesTemplateItemsList.splice(this.feestemplateIndex, 1, this.feestemplateForm)
-                    } else {
-                        if (!this.form.feesTemplateItemsList) {
-                            this.form.feesTemplateItemsList = []
-                        }
-                        this.form.feesTemplateItemsList.push(this.feestemplateForm)
-                    }
-                    this.feestemplateForm = {}
-                    this.feestemplateIndex = null
-                    this.feestemplateVisible = false
-                }
-            })
+
+        },
+        // 费用详细确认
+        feestemplatecompanyConfirm() {
+            // if (!this.feestemplateForm.corpCnName && !this.feestemplateForm.corpType) {
+            //     c
+            //     return
+            // }
+            // this.$refs.feestemplateForm.validate((valid) => {
+            //     if (valid) {
+            //         if (this.feestemplateIndex != null) {
+            //             this.form.feesTemplateItemsList.splice(this.feestemplateIndex, 1, this.feestemplateForm)
+            //         } else {
+            //             if (!this.form.feesTemplateItemsList) {
+            //                 this.form.feesTemplateItemsList = []
+            //             }
+            //             this.form.feesTemplateItemsList.push(this.feestemplateForm)
+            //         }
+            //         this.feestemplateForm = {}
+            //         this.feestemplateIndex = null
+            //         this.feestemplateVisible = false
+            //     }
+            // })
+            if (this.feestemplateIndex != null) {
+                this.form.feesTemplateItemsList.splice(this.feestemplateIndex, 1, this.feestemplateForm)
+            }
+            this.feestemplateForm = {}
+            this.feestemplateIndex = null
+            this.feestemplateVisible = false
         },
         // 费用详细关闭
         feestemplateClose(done) {

+ 64 - 61
src/views/iosBasicData/losbfeestemplate/index.vue

@@ -35,7 +35,8 @@
               <el-button type="warning" size="small" icon="el-icon-printer" @click="excelBox = true">导 入
               </el-button>
               <el-button type="success" size="small" @click="handleExport" icon="el-icon-printer">导 出</el-button>
-              <el-button type="info" size="small" icon="el-icon-plus"  @click="copyTemplate" :disabled="selectionList.length!=1">复 制</el-button>
+              <el-button type="info" size="small" icon="el-icon-plus" @click="copyTemplate"
+                :disabled="selectionList.length != 1">复 制</el-button>
             </template>
             <template slot-scope="scope" slot="menu">
               <el-button :type="scope.type" :size="scope.size" icon="el-icon-edit"
@@ -44,14 +45,14 @@
               <el-button :type="scope.type" :size="scope.size" icon="el-icon-delete"
                 @click.stop="rowDel(scope.row, scope.index)">删除
               </el-button>
-                <el-button v-if="scope.row.status == 1" type="text" icon="el-icon-turn-off" style="color: #85e967" size="small"
-                           @click.stop="statusfun(scope.row.id,0)">
-                    启用
-                </el-button>
-                <el-button v-if="scope.row.status == 0" type="text" icon="el-icon-turn-off" style="color: #e83c3a" size="small"
-                           @click.stop="statusfun(scope.row.id,1)">
-                    停用
-                </el-button>
+              <el-button v-if="scope.row.status == 1" type="text" icon="el-icon-turn-off" style="color: #85e967"
+                size="small" @click.stop="statusfun(scope.row.id, 0)">
+                启用
+              </el-button>
+              <el-button v-if="scope.row.status == 0" type="text" icon="el-icon-turn-off" style="color: #e83c3a"
+                size="small" @click.stop="statusfun(scope.row.id, 1)">
+                停用
+              </el-button>
             </template>
             <template slot="remarks" slot-scope="scope">
               <avue-text-ellipsis :text="scope.row.remarks" :height="30" use-tooltip placement="top">
@@ -184,7 +185,7 @@ export default {
         viewBtn: false,
         selection: true,
         dialogClickModal: false,
-          menuWidth:220,
+        menuWidth: 220,
         column: [
           // {
           //   label: "业务类型 Id",
@@ -206,7 +207,7 @@ export default {
               message: "请输入编码",
               trigger: "blur"
             }],
-            overHidden:true
+            overHidden: true
           },
           {
             label: "中文名称",
@@ -219,7 +220,7 @@ export default {
               message: "请输入中文名称",
               trigger: "blur"
             }],
-            overHidden:true
+            overHidden: true
           },
           {
             label: "英文名称",
@@ -232,7 +233,7 @@ export default {
               message: "请输入英文名称",
               trigger: "blur"
             }],
-              overHidden:true
+            overHidden: true
           },
           {
             label: "业务类型中文名称",
@@ -243,7 +244,7 @@ export default {
               message: "请输入业务类型中文名称",
               trigger: "blur"
             }],
-              overHidden:true
+            overHidden: true
           },
           {
             label: "业务类型英文名称",
@@ -254,7 +255,7 @@ export default {
               message: "请输入业务类型英文名称",
               trigger: "blur"
             }],
-              overHidden:true
+            overHidden: true
           },
           {
             label: "收付",
@@ -272,7 +273,7 @@ export default {
               message: "请输入收付",
               trigger: "blur"
             }],
-              overHidden:true
+            overHidden: true
           },
           {
             label: "是否公开共享",
@@ -291,14 +292,14 @@ export default {
               message: "请输入是否公开共享",
               trigger: "blur"
             }],
-              overHidden:true
+            overHidden: true
           },
           {
             label: "版本",
             prop: "version",
             hide: true,
             display: false,
-              overHidden:true
+            overHidden: true
           },
           {
             label: "备注",
@@ -308,7 +309,7 @@ export default {
             width: "180",
             slot: true,
             minRows: 3,
-              overHidden:true
+            overHidden: true
           },
           {
             label: "状态",
@@ -327,46 +328,46 @@ export default {
               message: "请输入状态",
               trigger: "blur"
             }],
-              overHidden:true
+            overHidden: true
           },
           {
             label: "是否已删除(0 否 1是)",
             prop: "isDeleted",
             hide: true,
             display: false,
-              overHidden:true
+            overHidden: true
           },
           {
             label: "创建人",
             prop: "createUserName",
             display: false,
-              overHidden:true
+            overHidden: true
           },
           {
             label: "创建部门",
             prop: "createDeptName",
             display: false,
-              overHidden:true
+            overHidden: true
           },
           {
             label: "创建时间",
             prop: "createTime",
             width: 160,
             display: false,
-              overHidden:true
+            overHidden: true
           },
           {
             label: "修改人",
             prop: "updateUserName",
             display: false,
-              overHidden:true
+            overHidden: true
           },
           {
             label: "修改时间",
             prop: "updateTime",
             width: 160,
             display: false,
-              overHidden:true
+            overHidden: true
           },
 
         ]
@@ -397,26 +398,26 @@ export default {
     this.bbusinesstypeListfun()
   },
   methods: {
-      // 禁用启用按钮
-      statusfun(id,status){
-          this.$confirm("确定将选择数据更改状态?", {
-              confirmButtonText: "确定",
-              cancelButtonText: "取消",
-              type: "warning"
-          }).then(()=>{
-              losbfeestemplateDetail(id).then(res=>{
-                  let obj = res.data.data;
-                  obj.status = status
-                  losbfeestemplateSubmit(obj).then(()=>{
-                      this.onLoad(this.page);
-                      this.$message({
-                          type: "success",
-                          message: "操作成功!"
-                      });
-                  })
-              })
+    // 禁用启用按钮
+    statusfun(id, status) {
+      this.$confirm("确定将选择数据更改状态?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        losbfeestemplateDetail(id).then(res => {
+          let obj = res.data.data;
+          obj.status = status
+          losbfeestemplateSubmit(obj).then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
           })
-      },
+        })
+      })
+    },
     // 导出
     handleExport() {
       var condition = ''
@@ -464,14 +465,14 @@ export default {
     },
     // 获取左侧业务类别数据
     bbusinesstypeListfun() {
-      bbusinesstypeList(1,100,{enableFee:'1'}).then(res => {
+      bbusinesstypeList(1, 100, { enableFee: '1' }).then(res => {
         this.feesTypeData = res.data.data.records
       })
     },
     // 详情的返回列表
     goBack() {
       // 初始化数据
-      // this.detailData = this.$options.data().detailData;
+      this.detailData = this.$options.data().detailData;
       if (JSON.stringify(this.$route.query) != "{}") {
         this.$router.$avueRouter.closeTag();
         this.$router.push({
@@ -504,18 +505,19 @@ export default {
       this.detailData.seeDisabled = false
       this.isShow = false
       this.$nextTick(() => {
-        this.$refs.feesTemplateItems.form.businessTypeId = this.detailData.businessTypeId
-        this.$refs.feesTemplateItems.form.businessTypeCnName = this.detailData.businessTypeCnName
-        this.$refs.feesTemplateItems.form.businessTypeEnName = this.detailData.businessTypeEnName
-          this.$refs.feesTemplateItems.form.businessTypeCode = this.detailData.businessTypeCode
+
+        // this.$refs.feesTemplateItems.form.businessTypeId = this.detailData.businessTypeId
+        // this.$refs.feesTemplateItems.form.businessTypeCnName = this.detailData.businessTypeCnName
+        // this.$refs.feesTemplateItems.form.businessTypeEnName = this.detailData.businessTypeEnName
+        // this.$refs.feesTemplateItems.form.businessTypeCode = this.detailData.businessTypeCode
       })
     },
-    copyTemplate(){
-      let copyId=null
-      this.selectionList.forEach(e=>{
-        copyId=e.id
+    copyTemplate() {
+      let copyId = null
+      this.selectionList.forEach(e => {
+        copyId = e.id
       })
-      this.isShow=false
+      this.isShow = false
       this.$nextTick(() => {
         this.$refs.feesTemplateItems.getCopyTemplate(copyId)
       })
@@ -527,9 +529,9 @@ export default {
         id: row.id
       };
       this.isShow = false
-      this.$nextTick(() => {
-        this.$refs.feesTemplateItems.losbfeestemplateDetailfun(row.id)
-      })
+      // this.$nextTick(() => {
+      //   this.$refs.feesTemplateItems.losbfeestemplateDetailfun(row.id)
+      // })
     },
 
 
@@ -658,7 +660,7 @@ export default {
     },
     // 类别弹窗关闭
     corpTypeClose(done) {
-        done();
+      done();
       // this.$confirm('确认关闭?')
       //   .then(_ => {
       //     done();
@@ -718,7 +720,8 @@ export default {
 ::v-deep .el-input-group__append {
   padding: 0 0px !important;
 }
+
 ::v-deep .el-dialog__body {
-    padding: 0 20px 10px 20px !important;
+  padding: 0 20px 10px 20px !important;
 }
 </style>

Some files were not shown because too many files changed in this diff