Pārlūkot izejas kodu

Merge branch 'newPageStyle' into feature/批量弹窗页面优化

pengyh 1 gadu atpakaļ
vecāks
revīzija
e3287e1b86
26 mainītis faili ar 3516 papildinājumiem un 709 dzēšanām
  1. 86 0
      src/api/orderSettleManag.js
  2. 25 0
      src/api/workOrderPool.js
  3. 2 2
      src/styles/index.scss
  4. 1 1
      src/views/auxiliaryFittings/purchasingManagement/mixins/form_tpl.js
  5. 141 123
      src/views/setting/departmentManage/index.vue
  6. 1 1
      src/views/setting/notification/announcement/index.vue
  7. 41 105
      src/views/valueAddedService/orderBranchAccount/index.vue
  8. 73 0
      src/views/valueAddedService/orderBranchAccount/pages/collect.vue
  9. 88 0
      src/views/valueAddedService/orderBranchAccount/pages/offline.vue
  10. 56 0
      src/views/valueAddedService/orderMasterSplitAccount/index.vue
  11. 73 0
      src/views/valueAddedService/orderMasterSplitAccount/pages/collect.vue
  12. 88 0
      src/views/valueAddedService/orderMasterSplitAccount/pages/offline.vue
  13. 25 456
      src/views/valueAddedService/orderSettleManag/index.vue
  14. 292 0
      src/views/valueAddedService/orderSettleManag/mixins/basicInfo.js
  15. 44 0
      src/views/valueAddedService/orderSettleManag/mixins/examineInfo.js
  16. 223 0
      src/views/valueAddedService/orderSettleManag/mixins/formItems.js
  17. 151 0
      src/views/valueAddedService/orderSettleManag/mixins/productInfo.js
  18. 238 0
      src/views/valueAddedService/orderSettleManag/mixins/serviceInfo.js
  19. 264 0
      src/views/valueAddedService/orderSettleManag/pages/collect.vue
  20. 388 0
      src/views/valueAddedService/orderSettleManag/pages/offline.vue
  21. 2 0
      src/views/valueAddedService/valueAddedConfig/index.vue
  22. 1162 0
      src/views/workOrder/completedToBeSettled/index.vue
  23. 1 3
      src/views/workOrder/workOrderPool/detailModule/SettleAccounts/index.vue
  24. 2 2
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/index.vue
  25. 18 2
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/basicInfo.js
  26. 31 14
      src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/dispatchInfo.js

+ 86 - 0
src/api/orderSettleManag.js

@@ -1,5 +1,91 @@
 import request, { postBlob, getBlob, handleImport } from '@/utils/request'
 
+export function increOrderSettleGetBrand(params) {
+  return request({
+    url: '/incre/order/settle/getBrand',
+    method: 'post',
+    params
+  })
+}
+
+export function increOrderSettleGetCategoryList(params) {
+  return request({
+    url: '/incre/order/settle/getCategoryList',
+    method: 'post',
+    params
+  })
+}
+
+export function increOrderSettleGetIncreItem(params) {
+  return request({
+    url: '/incre/order/settle/getIncreItem',
+    method: 'post',
+    params
+  })
+}
+
+export function increOrderSettleGetWebsit(params) {
+  return request({
+    url: '/incre/order/settle/getWebsit',
+    method: 'post',
+    params
+  })
+}
+export function increOrderSettleGeneratePayCode(params) {
+  return request({
+    url: '/incre/order/settle/generate/pay/code',
+    method: 'post',
+    params
+  })
+}
+
+// ----------------
+
+export function increOrderSettleExamine(data) {
+  return request({
+    url: `/incre/order/settle/examine`,
+    method: 'post',
+    data
+  })
+}
+export function increOrderSettleAdd(data) {
+  return request({
+    url: `/incre/order/settle/add`,
+    method: 'post',
+    data
+  })
+}
+export function increOrderSettleList2(data) {
+  return request({
+    url: `/incre/order/settle/list2?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+export function increOrderSettleCountWorkerList(data) {
+  return request({
+    url: `/incre/order/settle/count/worker/list?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+export function increOrderSettleListExport2(data, name) {
+  return postBlob({
+    url: '/incre/order/settle/list/export2',
+    data,
+    name
+  })
+}
+export function increOrderSettleCountWorkerListExport(data, name) {
+  return postBlob({
+    url: '/incre/order/settle/count/worker/list/export',
+    data,
+    name
+  })
+}
+
 export function increOrderSettleList(data) {
   return request({
     url: `/incre/order/settle/list?moduleId=${data.moduleId}`,

+ 25 - 0
src/api/workOrderPool.js

@@ -148,6 +148,14 @@ export function orderBaseList(data) {
   })
 }
 
+export function orderBaseList2(data) {
+  return request({
+    url: `/order/base/list2?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
 export function orderBaseListExport(data, name) {
   return postBlob({
     url: '/order/base/list/export',
@@ -164,6 +172,14 @@ export function orderBaseStatusCount(params) {
   })
 }
 
+export function orderBaseStatusCount2(params) {
+  return request({
+    url: `/order/base/status/count2`,
+    method: 'post',
+    params
+  })
+}
+
 export function orderBaseLogList(params) {
   return request({
     url: `/order/base/log/list`,
@@ -211,3 +227,12 @@ export function orderBaseReject(params) {
     params
   })
 }
+
+export function orderBaseSettleNormDetail2(params) {
+  return request({
+    url: `/order/base/settle/norm/detail2`,
+    method: 'post',
+    params
+  })
+}
+

+ 2 - 2
src/styles/index.scss

@@ -162,8 +162,8 @@ div:focus {
 
 // 主要内容区域样式
 .mymain-container {
-  margin-top: 15px;
-  margin-bottom: 20px;
+  // margin-top: 15px;
+  // margin-bottom: 20px;
   .btn-group {
     .text {
       font-size: 16px;

+ 1 - 1
src/views/auxiliaryFittings/purchasingManagement/mixins/form_tpl.js

@@ -721,7 +721,7 @@ export default {
                 </el-descriptions>
                 <el-descriptions border title="" column={4} colon={false} labelStyle={{ width: '8%' }} contentStyle={{ width: '17%' }} style="margin-top:-1px">
                   <el-descriptions-item label="附件">
-                    <ImageUpload fileList={this.formData.imageUrl} uid="imgSrc666_materials_drawing_images" limit={1} isEdit={this.formDialogType < 2} />
+                    <ImageUpload fileList={this.formData.imageUrl} uid="imgSrc666_materials_drawing_images" limit={1} isEdit={this.formDialogType < 2} fileType={["image"]} />
                   </el-descriptions-item>
                   <el-descriptions-item label="备注" contentStyle={{ width: '67%' }}>
                     <el-input

+ 141 - 123
src/views/setting/departmentManage/index.vue

@@ -1,107 +1,109 @@
 <template>
-  <div class="app-container">
-    <div class="mymain-container">
-      <div>
-        <el-select v-model="value1" multiple placeholder="显示层级">
-          <el-option v-for="item in types" :key="item.value" :label="item.label" :value="item.value">
-          </el-option>
-        </el-select>
-        <span style="display: inline-block; width: 220px; margin-left: 10px"><el-input v-model="input"
-            placeholder="模糊搜索"></el-input></span>
-      </div>
+  <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: '列表页面', essential: true }]">
+    <template slot-scope="{activeKey, data}">
+      <div class="app-container">
+        <div v-if="activeKey == 'list'" class="mymain-container">
+          <div>
+            <el-select v-model="value1" multiple placeholder="显示层级">
+              <el-option v-for="item in types" :key="item.value" :label="item.label" :value="item.value">
+              </el-option>
+            </el-select>
+            <span style="display: inline-block; width: 220px; margin-left: 10px"><el-input v-model="input"
+                placeholder="模糊搜索"></el-input></span>
+          </div>
 
-      <div class="table">
-        <el-table :data="showList" border>
-          <el-table-column prop="type" label="级别" width="70">
-            <template slot-scope="scope">
-              <el-tag v-if="scope.row.type == 'A'" type="success">平台</el-tag>
-              <el-tag v-if="scope.row.type == 'B'">商户</el-tag>
-              <el-tag v-if="scope.row.type == 'C'" type="warning">网点</el-tag>
-            </template>
-          </el-table-column>
-          <el-table-column prop="name" label="网点名称"> </el-table-column>
-          <el-table-column prop="" label="结构">
-            <template slot-scope="scope">
-              {{ scope.row.pname.join(' -> ') }}
-            </template>
-          </el-table-column>
-          <el-table-column align="center" label="状态" class-name="status-col" width="80">
-            <template slot-scope="scope">
-              <el-tag :type="scope.row.status ? 'success' : 'danger'">{{
-                scope.row.status ? '启用' : '禁用'
-              }}</el-tag>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="268" fixed="right">
-            <template slot-scope="scope">
-              <el-button type="primary" size="mini" icon="el-icon-edit"
-                @click="openMainForm('edit', scope.row.websitId)">编辑</el-button>
-              <el-button type="primary" size="mini" icon="el-icon-edit"
-                @click="handleDelete(scope.row.websitId)">删除</el-button>
-              <el-button v-if="!!~['A', 'B'].indexOf(scope.row.type)"
-                :type="({ A: 'primary', B: 'warning' })[scope.row.type]" plain size="mini" icon="el-icon-plus"
-                @click="openMainForm('add', scope.row.websitId)">
-                添加{{ scope.row.type
-                  == 'A' ? '商户' :
-                  scope.row.type == 'B' ? '网点' : '网点' }}
-              </el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <div class="pagination clearfix">
-        <div class="fr">
-          <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
-            :page-sizes="[15, 20, 30, 50]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper"
-            :total="listTotal">
-          </el-pagination>
+          <div class="table">
+            <el-table :data="showList" border>
+              <el-table-column prop="type" label="级别" width="70">
+                <template slot-scope="scope">
+                  <el-tag v-if="scope.row.type == 'A'" type="success">平台</el-tag>
+                  <el-tag v-if="scope.row.type == 'B'">商户</el-tag>
+                  <el-tag v-if="scope.row.type == 'C'" type="warning">网点</el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column prop="name" label="网点名称"> </el-table-column>
+              <el-table-column prop="" label="结构">
+                <template slot-scope="scope">
+                  {{ scope.row.pname.join(' -> ') }}
+                </template>
+              </el-table-column>
+              <el-table-column align="center" label="状态" class-name="status-col" width="80">
+                <template slot-scope="scope">
+                  <el-tag :type="scope.row.status ? 'success' : 'danger'">{{
+                    scope.row.status ? '启用' : '禁用'
+                  }}</el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" width="268" fixed="right">
+                <template slot-scope="scope">
+                  <el-button type="primary" size="mini" icon="el-icon-edit"
+                    @click="openMainForm('edit', scope.row.websitId)">编辑</el-button>
+                  <el-button type="primary" size="mini" icon="el-icon-edit"
+                    @click="handleDelete(scope.row.websitId)">删除</el-button>
+                  <el-button v-if="!!~['A', 'B'].indexOf(scope.row.type)"
+                    :type="({ A: 'primary', B: 'warning' })[scope.row.type]" plain size="mini" icon="el-icon-plus"
+                    @click="openMainForm('add', scope.row.websitId)">
+                    添加{{ scope.row.type
+                      == 'A' ? '商户' :
+                      scope.row.type == 'B' ? '网点' : '网点' }}
+                  </el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <div class="pagination clearfix">
+            <div class="fr">
+              <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                :current-page="currentPage" :page-sizes="[15, 20, 30, 50]" :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper" :total="listTotal">
+              </el-pagination>
+            </div>
+          </div>
         </div>
-      </div>
-    </div>
-    <!-- 添加编辑网点 -->
-    <el-dialog :title="mainFormType == 'add' ? '添加' : '编辑'" :visible.sync="mainFormVisible" :show-close="false"
-      width="40%" :close-on-click-modal="false">
-      <el-form ref="mainForm" :model="mainForm" :rules="mainFormRules" label-position="top" label-width="80px">
-        <el-form-item label="上级" prop="parentId">
-          <el-cascader style="width: 100%" :options="dataList2"
-            :props="{ checkStrictly: true, value: 'websitId', label: 'name' }" v-model="mainForm.parentId" filterable
-            clearable>
-          </el-cascader>
-        </el-form-item>
-        <el-form-item label="名称" prop="name">
-          <el-input placeholder="请输入网点名称" v-model="mainForm.name"></el-input>
-        </el-form-item>
-        <el-form-item label="联系人" prop="linkName">
-          <el-input placeholder="请输入联系人名称" v-model="mainForm.linkName"></el-input>
-        </el-form-item>
-        <el-form-item label="联系人电话" prop="websitPhone">
-          <el-input placeholder="请输入联系人电话" maxlength="11" type="number" v-model="mainForm.websitPhone"></el-input>
-        </el-form-item>
-        <el-form-item label="地址" prop="address">
-          <div style="display:flex;">
-            <el-input placeholder="请选择地址" readonly style="margin-right: 20px;" v-model="mainForm.address"></el-input>
-            <geographicalPosi :formData="mainForm" @selectPosi="selectAddress"></geographicalPosi>
+        <div v-if="~['add', 'edit'].indexOf(activeKey)">
+          <el-form ref="mainForm" :model="mainForm" :rules="mainFormRules" label-position="top" label-width="80px">
+            <el-form-item label="上级" prop="parentId">
+              <el-cascader style="width: 100%" :options="dataList2"
+                :props="{ checkStrictly: true, value: 'websitId', label: 'name' }" v-model="mainForm.parentId" filterable
+                clearable>
+              </el-cascader>
+            </el-form-item>
+            <el-form-item label="名称" prop="name">
+              <el-input placeholder="请输入网点名称" v-model="mainForm.name"></el-input>
+            </el-form-item>
+            <el-form-item label="联系人" prop="linkName">
+              <el-input placeholder="请输入联系人名称" v-model="mainForm.linkName"></el-input>
+            </el-form-item>
+            <el-form-item label="联系人电话" prop="websitPhone">
+              <el-input placeholder="请输入联系人电话" maxlength="11" type="number" v-model="mainForm.websitPhone"></el-input>
+            </el-form-item>
+            <el-form-item label="地址" prop="address">
+              <div style="display:flex;">
+                <el-input placeholder="请选择地址" readonly style="margin-right: 20px;" v-model="mainForm.address"></el-input>
+                <geographicalPosi :formData="mainForm" @selectPosi="selectAddress"></geographicalPosi>
+              </div>
+            </el-form-item>
+            <el-form-item label="状态" prop="status">
+              <el-radio-group v-model="mainForm.status">
+                <el-radio :label="true">启用</el-radio>
+                <el-radio :label="false">禁用</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="增值服务" prop="isIncre">
+              <el-radio-group v-model="mainForm.isIncre">
+                <el-radio :label="true">启用</el-radio>
+                <el-radio :label="false">禁用</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-form>
+          <div slot="footer" class="dialog-footer">
+            <el-button @click="data.removeTab">取 消</el-button>
+            <el-button type="primary" @click="submitMainForm">确 定</el-button>
           </div>
-        </el-form-item>
-        <el-form-item label="状态" prop="status">
-          <el-radio-group v-model="mainForm.status">
-            <el-radio :label="true">启用</el-radio>
-            <el-radio :label="false">禁用</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="增值服务" prop="isIncre">
-          <el-radio-group v-model="mainForm.isIncre">
-            <el-radio :label="true">启用</el-radio>
-            <el-radio :label="false">禁用</el-radio>
-          </el-radio-group>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="cancelMainForm">取 消</el-button>
-        <el-button type="primary" @click="submitMainForm">确 定</el-button>
+        </div>
       </div>
-    </el-dialog>
-  </div>
+    </template>
+  </zj-tab-page>
 </template>
 
 <script>
@@ -242,35 +244,51 @@ export default {
 
     // 打开 新增编辑 网点表单
     openMainForm(type, id) {
-      this.mainFormType = type
-      this.mainFormVisible = true
-      if (type == 'add') {
-        this.mainForm.parentId = id
-      } else {
-        this.editId = id
-        getDepartmentDetail({ id }).then(res => {
-          this.mainForm = {
-            parentId: res.data.parentId,
-            name: res.data.name,
-            linkName: res.data.linkName,
-            websitPhone: res.data.websitPhone,
-            lat: res.data.lat,
-            lng: res.data.lng,
-            address: res.data.address,
-            status: res.data.status,
-            isIncre: res.data.isIncre
-          }
-        })
-      }
+      this.$refs.tabPage.addTab({
+        // 对应显示的模块
+        activeKey: type,
+        // 唯一标识
+        key: type,
+        // 页签名称
+        label: ({ edit: "编辑", add: "新增" })[type],
+        // 打开时事件
+        triggerEvent: () => {
+          this.cancelMainForm()
+          this.$nextTick(()=>{
+            this.mainFormType = type
+            this.mainFormVisible = true
+            if (type == 'add') {
+              this.mainForm.parentId = id
+            } else {
+              this.editId = id
+              getDepartmentDetail({ id }).then(res => {
+                this.mainForm = {
+                  parentId: res.data.parentId,
+                  name: res.data.name,
+                  linkName: res.data.linkName,
+                  websitPhone: res.data.websitPhone,
+                  lat: res.data.lat,
+                  lng: res.data.lng,
+                  address: res.data.address,
+                  status: res.data.status,
+                  isIncre: res.data.isIncre
+                }
+              })
+            }
+          })
+        },
+        // 关闭时事件
+        closeEvent: () => {
+          
+        }
+      })
     },
 
     // 取消 新增编辑 网点表单
     cancelMainForm() {
       this.mainFormVisible = false
-      this.$refs.mainForm.resetFields()
-      this.mainForm.parentId = ''
-      this.mainForm.address = ''
-      this.mainForm.name = ''
+      this.$refs?.mainForm?.resetFields()
+      this.$data.mainForm = this.$options.data().mainForm
     },
 
     // 提交 网点表单

+ 1 - 1
src/views/setting/notification/announcement/index.vue

@@ -134,7 +134,7 @@ export default {
 				name: 'zj-paging-pull-down',
 				options: this.websitList,
 				attributes: {
-					valueKey: "companyWechatId",
+					valueKey: "adminUserId",
 					labelKey: "companyName",
 					size: 'mini',
 					placeholder: '请选择',

+ 41 - 105
src/views/valueAddedService/orderBranchAccount/index.vue

@@ -1,120 +1,56 @@
 <template>
-  <template-page ref="pageRef" :get-list="getList" :table-attributes="tableAttributes" :table-events="tableEvents"
-    :options-evens-group="optionsEvensGroup" :more-parameters="moreParameters" :column-parsing="columnParsing"
-    :operation="operation()" :exportList="exportList">
-    <div class="cartographer">
-      <el-dialog title="明细" width="100%" :modal="false" :visible.sync="formDialog"
-        :before-close="() => { formDialog = false }">
-        <template-page v-if="formDialog" :get-list="getList2" :columnParsing="columnParsing2" />
-      </el-dialog>
+  <zj-page-container>
+    <div class="tab">
+      <el-radio-group v-model="tabType" size="small" @change="tabTypeChange">
+        <el-radio-button label="collect">汇总</el-radio-button>
+        <el-radio-button label="offline">明细</el-radio-button>
+      </el-radio-group>
     </div>
-  </template-page>
+    <zj-page-fill>
+      <collect v-if="tabTypeCk == 'collect'" key="collect" />
+      <offline v-if="tabTypeCk == 'offline'" key="offline" :websitId="websitId" :detailParams="detailParams" />
+    </zj-page-fill>
+  </zj-page-container>
 </template>
 
 <script>
-import TemplatePage from '@/components/template/template-page-1.vue'
-import import_mixin from '@/components/template/import_mixin.js'
-import operation_mixin from '@/components/template/operation_mixin.js'
-import {
-  increOrderSettleCountList,
-  increOrderSettleCountListExport
-} from '@/api/orderBranchAccount'
-import { increOrderSettleList } from "@/api/orderSettleManag.js"
+import { EventBus } from '@/utils/eventBus'
+import collect from './pages/collect.vue'
+import offline from './pages/offline.vue'
 export default {
-  components: { TemplatePage },
-  mixins: [import_mixin,operation_mixin],
+  components: { collect, offline },
   data() {
     return {
-      // 事件组合
-      optionsEvensGroup: [],
-      // 表格属性
-      tableAttributes: {
-        // 启用勾选列
-        selectColumn: false
-      },
-      // 表格事件
-      tableEvents: {
-        'selection-change': this.selectionChange
-      },
-      // 勾选选中数据
-      recordSelected: [],
-      formDialog: false,
-      detailParams: []
+      tabType: 'collect',
+      tabTypeCk: 'collect',
+      websitId: "",
+      detailParams: [],
     }
   },
-  computed: {
-    // 更多参数
-    moreParameters() {
-      return []
-    },
+  created() {
+    EventBus.$on("orderBranchAccount", ({ websitId, detailParams, tabTypeCk }) => {
+      this.websitId = websitId
+      this.detailParams = detailParams
+      this.$nextTick(() => {
+        this.tabTypeCk = tabTypeCk
+        this.tabType = tabTypeCk
+      })
+    })
   },
   methods: {
-    // 列表请求函数
-    getList(p) {
-      this.detailParams = p.params.filter(item => item.param === "a.pay_time")
-      return increOrderSettleCountList(p)
-    },
-    // 列表导出函数
-    exportList: increOrderSettleCountListExport,
-    // 表格列解析渲染数据更改
-    columnParsing(item, defaultData) {
-      return defaultData
-    },
-    // 监听勾选变化
-    selectionChange(data) {
-      this.recordSelected = data
-    },
-	// 表格操作列
-	operation() {
-		return this.operationBtn({
-			detail: {
-				btnType: 'text',
-				click: ({ row, index, column }) => {
-					this.detailParams = [...this.detailParams.filter(item => item.param === "a.pay_time"), {
-					  param: "a.websit_id",
-					  compare: "=",
-					  value: row.websitId
-					}];
-					this.$nextTick(() => {
-					  this.formDialog = true
-					})
-				}
-			}
-		})
-	},
-    // 明细列表
-    getList2(p) {
-      var pam = JSON.parse(JSON.stringify(p))
-      pam.params = [...pam.params, ...this.detailParams,]
-      try {
-        return increOrderSettleList(pam)
-      } catch (err) {
-      }
-    },
-    // 表格列解析渲染数据更改
-    columnParsing2(item, defaultData) {
-      if (item.jname === 'residuNum') {
-        defaultData.render = (h, { row, index, column }) => {
-          return (
-            <div style="padding:0 6px;cursor: pointer;">
-              {row["increType"] != 1 ? row["residuNum"] : ""}
-            </div>
-          )
-        }
-      }
-      if (item.jname === 'serviceEndTime') {
-        defaultData.render = (h, { row, index, column }) => {
-          return (
-            <div style="padding:0 6px;cursor: pointer;">
-              {row[column.columnAttributes.prop] ? row[column.columnAttributes.prop].split(" ")[0] : ""}
-            </div>
-          )
-        }
-      }
-      return defaultData
-    },
-  }
+    tabTypeChange() {
+      this.websitId = ""
+      this.detailParams = []
+      this.$nextTick(() => {
+        this.tabTypeCk = this.tabType
+      })
+    }
+  },
 }
 </script>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+.tab {
+  padding: 20px 20px 0 20px;
+}
+</style>

+ 73 - 0
src/views/valueAddedService/orderBranchAccount/pages/collect.vue

@@ -0,0 +1,73 @@
+<template>
+  <template-page ref="pageRef" :getList="getList" :operation="operation()" :exportList="exportList"
+    :columnParsing="columnParsing" :tableAttributes="tableAttributes" :tableEvents="tableEvents">
+  </template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import {
+  increOrderSettleCountList,
+  increOrderSettleCountListExport
+} from '@/api/orderBranchAccount'
+import { EventBus } from '@/utils/eventBus'
+export default {
+  components: {
+    TemplatePage,
+  },
+  mixins: [import_mixin, operation_mixin],
+  data() {
+    return {
+      formBool: false,
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false,
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+      formData: {},
+      detailParams: []
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList(p) {
+      this.detailParams = p.params.filter(item => item.param === "a.pay_time")
+      return increOrderSettleCountList(p)
+    },
+
+    // 列表导出函数
+    exportList: increOrderSettleCountListExport,
+
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = data
+    },
+
+    operation() {
+      return this.operationBtn({
+        detail: {
+          btnType: 'text',
+          click: ({ row, index, column }) => {
+            var { websitId } = row
+            EventBus.$emit("orderBranchAccount", { websitId, detailParams: this.detailParams, tabTypeCk: "offline" })
+          }
+        },
+      })
+    },
+
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 88 - 0
src/views/valueAddedService/orderBranchAccount/pages/offline.vue

@@ -0,0 +1,88 @@
+<template>
+  <template-page ref="pageRef" :getList="getList" :exportList="exportList" :columnParsing="columnParsing"
+    :tableAttributes="tableAttributes" :tableEvents="tableEvents">
+  </template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import { increOrderSettleList2, increOrderSettleListExport2 } from "@/api/orderSettleManag.js"
+export default {
+  components: {
+    TemplatePage,
+  },
+  mixins: [import_mixin, operation_mixin],
+  props: {
+    websitId: {
+      type: [String, Number],
+      default: ""
+    },
+    detailParams: {
+      type: Array,
+      default: () => []
+    },
+  },
+  data() {
+    return {
+      formBool: false,
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false,
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList(p, cb) {
+      try {
+        var pam = JSON.parse(JSON.stringify(p))
+        if (this.websitId) {
+          pam.params.push({ "param": "websit_id", "compare": "=", "value": this.websitId })
+        }
+        if (this.detailParams.length) {
+          pam.params = [...pam.params.filter(item => item.param !== "a.pay_time"), ...this.detailParams,]
+        }
+        return increOrderSettleList2(pam)
+      } catch (err) {
+        console.log(err)
+      }
+    },
+
+    exportList: increOrderSettleListExport2,
+
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = 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>

+ 56 - 0
src/views/valueAddedService/orderMasterSplitAccount/index.vue

@@ -0,0 +1,56 @@
+<template>
+  <zj-page-container>
+    <div class="tab">
+      <el-radio-group v-model="tabType" size="small" @change="tabTypeChange">
+        <el-radio-button label="collect">汇总</el-radio-button>
+        <el-radio-button label="offline">明细</el-radio-button>
+      </el-radio-group>
+    </div>
+    <zj-page-fill>
+      <collect v-if="tabTypeCk == 'collect'" key="collect" />
+      <offline v-if="tabTypeCk == 'offline'" key="offline" :workerId="workerId" :detailParams="detailParams" />
+    </zj-page-fill>
+  </zj-page-container>
+</template>
+
+<script>
+import { EventBus } from '@/utils/eventBus'
+import collect from './pages/collect.vue'
+import offline from './pages/offline.vue'
+export default {
+  components: { collect, offline },
+  data() {
+    return {
+      tabType: 'collect',
+      tabTypeCk: 'collect',
+      workerId: "",
+      detailParams: [],
+    }
+  },
+  created() {
+    EventBus.$on("orderMasterSplitAccount", ({ workerId, detailParams, tabTypeCk }) => {
+      this.workerId = workerId
+      this.detailParams = detailParams
+      this.$nextTick(() => {
+        this.tabTypeCk = tabTypeCk
+        this.tabType = tabTypeCk
+      })
+    })
+  },
+  methods: {
+    tabTypeChange() {
+      this.workerId = ""
+      this.detailParams = []
+      this.$nextTick(() => {
+        this.tabTypeCk = this.tabType
+      })
+    }
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.tab {
+  padding: 20px 20px 0 20px;
+}
+</style>

+ 73 - 0
src/views/valueAddedService/orderMasterSplitAccount/pages/collect.vue

@@ -0,0 +1,73 @@
+<template>
+  <template-page ref="pageRef" :getList="getList" :operation="operation()" :exportList="exportList"
+    :columnParsing="columnParsing" :tableAttributes="tableAttributes" :tableEvents="tableEvents">
+  </template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import {
+  increOrderSettleCountWorkerList,
+  increOrderSettleCountWorkerListExport
+} from '@/api/orderSettleManag'
+import { EventBus } from '@/utils/eventBus'
+export default {
+  components: {
+    TemplatePage,
+  },
+  mixins: [import_mixin, operation_mixin],
+  data() {
+    return {
+      formBool: false,
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false,
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+      formData: {},
+      detailParams: []
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList(p) {
+      this.detailParams = p.params.filter(item => item.param === "a.pay_time")
+      return increOrderSettleCountWorkerList(p)
+    },
+
+    // 列表导出函数
+    exportList: increOrderSettleCountWorkerListExport,
+
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = data
+    },
+
+    operation() {
+      return this.operationBtn({
+        detail: {
+          btnType: 'text',
+          click: ({ row, index, column }) => {
+            var { workerId } = row
+            EventBus.$emit("orderMasterSplitAccount", { workerId, detailParams: this.detailParams, tabTypeCk: "offline" })
+          }
+        },
+      })
+    },
+
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 88 - 0
src/views/valueAddedService/orderMasterSplitAccount/pages/offline.vue

@@ -0,0 +1,88 @@
+<template>
+  <template-page ref="pageRef" :getList="getList" :exportList="exportList" :columnParsing="columnParsing"
+    :tableAttributes="tableAttributes" :tableEvents="tableEvents">
+  </template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import { increOrderSettleList2, increOrderSettleListExport2 } from "@/api/orderSettleManag.js"
+export default {
+  components: {
+    TemplatePage,
+  },
+  mixins: [import_mixin, operation_mixin],
+  props: {
+    workerId: {
+      type: [String, Number],
+      default: ""
+    },
+    detailParams: {
+      type: Array,
+      default: () => []
+    },
+  },
+  data() {
+    return {
+      formBool: false,
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false,
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList(p, cb) {
+      try {
+        var pam = JSON.parse(JSON.stringify(p))
+        if (this.workerId) {
+          pam.params.push({ "param": "worker_id", "compare": "=", "value": this.workerId })
+        }
+        if (this.detailParams.length) {
+          pam.params = [...pam.params.filter(item => item.param !== "a.pay_time"), ...this.detailParams,]
+        }
+        return increOrderSettleList2(pam)
+      } catch (err) {
+        console.log(err)
+      }
+    },
+
+    exportList: increOrderSettleListExport2,
+
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = 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>

+ 25 - 456
src/views/valueAddedService/orderSettleManag/index.vue

@@ -1,473 +1,42 @@
 <template>
-  <template-page ref="pageRef" :get-list="getList" :exportList="exportList" :table-attributes="tableAttributes"
-    :table-events="tableEvents" :moreParameters="moreParameters" :column-parsing="columnParsing" :operation="operation()"
-    :operationColumnWidth="200" :optionsEvensGroup="optionsEvensGroup">
-    <div class="cartographer">
-      <el-dialog :title="formTypeName[formType]" width="100%" :modal="false" :visible.sync="formDialog"
-        :before-close="formCancel">
-        <zj-form-container v-if="formDialog" ref="formRef" :form-data="formData" :styleSwitch="false">
-          <zj-form-module title="基础信息" label-width="120px" :showPackUp="false" :form-data="formData"
-            :form-items="formItems">
-          </zj-form-module>
-          <zj-form-module title="订单信息" label-width="120px" :showPackUp="false" :form-data="formData"
-            :form-items="formItemsList">
-          </zj-form-module>
-          <zj-form-module title="附件图片" label-width="120px" :showPackUp="false" :form-data="formData"
-            :form-items="formItemsImgs">
-          </zj-form-module>
-        </zj-form-container>
-        <div slot="footer" v-if="formType" class="dialog-footer">
-          <el-button size="mini" @click="formCancel">取 消</el-button>
-          <el-button size="mini" @click="formConfirm" type="primary">确定</el-button>
-        </div>
-      </el-dialog>
+  <zj-page-container>
+    <div class="tab">
+      <el-radio-group v-model="tabType" size="small" @change="tabTypeChange">
+        <el-radio-button label="collect">线上订单</el-radio-button>
+        <el-radio-button label="offline">线下订单</el-radio-button>
+      </el-radio-group>
     </div>
-  </template-page>
+    <zj-page-fill>
+      <collect v-if="tabTypeCk == 'collect'" key="collect" />
+      <offline v-if="tabTypeCk == 'offline'" key="offline" />
+    </zj-page-fill>
+  </zj-page-container>
 </template>
 
 <script>
-import TemplatePage from '@/components/template/template-page-1.vue'
-import import_mixin from '@/components/template/import_mixin.js'
-import { increOrderSettleList, increOrderSettleListExport, increOrderSettleDetail, increOrderSettleConfirm, increOrderSettleRefund } from "@/api/orderSettleManag.js"
-import ImageUpload from '@/components/file-upload'
-import operation_mixin from '@/components/template/operation_mixin.js'
+import { EventBus } from '@/utils/eventBus'
+import collect from './pages/collect.vue'
+import offline from './pages/offline.vue'
 export default {
-  props: {
-    storageType: {
-      type: String,
-      default: ""
-    }
-  },
-  components: { TemplatePage, ImageUpload },
-  mixins: [import_mixin, operation_mixin],
+  components: { collect, offline },
   data() {
     return {
-      // 表格属性
-      tableAttributes: {
-        // 启用勾选列
-        selectColumn: true,
-        selectable: this.selectable
-      },
-      // 表格事件
-      tableEvents: {
-        'selection-change': this.selectionChange
-      },
-      // 勾选选中数据
-      recordSelected: [],
-      formTypeName: ["查看", "结算"],
-      formType: -1,
-      formData: {
-        pgIncreItems: []
-      },
-      formDialog: false,
+      tabType: 'collect',
+      tabTypeCk: 'collect',
     }
   },
-  computed: {
-    // 事件组合
-    optionsEvensGroup() {
-      return [
-        [
-          [
-            this.optionsEvensAuth("bulkSettlemen", {
-              click: () => {
-                if (this.recordSelected.length === 0) {
-                  this.$message.warning('请勾选订单')
-                  return
-                }
-                increOrderSettleConfirm(this.recordSelected.map(item => item.id)).then(res => {
-                  this.$message({ type: 'success', message: `成功!` })
-                  this.$refs.pageRef.refreshList()
-                })
-              }
-            })
-          ],
-        ]
-      ]
-    },
-    // 更多参数
-    moreParameters() {
-      return [
-        {
-          name: '支付状态',
-          key: 'payStatus',
-          value: '',
-          conditions: [
-            {
-              label: "全部",
-              value: ""
-            }, {
-              label: "已支付",
-              value: "PAID"
-            }, {
-              label: "待支付",
-              value: "WAIT"
-            }, {
-              label: "已退款",
-              value: "REFUND"
-            }, {
-              label: "过期",
-              value: "EXPIRE"
-            }, {
-              label: "取消",
-              value: "CANCEL"
-            }]
-        },
-      ]
-    },
-    formItems() {
-      return [{
-        md: 24,
-        isShow: true,
-        name: 'slot-component',
-        formItemAttributes: {
-          label: '',
-          prop: '',
-          'label-width': '0px'
-        },
-        render: (h, { props, onInput }) => {
-          var { value } = props
-          return (
-            <div>
-              <el-descriptions border title="" column={2} colon={false} labelStyle={{ width: '10%' }} contentStyle={{ width: '40%' }}>
-                <el-descriptions-item label="所属商户">
-                  {this.formData.companyWechatName}
-                </el-descriptions-item>
-                <el-descriptions-item label="销售网点">
-                  {this.formData.websitName}
-                </el-descriptions-item>
-                <el-descriptions-item label="订单单号" >
-                  {this.formData.id}
-                </el-descriptions-item>
-                <el-descriptions-item label="师傅姓名" >
-                  {this.formData.workerName}
-                </el-descriptions-item>
-                <el-descriptions-item label="师傅联系电话">
-                  {this.formData.workerMobile}
-                </el-descriptions-item>
-                <el-descriptions-item label="师傅身份证号">
-                  {this.formData.workerIdcard}
-                </el-descriptions-item>
-                <el-descriptions-item label="客户姓名" >
-                  {this.formData.userName}
-                </el-descriptions-item>
-                <el-descriptions-item label="客户电话" >
-                  {this.formData.userMobile}
-                </el-descriptions-item>
-                <el-descriptions-item label="详细地址">
-                  {this.formData.userAddress}
-                </el-descriptions-item>
-                <el-descriptions-item label="内机条码">
-                  {this.formData.insideCode}
-                </el-descriptions-item>
-                <el-descriptions-item label="服务单号" >
-                  {this.formData.serviceNo}
-                </el-descriptions-item>
-                <el-descriptions-item label="发票价格" >
-                  {this.formData.invoiceAmount}
-                </el-descriptions-item>
-                <el-descriptions-item label="发票时间">
-                  {this.formData.invoiceTime}
-                </el-descriptions-item>
-                <el-descriptions-item label="服务截止时间">
-                  {this.formData.serviceEndTime}
-                </el-descriptions-item>
-                <el-descriptions-item label="创建人" >
-                  {this.formData.createBy}
-                </el-descriptions-item>
-                <el-descriptions-item label="创建时间" >
-                  {this.formData.createTime}
-                </el-descriptions-item>
-                <el-descriptions-item label="支付状态">
-                  {({ "EXPIRE": "过期", "CANCEL": "取消", "PAID": "已支付", "WAIT": "待支付", "REFUND": "已退款" })[this.formData.payStatus] || ""}
-                </el-descriptions-item>
-                <el-descriptions-item label="支付方式">
-                  {({ 1: "扫码支付", 2: "代客支付" })[this.formData.payType] || ""}
-                </el-descriptions-item>
-                <el-descriptions-item label="支付订单号" >
-                  {this.formData.payNo}
-                </el-descriptions-item>
-                <el-descriptions-item label="支付时间" >
-                  {this.formData.payTime}
-                </el-descriptions-item>
-                <el-descriptions-item label="微信流水号">
-                  {this.formData.transcationId}
-                </el-descriptions-item>
-                <el-descriptions-item label="师傅销售佣金">
-                  {this.formData.workerAmount}
-                </el-descriptions-item>
-                <el-descriptions-item label="结算人员" >
-                  {this.formData.updateBy}
-                </el-descriptions-item>
-                <el-descriptions-item label="操作时间" >
-                  {this.formData.updateTime}
-                </el-descriptions-item>
-              </el-descriptions>
-            </div>
-          )
-        }
-      }]
-    },
-    formItemsList() {
-      return [{
-        md: 24,
-        isShow: true,
-        name: 'slot-component',
-        formItemAttributes: {
-          label: '',
-          prop: '',
-          'label-width': '0px'
-        },
-        render: (h, { props, onInput }) => {
-          var { value } = props
-          return (
-            <zj-table
-              columns={[{
-                columnAttributes: {
-                  label: '服务类型',
-                  prop: 'type'
-                },
-                render: (h, { row, column, index }) => {
-                  return <div style="padding: 0 10px">
-                    {({ 1: "延保", 2: "清洗" })[row.type] || ""}
-                  </div>
-                }
-              },
-              {
-                columnAttributes: {
-                  label: '使用类型',
-                  prop: 'usedType'
-                },
-                render: (h, { row, column, index }) => {
-                  return <div style="padding: 0 10px">
-                    {({ COUNT: "使用次数", YEAR: "使用年限" })[row.usedType] || ""}
-                  </div>
-                }
-              }, {
-                columnAttributes: {
-                  label: '品牌',
-                  prop: 'brandName'
-                }
-              },
-              {
-                columnAttributes: {
-                  label: '产品大类',
-                  prop: 'mainName'
-                }
-              },
-              {
-                columnAttributes: {
-                  label: '服务内容',
-                  prop: 'content'
-                }
-              },
-              {
-                columnAttributes: {
-                  label: '服务金额(元)',
-                  prop: 'amount'
-                }
-              },
-              {
-                columnAttributes: {
-                  label: '使用限值',
-                  prop: 'limitNum'
-                }
-              },
-              {
-                columnAttributes: {
-                  label: '总手续费',
-                  prop: 'commissionAmount'
-                }
-              },
-              {
-                columnAttributes: {
-                  label: '师傅分成金额',
-                  prop: 'workerAmount'
-                }
-              },
-              {
-                columnAttributes: {
-                  label: '网点分成金额',
-                  prop: 'websitAmount'
-                }
-              }]}
-              tableData={[{
-                ...(this.formData.increItem || {}),
-                ...(this.formData.incre || {}),
-                workerAmount: this.formData.workerAmount,
-                websitAmount: this.formData.websitAmount,
-                commissionAmount: this.formData.commissionAmount
-              }]}
-              tableAttributes={{
-                size: 'mini',
-                border: true,
-              }} />
-          )
-        }
-      }]
-    },
-    formItemsImgs() {
-      return [{
-        md: 24,
-        name: 'slot-component',
-        formItemAttributes: {
-          label: '',
-          prop: '',
-          'label-width': '0px'
-        },
-        render: (h, { props, onInput }) => {
-          return (
-            <ImageUpload
-              fileList={
-                [{ key: "insideCodeImg", name: "内机条码" }, { key: "machineImg", name: "机器铭牌图片" }, { key: "buyCertImg", name: "购机凭证图片" }].map((item) => ({ url: this.formData[item.key], name: item.name }))
-              }
-              limit={1000}
-              isEdit={false}
-              viewOnline={false}
-              download={false}
-              showName={true}
-            />
-          )
-        }
-      }]
-    },
-  },
   methods: {
-    selectable(row, index) {
-      return ["PAID"].includes(Object.entries(row.selectMapData.payStatus).find(([key, val]) => val == row.payStatus)?.[0]) &&
-        ["ING"].includes(Object.entries(row.selectMapData.settleStatus).find(([key, val]) => val == row.settleStatus)?.[0])
-    },
-    // 列表请求函数
-    getList(p, cb) {
-      var pam = JSON.parse(JSON.stringify(p))
-      try {
-        if (pam.payStatus) {
-          pam.params.push({ "param": "a.pay_status", "compare": "=", "value": pam.payStatus })
-        }
-        cb && cb(pam)
-        return increOrderSettleList(pam)
-      } catch (err) {
-      }
-    },
-    // 列表导出函数
-    exportList: increOrderSettleListExport,
-    // 表格列解析渲染数据更改
-    columnParsing(item, defaultData) {
-      if (item.jname === 'residuNum') {
-        defaultData.render = (h, { row, index, column }) => {
-          return (
-            <div style="padding:0 6px;cursor: pointer;">
-              {row["increType"] != 1 ? row["residuNum"] : ""}
-            </div>
-          )
-        }
-      }
-      if (item.jname === 'serviceEndTime') {
-        defaultData.render = (h, { row, index, column }) => {
-          return (
-            <div style="padding:0 6px;cursor: pointer;">
-              {row[column.columnAttributes.prop] ? row[column.columnAttributes.prop].split(" ")[0] : ""}
-            </div>
-          )
-        }
-      }
-      return defaultData
-    },
-    // 监听勾选变化
-    selectionChange(data) {
-      this.recordSelected = data
-    },
-    // 表格操作列
-    operation() {
-      return this.operationBtn({
-        detail: {
-          btnType: 'text',
-          click: ({ row, index, column }) => {
-            this.formType = 0
-            this.getDetail(row.id)
-          }
-        },
-        orderDetail: {
-          btnType: 'text',
-          conditions: ({ row, index, column }) => {
-            return ["PAID", "REFUND"].includes(row.payStatus)
-          },
-          click: ({ row, index, column }) => {
-            this.$router.push({
-              name: "workOrderPool",
-              query: {
-                pgIncreItemId: row.id,
-              }
-            })
-          }
-        },
-        refund: {
-          btnType: 'text',
-          prompt: '是否确定退款?',
-          conditions: ({ row, index, column }) => {
-            return ["PAID"].includes(row.payStatus) && ["ING"].includes(row.settleStatus) && (() => {
-              var currentDate = new Date(row.payTime);
-              currentDate.setDate(currentDate.getDate() + 7);
-              currentDate.setHours(23);
-              currentDate.setMinutes(59);
-              currentDate.setSeconds(59);
-              return currentDate > new Date()
-            })()
-          },
-          click: ({ row, index, column }) => {
-            increOrderSettleRefund({ id: row.id }).then(res => {
-              this.$message({ type: 'success', message: `退款成功!` })
-              this.$refs.pageRef.refreshList()
-            })
-          }
-        },
-        settlement: {
-          btnType: 'text',
-          prompt: '是否确定结算?',
-          conditions: ({ row, index, column }) => {
-            return ["PAID"].includes(row.payStatus) && ["ING"].includes(row.settleStatus)
-          },
-          click: ({ row, index, column }) => {
-            this.formType = 1
-            this.getDetail(row.id)
-          }
-        },
-      })
-    },
-    getDetail(id) {
-      increOrderSettleDetail({ id }).then(res => {
-        Object.assign(this.formData, res.data)
-        this.openForm()
+    tabTypeChange() {
+      this.$nextTick(() => {
+        this.tabTypeCk = this.tabType
       })
-    },
-    openForm() {
-      this.formDialog = true
-    },
-    // 关闭弹窗
-    formCancel() {
-      this.$refs.formRef.$refs.inlineForm.clearValidate()
-      this.$data.formData = this.$options.data().formData
-      this.formDialog = false
-    },
-    formConfirm() {
-      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
-        if (valid) {
-          increOrderSettleConfirm([this.formData.id]).then(res => {
-            this.$message({ type: 'success', message: `操作成功!` })
-            this.formCancel()
-            this.$refs.pageRef.refreshList()
-          })
-        }
-      })
-    },
-  }
+    }
+  },
 }
 </script>
 
-<style lang="scss">
-.redbordererr {
-  .el-form-item {
-    margin: 0 !important;
-    overflow: hidden;
-  }
+<style lang="scss" scoped>
+.tab {
+  padding: 20px 20px 0 20px;
 }
 </style>

+ 292 - 0
src/views/valueAddedService/orderSettleManag/mixins/basicInfo.js

@@ -0,0 +1,292 @@
+import { lbsAmapRegion } from '@/api/common.js'
+import { listPageV2, getDetail } from "@/api/engineeringMaintenance/basicData";
+import geographicalPosi from '@/components/geographicalPosi/index.vue'
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+export default {
+  data() {
+    return {
+      provinceList: [],
+      cityList: [],
+      areaList: [],
+      streetList: [],
+    }
+  },
+  computed: {
+    // 基本信息数据模型
+    basicInfo() {
+      return [
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: false, placeholder: '请输入' },
+          formItemAttributes: {
+            label: '客户名称',
+            prop: 'userName',
+            rules: [...required]
+          },
+          events: {
+            input: (v) => {
+              this.addFormData.linkName = v
+            }
+          }
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: false, placeholder: '请输入', maxlength: 11 },
+          formItemAttributes: {
+            label: '客户电话',
+            prop: 'userMobile',
+            rules: [...mobileRequired]
+          }
+        },
+        {
+          name: 'slot-component',
+          md: 12,
+          formItemAttributes: {
+            'label-width': '0px',
+            prop: '',
+          },
+          render: (h, { props }) => {
+            return null
+          }
+        },
+        // {
+        //   name: 'el-select',
+        //   md: 6,
+        //   formItemAttributes: {
+        //     label: '客户地址', //省
+        //     prop: 'provinceId',
+        //     rules: [required],
+        //     errLabel: '省'
+        //   },
+        //   options: this.provinceList.map((v, i) => ({ value: v.id, label: v.name })),
+        //   attributes: { disabled: true, clearable: true, filterable: true, placeholder: '请选择' },
+        //   events: {
+        //     change: () => {
+        //       // 获取省名称
+        //       this.addFormData.province = this.provinceList.find(item => item.id === val)?.name || ''
+        //       // 清除市区街道以及详细地址数据
+        //       this.delDataK(1)
+        //       lbsAmapRegion({ pid: val }).then(res => {
+        //         this.cityList = res.data
+        //       })
+        //     }
+        //   }
+        // },
+        // {
+        //   name: 'el-select',
+        //   md: 5,
+        //   formItemAttributes: {
+        //     'label-width': '0px',
+        //     label: '', //市
+        //     prop: 'cityId',
+        //     rules: [required],
+        //     errLabel: '市'
+        //   },
+        //   options: this.cityList.map((v, i) => ({ value: v.id, label: v.name })),
+        //   attributes: { disabled: true, clearable: true, filterable: true, placeholder: '请选择' },
+        //   events: {
+        //     change: () => {
+        //       // 获取市名称
+        //       this.addFormData.city = this.cityList.find(item => item.id === val).name
+        //       // 清除区街道以及详细地址数据
+        //       this.delDataK(2)
+        //       lbsAmapRegion({ pid: val }).then(res => {
+        //         this.areaList = res.data
+        //       })
+        //     }
+        //   }
+        // },
+        // {
+        //   name: 'el-select',
+        //   md: 5,
+        //   formItemAttributes: {
+        //     'label-width': '0px',
+        //     label: '', //区
+        //     prop: 'areaId',
+        //     rules: [required],
+        //     errLabel: '区'
+        //   },
+        //   options: this.areaList.map((v, i) => ({ value: v.id, label: v.name })),
+        //   attributes: { disabled: true, clearable: true, filterable: true, placeholder: '请选择' },
+        //   events: {
+        //     change: () => {
+        //       // 获取区名称
+        //       this.addFormData.area = this.areaList.find(item => item.id === val).name
+        //       // 清除街道以及详细地址数据
+        //       this.delDataK(3)
+        //       lbsAmapRegion({ pid: val }).then(res => {
+        //         this.streetList = res.data
+        //       })
+        //     }
+        //   }
+        // },
+        // {
+        //   name: 'el-select',
+        //   md: 5,
+        //   formItemAttributes: {
+        //     'label-width': '0px',
+        //     label: '', //街道
+        //     prop: 'streetId',
+        //     rules: [required],
+        //     errLabel: '街道'
+        //   },
+        //   options: this.streetList.map((v, i) => ({ value: v.id, label: v.name })),
+        //   attributes: { disabled: true, clearable: true, filterable: true, placeholder: '请选择' },
+        //   events: {
+        //     change: () => {
+        //       // 获取街道名称
+        //       this.addFormData.street = this.streetList.find(item => item.id === val).name
+        //       // 清除详细地址数据
+        //       this.delDataK(4)
+        //     }
+        //   }
+        // },
+        {
+          name: 'el-input',
+          md: 21,
+          formItemAttributes: { label: '客户地址', prop: 'userAddress', rules: [...required] },
+          attributes: { disabled: false, placeholder: '详细地址' }
+        },
+        {
+          name: 'slot-component',
+          md: 3,
+          formItemAttributes: {
+            'label-width': '0px',
+            prop: '',
+          },
+          render: (h, { props }) => {
+            return (
+              <geographicalPosi
+                disabled={false}
+                formData={this.addFormData}
+                onSelectPosi={data => {
+                  // 赋值GPS详细地址
+                  this.addFormData.userAddress = data.name
+                  // // 获取经纬度
+                  // this.addFormData.lng = data.center[0]
+                  // this.addFormData.lat = data.center[1]
+                  // // 获取定位的省市区街道
+                  // var { province, city, district, township } = data.data.addressComponent
+                  // // 获取选中省名称id
+                  // var { id, name } = this.provinceList.find(item => item.name === province)
+                  // this.addFormData.provinceId = id
+                  // this.addFormData.province = name
+                  // // 请求市选项
+                  // lbsAmapRegion({ pid: this.addFormData.provinceId }).then(res => {
+                  //   // 赋值市选项
+                  //   this.cityList = res.data
+                  //   // 获取选中市名称id
+                  //   var { id, name } = res.data.find(item => item.name === city)
+                  //   this.addFormData.cityId = id
+                  //   this.addFormData.city = name
+                  //   // 请求区选项
+                  //   lbsAmapRegion({ pid: this.addFormData.cityId }).then(res => {
+                  //     // 赋值区选项
+                  //     this.areaList = res.data
+                  //     // 获取选中区名称id
+                  //     var { id, name } = res.data.find(item => item.name === district)
+                  //     this.addFormData.areaId = id
+                  //     this.addFormData.area = name
+                  //     // 请求街道选项
+                  //     lbsAmapRegion({ pid: this.addFormData.areaId }).then(res => {
+                  //       // 赋值街道选项
+                  //       this.streetList = res.data
+                  //       // 获取选中街道名称id
+                  //       var { id, name } = res.data.find(item => item.name === township)
+                  //       this.addFormData.streetId = id
+                  //       this.addFormData.street = name
+                  //       // 赋值GPS详细地址
+                  //       this.addFormData.userAddress = data.name
+                  //     })
+                  //   })
+                  // })
+                }}
+              />
+            )
+          }
+        },
+        {
+          name: 'el-input',
+          md: 24,
+          attributes: {
+            disabled: false,
+            type: 'textarea',
+            rows: 3,
+            placeholder: '请输入'
+          },
+          formItemAttributes: {
+            label: '备注',
+            prop: 'remark',
+            rules: []
+          }
+        }
+      ]
+    }
+  },
+  methods: {
+    getinitlbslist() {
+      // 初始化请求省市区街道下拉选项数据
+      lbsAmapRegion({ pid: 0 }).then(res => {
+        this.provinceList = res.data
+        // 创建工单时获取ip地址定位赋值
+        if (!this.addFormData.id && this.$IpAdd.province) {
+          var item = this.provinceList.find(item => item.name === this.$IpAdd.province)
+          if (item) {
+            this.addFormData.provinceId = item.id
+            this.addFormData.province = item.name
+          }
+        }
+        if (this.addFormData.provinceId) {
+          lbsAmapRegion({ pid: this.addFormData.provinceId }).then(res => {
+            this.cityList = res.data
+            // 创建工单时获取ip地址定位赋值
+            if (!this.id && this.$IpAdd.city) {
+              var item2 = this.cityList.find(item => item.name === this.$IpAdd.city)
+              if (item2) {
+                this.addFormData.cityId = item2.id
+                this.addFormData.city = item2.name
+              }
+            }
+            if (this.addFormData.cityId) {
+              lbsAmapRegion({ pid: this.addFormData.cityId }).then(res => {
+                this.areaList = res.data
+              })
+            }
+            if (this.addFormData.areaId) {
+              lbsAmapRegion({ pid: this.addFormData.areaId }).then(res => {
+                this.streetList = res.data
+              })
+            }
+          })
+        }
+      })
+    },
+    delDataK(num) {
+      if (num <= 1) {
+        // 删除市
+        this.addFormData.cityId = ''
+        this.addFormData.city = ''
+        // 删除市选项
+        this.cityList = []
+      }
+      if (num <= 2) {
+        // 删除区
+        this.addFormData.areaId = ''
+        this.addFormData.area = ''
+        // 删除区选项
+        this.areaList = []
+      }
+      if (num <= 3) {
+        // 删除街道
+        this.addFormData.streetId = ''
+        this.addFormData.street = ''
+        // 删除街道选项
+        this.streetList = []
+      }
+      // 删除gps地址
+      this.addFormData.userAddress = ''
+    }
+  }
+}

+ 44 - 0
src/views/valueAddedService/orderSettleManag/mixins/examineInfo.js

@@ -0,0 +1,44 @@
+
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+export default {
+  data() {
+    return {
+
+    }
+  },
+  computed: {
+    examineInfo() {
+      return [
+        {
+          name: 'el-radio',
+          md: 24,
+          formItemAttributes: {
+            label: '审批结果',
+            prop: 'flag',
+            rules: [...required],
+          },
+          options: [{ label: "通过", value: "OK" }, { label: "失败", value: "FAIL" }],
+          attributes: { disabled: false, placeholder: '请选择' },
+        },
+        {
+          name: 'el-input',
+          md: 24,
+          attributes: {
+            disabled: false,
+            type: 'textarea',
+            rows: 3,
+            placeholder: '请输入'
+          },
+          formItemAttributes: {
+            label: '审批备注',
+            prop: 'examineRemark',
+            rules: []
+          }
+        }
+      ]
+    }
+  },
+  methods: {
+
+  }
+}

+ 223 - 0
src/views/valueAddedService/orderSettleManag/mixins/formItems.js

@@ -0,0 +1,223 @@
+import ImageUpload from '@/components/file-upload'
+export default {
+  components: { ImageUpload },
+  computed: {
+    formItems() {
+      return [{
+        md: 24,
+        isShow: true,
+        name: 'slot-component',
+        formItemAttributes: {
+          label: '',
+          prop: '',
+          'label-width': '0px'
+        },
+        render: (h, { props, onInput }) => {
+          var { formData } = props
+          return (
+            <div>
+              <el-descriptions border title="" column={4} colon={false} labelStyle={{ width: '8%' }} contentStyle={{ width: '17%' }}>
+                <el-descriptions-item label="所属商户">
+                  {formData.companyWechatName}
+                </el-descriptions-item>
+                <el-descriptions-item label="销售网点">
+                  {formData.websitName}
+                </el-descriptions-item>
+                <el-descriptions-item label="订单单号" >
+                  {formData.id}
+                </el-descriptions-item>
+                <el-descriptions-item label="师傅姓名" >
+                  {formData.workerName}
+                </el-descriptions-item>
+                <el-descriptions-item label="师傅联系电话">
+                  {formData.workerMobile}
+                </el-descriptions-item>
+                <el-descriptions-item label="师傅身份证号">
+                  {formData.workerIdcard}
+                </el-descriptions-item>
+                <el-descriptions-item label="客户姓名" >
+                  {formData.userName}
+                </el-descriptions-item>
+                <el-descriptions-item label="客户电话" >
+                  {formData.userMobile}
+                </el-descriptions-item>
+                <el-descriptions-item label="详细地址">
+                  {formData.userAddress}
+                </el-descriptions-item>
+                <el-descriptions-item label="内机条码">
+                  {formData.insideCode}
+                </el-descriptions-item>
+                <el-descriptions-item label="服务单号" >
+                  {formData.serviceNo}
+                </el-descriptions-item>
+                <el-descriptions-item label="发票价格" >
+                  {formData.invoiceAmount}
+                </el-descriptions-item>
+                <el-descriptions-item label="发票时间">
+                  {formData.invoiceTime}
+                </el-descriptions-item>
+                <el-descriptions-item label="服务截止时间">
+                  {formData.serviceEndTime}
+                </el-descriptions-item>
+                <el-descriptions-item label="创建人" >
+                  {formData.createBy}
+                </el-descriptions-item>
+                <el-descriptions-item label="创建时间" >
+                  {formData.createTime}
+                </el-descriptions-item>
+                <el-descriptions-item label="支付状态">
+                  {({ "EXPIRE": "过期", "CANCEL": "取消", "PAID": "已支付", "WAIT": "待支付", "REFUND": "已退款" })[formData.payStatus] || ""}
+                </el-descriptions-item>
+                <el-descriptions-item label="支付方式">
+                  {({ 1: "扫码支付", 2: "代客支付" })[formData.payType] || ""}
+                </el-descriptions-item>
+                <el-descriptions-item label="支付订单号" >
+                  {formData.payNo}
+                </el-descriptions-item>
+                <el-descriptions-item label="支付时间" >
+                  {formData.payTime}
+                </el-descriptions-item>
+                <el-descriptions-item label="微信流水号">
+                  {formData.transcationId}
+                </el-descriptions-item>
+                <el-descriptions-item label="师傅销售佣金">
+                  {formData.workerAmount}
+                </el-descriptions-item>
+                <el-descriptions-item label="结算人员" >
+                  {formData.updateBy}
+                </el-descriptions-item>
+                <el-descriptions-item label="操作时间" >
+                  {formData.updateTime}
+                </el-descriptions-item>
+              </el-descriptions>
+            </div>
+          )
+        }
+      }]
+    },
+    formItemsList() {
+      return [{
+        md: 24,
+        isShow: true,
+        name: 'slot-component',
+        formItemAttributes: {
+          label: '',
+          prop: '',
+          'label-width': '0px'
+        },
+        render: (h, { props, onInput }) => {
+          var { formData } = props
+          return (
+            <zj-table
+              columns={[{
+                columnAttributes: {
+                  label: '服务类型',
+                  prop: 'type'
+                },
+                render: (h, { row, column, index }) => {
+                  return <div style="padding: 0 10px">
+                    {({ 1: "延保", 2: "清洗" })[row.type] || ""}
+                  </div>
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '使用类型',
+                  prop: 'usedType'
+                },
+                render: (h, { row, column, index }) => {
+                  return <div style="padding: 0 10px">
+                    {({ COUNT: "使用次数", YEAR: "使用年限" })[row.usedType] || ""}
+                  </div>
+                }
+              }, {
+                columnAttributes: {
+                  label: '品牌',
+                  prop: 'brandName'
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '产品大类',
+                  prop: 'mainName'
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '服务内容',
+                  prop: 'content'
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '服务金额(元)',
+                  prop: 'amount'
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '使用限值',
+                  prop: 'limitNum'
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '总手续费',
+                  prop: 'commissionAmount'
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '师傅分成金额',
+                  prop: 'workerAmount'
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '网点分成金额',
+                  prop: 'websitAmount'
+                }
+              }]}
+              tableData={[{
+                ...(formData.increItem || {}),
+                ...(formData.incre || {}),
+                workerAmount: formData.workerAmount,
+                websitAmount: formData.websitAmount,
+                commissionAmount: formData.commissionAmount
+              }]}
+              tableAttributes={{
+                size: 'mini',
+                border: true,
+              }} />
+          )
+        }
+      }]
+    },
+    formItemsImgs() {
+      return [{
+        md: 24,
+        name: 'slot-component',
+        formItemAttributes: {
+          label: '',
+          prop: '',
+          'label-width': '0px'
+        },
+        render: (h, { props, onInput }) => {
+          var { formData } = props
+          return (
+            <ImageUpload
+              fileList={
+                [{ key: "insideCodeImg", name: "内机条码" }, { key: "machineImg", name: "机器铭牌图片" }, { key: "buyCertImg", name: "购机凭证图片" }].map((item) => ({ url: formData[item.key], name: item.name }))
+              }
+              limit={1000}
+              isEdit={false}
+              viewOnline={false}
+              download={false}
+              showName={true}
+            />
+          )
+        }
+      }]
+    },
+  },
+}

+ 151 - 0
src/views/valueAddedService/orderSettleManag/mixins/productInfo.js

@@ -0,0 +1,151 @@
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+import ImageUpload from '@/components/file-upload'
+export default {
+  data() {
+    return {
+
+    }
+  },
+  computed: {
+    productInfo() {
+      return [
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: false, placeholder: '请输入' },
+          formItemAttributes: {
+            label: '内积条码',
+            prop: 'insideCode',
+            rules: [...required]
+          }
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: false, placeholder: '请输入' },
+          formItemAttributes: {
+            label: '发片价格',
+            prop: 'invoiceAmount',
+            rules: [...required]
+          }
+        },
+        {
+          name: 'el-date-picker',
+          md: 6,
+          attributes: {
+            disabled: false,
+            style: { width: '100%' },
+            placeholder: '请选择',
+            type: 'date',
+            'value-format': 'yyyy-MM-dd HH:mm:ss',
+            // 'picker-options': {
+            //   disabledDate: time => {
+            //     return time.getTime() < (Date.now() - 86400000)
+            //   }
+            // }
+          },
+          formItemAttributes: {
+            label: '原保到期',
+            prop: 'insureTime',
+            rules: [...required]
+          },
+          events: {
+            change: (val) => {
+              if (val && this.addFormData.limitNum) {
+                // 初始日期
+                const initialDate = new Date(val);
+                // 加上三年
+                initialDate.setFullYear(initialDate.getFullYear() + (this.addFormData.limitNum || 0));
+                // 获取新的日期
+                this.addFormData.serviceEndTime = initialDate.toISOString().split('T')[0];
+              } else {
+                this.addFormData.serviceEndTime = ""
+              }
+            }
+          }
+        },
+        {
+          name: 'el-date-picker',
+          md: 6,
+          attributes: {
+            disabled: true,
+            style: { width: '100%' },
+            placeholder: '请选择',
+            type: 'date',
+            'value-format': 'yyyy-MM-dd HH:mm:ss',
+            // 'picker-options': {
+            //   disabledDate: time => {
+            //     return time.getTime() < (Date.now() - 86400000)
+            //   }
+            // }
+          },
+          formItemAttributes: {
+            label: '服务期限',
+            prop: 'serviceEndTime',
+            rules: [...required]
+          }
+        },
+        {
+          name: 'slot-component',
+          md: 3,
+          formItemAttributes: {
+            label: '',
+            'label-width': '0px',
+            prop: 'insideCodeImg',
+            rules: [...required],
+            errLabel: '内机条码'
+          },
+          render: (h, { props }) => {
+            return (
+              <div style="padding: 0 10px">
+                <ImageUpload fileList={this.addFormData.insideCodeImg} limit={1} isEdit={true} />
+                <div style="padding-left:20px">*内机条码</div>
+              </div>
+            )
+          }
+        },
+        {
+          name: 'slot-component',
+          md: 3,
+          formItemAttributes: {
+            label: '',
+            'label-width': '0px',
+            prop: 'machineImg',
+            rules: [...required],
+            errLabel: '机器铭牌'
+          },
+          render: (h, { props }) => {
+            return (
+              <div style="padding: 0 10px">
+                <ImageUpload fileList={this.addFormData.machineImg} limit={1} isEdit={true} />
+                <div style="padding-left:20px">*机器铭牌</div>
+              </div>
+            )
+          }
+        },
+        {
+          name: 'slot-component',
+          md: 3,
+          formItemAttributes: {
+            label: '',
+            'label-width': '0px',
+            prop: 'buyCertImg',
+            rules: [...required],
+            errLabel: '购机凭证'
+          },
+          render: (h, { props }) => {
+            return (
+              <div style="padding: 0 10px">
+                <ImageUpload fileList={this.addFormData.buyCertImg} limit={1} isEdit={true} />
+                <div style="padding-left:20px">*购机凭证</div>
+              </div>
+            )
+          }
+        },
+      ]
+    }
+  },
+  methods: {
+
+  }
+}

+ 238 - 0
src/views/valueAddedService/orderSettleManag/mixins/serviceInfo.js

@@ -0,0 +1,238 @@
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+import { increOrderSettleGetBrand, increOrderSettleGetCategoryList, increOrderSettleGetIncreItem, increOrderSettleGetWebsit } from "@/api/orderSettleManag.js"
+export default {
+  data() {
+    return {
+      brandList: [],
+      mainList: [],
+      increContentList: [],
+      websitList: []
+    }
+  },
+  computed: {
+    serviceInfo() {
+      return [
+        {
+          name: 'el-select',
+          md: 6,
+          attributes: { disabled: false, placeholder: '请输入' },
+          formItemAttributes: {
+            label: '服务类型',
+            prop: 'increType',
+            rules: [...required]
+          },
+          options: [{ label: "延保", value: 1 }],
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '请输入' },
+          formItemAttributes: {
+            label: '使用类型',
+            prop: 'shiyongleixing',
+            rules: [...required]
+          }
+        },
+        {
+          name: 'el-select',
+          md: 6,
+          options: this.brandList,
+          formItemAttributes: {
+            label: '产品品牌',
+            prop: 'brandId',
+            rules: [...required]
+          },
+          attributes: { disabled: false, clearable: true, filterable: true, placeholder: '请选择' },
+          events: {
+            change: (val) => {
+              this.mainList = []
+              this.increContentList = []
+              this.websitList = []
+              this.addFormData.brandName = ""
+              this.addFormData.mainId = ""
+              this.addFormData.mainName = ""
+              this.addFormData.mainImg = ""
+              this.addFormData.increContent = ""
+              this.addFormData.pgIncreId = ""
+              this.addFormData.limitNum = ""
+              this.addFormData.amount = ""
+              this.addFormData.pgIncreItemId = ""
+              this.addFormData.websitId = ""
+              this.addFormData.websitName = ""
+              if (val) {
+                this.addFormData.brandName = this.brandList.find(item => item.value === val)?.label
+                increOrderSettleGetCategoryList({ brand: this.addFormData.brandName }).then(res => {
+                  this.mainList = res.data.map(item => ({
+                    label: item.name,
+                    value: item.categoryId,
+                    data: item
+                  }))
+                })
+              }
+            }
+          }
+        },
+        {
+          name: 'el-select',
+          md: 6,
+          options: this.mainList,
+          formItemAttributes: {
+            label: '产品大类',
+            prop: 'mainId',
+            rules: [...required]
+          },
+          attributes: { disabled: false, clearable: true, filterable: true, placeholder: '请选择' },
+          events: {
+            change: (val) => {
+              this.increContentList = []
+              this.websitList = []
+              this.addFormData.mainName = ""
+              this.addFormData.mainImg = ""
+              this.addFormData.increContent = ""
+              this.addFormData.pgIncreId = ""
+              this.addFormData.limitNum = ""
+              this.addFormData.amount = ""
+              this.addFormData.pgIncreItemId = ""
+              this.addFormData.websitId = ""
+              this.addFormData.websitName = ""
+              if (val) {
+                this.addFormData.mainName = this.mainList.find(item => item.value === val)?.label
+                this.addFormData.mainImg = this.mainList.find(item => item.value === val)?.data?.imgUrl
+                increOrderSettleGetIncreItem({
+                  brand: this.addFormData.brandName,
+                  mainName: this.addFormData.mainName
+                }).then(res => {
+                  this.increContentList = res.data.map(item => ({
+                    label: item.content,
+                    value: item.increId,
+                    data: item
+                  }))
+                })
+              }
+            }
+          }
+        },
+        {
+          name: 'el-select',
+          md: 12,
+          formItemAttributes: {
+            label: '服务内容',
+            prop: 'pgIncreId',
+            rules: [...required],
+          },
+          options: this.increContentList,
+          attributes: { disabled: false, clearable: true, filterable: true, placeholder: '请选择' },
+          events: {
+            change: (val) => {
+              this.websitList = []
+              this.addFormData.limitNum = ""
+              this.addFormData.amount = ""
+              this.addFormData.pgIncreItemId = ""
+              this.addFormData.websitId = ""
+              this.addFormData.websitName = ""
+              this.addFormData.serviceEndTime = ""
+              this.addFormData.increContent = ""
+              if (val) {
+                var data = this.increContentList.find(item => item.value === val)
+                this.addFormData.increContent = data.data.content;
+                this.addFormData.limitNum = data.data.limitNum;
+                this.addFormData.amount = data.data.amount;
+                this.addFormData.pgIncreItemId = data.data.id;
+                if (this.addFormData.insureTime && this.addFormData.limitNum) {
+                  // 初始日期
+                  const initialDate = new Date(this.addFormData.insureTime);
+                  // 加上三年
+                  initialDate.setFullYear(initialDate.getFullYear() + (this.addFormData.limitNum || 0));
+                  // 获取新的日期
+                  this.addFormData.serviceEndTime = initialDate.toISOString().split('T')[0];
+                }
+                increOrderSettleGetWebsit({
+                  increId: val
+                }).then(res => {
+                  this.websitList = res.data.map(item => ({
+                    value: item.websitId,
+                    label: item.websitName,
+                  }))
+                })
+              }
+            }
+          }
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '请输入' },
+          formItemAttributes: {
+            label: '使用限值',
+            prop: 'limitNum',
+            rules: [...required]
+          },
+          events: {
+            change: (val) => {
+              if (this.addFormData.insureTime && val) {
+                // 初始日期
+                const initialDate = new Date(this.addFormData.insureTime);
+                // 加上三年
+                initialDate.setFullYear(initialDate.getFullYear() + (val || 0));
+                // 获取新的日期
+                this.addFormData.serviceEndTime = initialDate.toISOString().split('T')[0];
+              } else {
+                this.addFormData.serviceEndTime = ""
+              }
+            }
+          }
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: false, placeholder: '请输入', type: 'number' },
+          formItemAttributes: {
+            label: '服务金额',
+            prop: 'amount',
+            rules: [...required]
+          }
+        },
+        {
+          name: 'el-select',
+          md: 12,
+          formItemAttributes: {
+            label: '销售网点',
+            prop: 'websitId',
+            rules: [...required],
+          },
+          options: this.websitList,
+          attributes: { disabled: false, clearable: true, filterable: true, placeholder: '请选择' },
+          events: {
+            change: (val) => {
+              this.addFormData.websitName = ""
+              if (val) {
+                this.addFormData.websitName = this.websitList.find(item => item.value === val)?.label
+              }
+            }
+          }
+        },
+        {
+          name: 'el-radio',
+          md: 12,
+          formItemAttributes: {
+            label: '支付方式',
+            prop: 'payType',
+            rules: [...required],
+          },
+          options: [{ label: "扫码支付", value: 1 }, { label: "现金支付", value: 3 }],
+          attributes: { disabled: false, placeholder: '请选择' },
+        },
+      ]
+    }
+  },
+  methods: {
+    getincreOrderSettleGetBrand() {
+      increOrderSettleGetBrand().then(res => {
+        this.brandList = res.data.map(item => ({
+          label: item.brandName,
+          value: item.id
+        }))
+      })
+    }
+  }
+}

+ 264 - 0
src/views/valueAddedService/orderSettleManag/pages/collect.vue

@@ -0,0 +1,264 @@
+<template>
+  <template-page ref="pageRef" :get-list="getList" :exportList="exportList" :table-attributes="tableAttributes"
+    :table-events="tableEvents" :moreParameters="moreParameters" :column-parsing="columnParsing" :operation="operation()"
+    :operationColumnWidth="200" :optionsEvensGroup="optionsEvensGroup">
+    <div class="cartographer">
+      <el-dialog :title="formTypeName[formType]" width="100%" :modal="false" :visible.sync="formDialog"
+        :before-close="formCancel">
+        <zj-form-container v-if="formDialog" ref="formRef" :form-data="formData" :styleSwitch="false">
+          <zj-form-module title="基础信息" label-width="120px" :showPackUp="false" :form-data="formData"
+            :form-items="formItems">
+          </zj-form-module>
+          <zj-form-module title="订单信息" label-width="120px" :showPackUp="false" :form-data="formData"
+            :form-items="formItemsList">
+          </zj-form-module>
+          <zj-form-module title="附件图片" label-width="120px" :showPackUp="false" :form-data="formData"
+            :form-items="formItemsImgs">
+          </zj-form-module>
+        </zj-form-container>
+        <div slot="footer" v-if="formType" class="dialog-footer">
+          <el-button size="mini" @click="formCancel">取 消</el-button>
+          <el-button size="mini" @click="formConfirm" type="primary">确定</el-button>
+        </div>
+      </el-dialog>
+    </div>
+  </template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import { increOrderSettleList, increOrderSettleListExport, increOrderSettleDetail, increOrderSettleConfirm, increOrderSettleRefund } from "@/api/orderSettleManag.js"
+import operation_mixin from '@/components/template/operation_mixin.js'
+import formItems from "../mixins/formItems.js"
+export default {
+  props: {
+    storageType: {
+      type: String,
+      default: ""
+    }
+  },
+  components: { TemplatePage },
+  mixins: [import_mixin, operation_mixin, formItems],
+  data() {
+    return {
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: true,
+        selectable: this.selectable
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+      // 勾选选中数据
+      recordSelected: [],
+      formTypeName: ["查看", "结算"],
+      formType: -1,
+      formData: {
+        pgIncreItems: []
+      },
+      formDialog: false,
+    }
+  },
+  computed: {
+    // 事件组合
+    optionsEvensGroup() {
+      return [
+        [
+          [
+            this.optionsEvensAuth("bulkSettlemen", {
+              click: () => {
+                if (this.recordSelected.length === 0) {
+                  this.$message.warning('请勾选订单')
+                  return
+                }
+                increOrderSettleConfirm(this.recordSelected.map(item => item.id)).then(res => {
+                  this.$message({ type: 'success', message: `成功!` })
+                  this.$refs.pageRef.refreshList()
+                })
+              }
+            })
+          ],
+        ]
+      ]
+    },
+    // 更多参数
+    moreParameters() {
+      return [
+        {
+          name: '支付状态',
+          key: 'payStatus',
+          value: '',
+          conditions: [
+            {
+              label: "全部",
+              value: ""
+            }, {
+              label: "已支付",
+              value: "PAID"
+            }, {
+              label: "待支付",
+              value: "WAIT"
+            }, {
+              label: "已退款",
+              value: "REFUND"
+            }, {
+              label: "过期",
+              value: "EXPIRE"
+            }, {
+              label: "取消",
+              value: "CANCEL"
+            }]
+        },
+      ]
+    }
+  },
+  methods: {
+    selectable(row, index) {
+      return ["PAID"].includes(Object.entries(row.selectMapData.payStatus).find(([key, val]) => val == row.payStatus)?.[0]) &&
+        ["ING"].includes(Object.entries(row.selectMapData.settleStatus).find(([key, val]) => val == row.settleStatus)?.[0])
+    },
+    // 列表请求函数
+    getList(p, cb) {
+      var pam = JSON.parse(JSON.stringify(p))
+      try {
+        if (pam.payStatus) {
+          pam.params.push({ "param": "a.pay_status", "compare": "=", "value": pam.payStatus })
+        }
+        pam.params.push({ "param": "a.order_channel", "compare": "=", "value": "ONLINE" })
+        cb && cb(pam)
+        return increOrderSettleList(pam)
+      } catch (err) {
+      }
+    },
+    // 列表导出函数
+    exportList: increOrderSettleListExport,
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      if (item.jname === 'residuNum') {
+        defaultData.render = (h, { row, index, column }) => {
+          return (
+            <div style="padding:0 6px;cursor: pointer;">
+              {row["increType"] != 1 ? row["residuNum"] : ""}
+            </div>
+          )
+        }
+      }
+      if (item.jname === 'serviceEndTime') {
+        defaultData.render = (h, { row, index, column }) => {
+          return (
+            <div style="padding:0 6px;cursor: pointer;">
+              {row[column.columnAttributes.prop] ? row[column.columnAttributes.prop].split(" ")[0] : ""}
+            </div>
+          )
+        }
+      }
+      return defaultData
+    },
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = data
+    },
+    // 表格操作列
+    operation() {
+      return this.operationBtn({
+        detail: {
+          btnType: 'text',
+          click: ({ row, index, column }) => {
+            this.formType = 0
+            this.getDetail(row.id)
+          }
+        },
+        orderDetail: {
+          btnType: 'text',
+          conditions: ({ row, index, column }) => {
+            return ["PAID", "REFUND"].includes(row.payStatus)
+          },
+          click: ({ row, index, column }) => {
+            this.$router.push({
+              name: "workOrderPool",
+              query: {
+                pgIncreItemId: row.id,
+              }
+            })
+          }
+        },
+        refund: {
+          btnType: 'text',
+          prompt: '是否确定退款?',
+          conditions: ({ row, index, column }) => {
+            return ["PAID"].includes(row.payStatus) && ["ING"].includes(row.settleStatus) && (() => {
+              var currentDate = new Date(row.payTime);
+              currentDate.setDate(currentDate.getDate() + 7);
+              currentDate.setHours(23);
+              currentDate.setMinutes(59);
+              currentDate.setSeconds(59);
+              return currentDate > new Date()
+            })()
+          },
+          click: ({ row, index, column }) => {
+            increOrderSettleRefund({ id: row.id }).then(res => {
+              this.$message({ type: 'success', message: `退款成功!` })
+              this.$refs.pageRef.refreshList()
+            })
+          }
+        },
+        settlement: {
+          btnType: 'text',
+          prompt: '是否确定结算?',
+          conditions: ({ row, index, column }) => {
+            return ["PAID"].includes(row.payStatus) && ["ING"].includes(row.settleStatus)
+          },
+          click: ({ row, index, column }) => {
+            this.formType = 1
+            this.getDetail(row.id)
+          }
+        },
+      })
+    },
+    getDetail(id) {
+      increOrderSettleDetail({ id }).then(res => {
+        Object.assign(this.formData, res.data)
+        this.openForm()
+      })
+    },
+    openForm() {
+      this.formDialog = true
+    },
+    // 关闭弹窗
+    formCancel() {
+      this.$refs.formRef.$refs.inlineForm.clearValidate()
+      this.$data.formData = this.$options.data().formData
+      this.formDialog = false
+    },
+    formConfirm() {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          increOrderSettleConfirm([this.formData.id]).then(res => {
+            this.$message({ type: 'success', message: `操作成功!` })
+            this.formCancel()
+            this.$refs.pageRef.refreshList()
+          })
+        }
+      })
+    },
+  }
+}
+
+
+
+
+
+</script>
+
+<style lang="scss">
+.redbordererr {
+  .el-form-item {
+    margin: 0 !important;
+    overflow: hidden;
+  }
+}
+</style>
+

+ 388 - 0
src/views/valueAddedService/orderSettleManag/pages/offline.vue

@@ -0,0 +1,388 @@
+<template>
+  <template-page ref="pageRef" :get-list="getList" :exportList="exportList" :table-attributes="tableAttributes"
+    :table-events="tableEvents" :moreParameters="moreParameters" :column-parsing="columnParsing" :operation="operation()"
+    :operationColumnWidth="200" :optionsEvensGroup="optionsEvensGroup">
+    <div class="cartographer">
+      <el-dialog :title="formTypeName[formType]" width="100%" :modal="false" :visible.sync="formDialog"
+        :before-close="formCancel">
+        <zj-form-container v-if="formDialog" ref="formRef" :form-data="formData" :styleSwitch="false">
+          <zj-form-module title="基础信息" label-width="120px" :showPackUp="false" :form-data="formData"
+            :form-items="formItems">
+          </zj-form-module>
+          <zj-form-module title="订单信息" label-width="120px" :showPackUp="false" :form-data="formData"
+            :form-items="formItemsList">
+          </zj-form-module>
+          <zj-form-module title="附件图片" label-width="120px" :showPackUp="false" :form-data="formData"
+            :form-items="formItemsImgs">
+          </zj-form-module>
+          <zj-form-module v-if="formType == 1" title="审核信息" label-width="120px" :showPackUp="false" :form-data="formData"
+            :form-items="examineInfo">
+          </zj-form-module>
+        </zj-form-container>
+        <div v-if="formType == 1 && formData.flag == 'WAIT'" slot="footer" class="dialog-footer">
+          <el-button size="mini" type="primary" @click="shenhexinxi">审核</el-button>
+        </div>
+        <div v-if="formType == 0 && formData.payStatus == 'WAIT' && formData.payType == 1" slot="footer"
+          class="dialog-footer">
+          <el-button size="mini" type="primary" @click="() => { wxPay(formData.id) }">扫码支付</el-button>
+        </div>
+      </el-dialog>
+    </div>
+    <div class="cartographer">
+      <el-dialog title="新增" width="100%" :modal="false" :visible.sync="addFormDialog" :before-close="addFormCancel">
+        <zj-form-container v-if="addFormDialog" ref="addFormRef" :form-data="addFormData">
+          <zj-form-module title="客户信息" label-width="80px" :form-data="addFormData" :form-items="basicInfo">
+          </zj-form-module>
+          <zj-form-module title="服务信息" label-width="80px" :form-data="addFormData" :form-items="serviceInfo">
+          </zj-form-module>
+          <zj-form-module title="产品信息" label-width="80px" :form-data="addFormData" :form-items="productInfo">
+          </zj-form-module>
+        </zj-form-container>
+        <div slot="footer" class="dialog-footer">
+          <el-button size="mini" type="primary" @click="formConfirm">提交</el-button>
+        </div>
+      </el-dialog>
+    </div>
+    <el-dialog title="微信支付" :visible.sync="isPay" width="50%" :close-on-click-modal="false" :modal-append-to-body="false"
+      @close="codeUrl = ''">
+      <h3 style="text-align: center;">扫二维码支付</h3>
+      <div ref="payQRCode" style="display: flex; justify-content: center;" />
+      <div style="color: #EA8000;text-align: center;margin-top: 20px;">注:支付成功后,方可操作确认提货!</div>
+      <div style="display: flex;justify-content: flex-end;margin-top: 30px;">
+        <el-button size="mini" type="text" @click="codeUrl = ''">取消</el-button>
+      </div>
+    </el-dialog>
+  </template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import { increOrderSettleExamine, increOrderSettleGetBrand, increOrderSettleGeneratePayCode, increOrderSettleList, increOrderSettleListExport, increOrderSettleAdd, increOrderSettleDetail, increOrderSettleConfirm, increOrderSettleRefund } from "@/api/orderSettleManag.js"
+import operation_mixin from '@/components/template/operation_mixin.js'
+import formItems from "../mixins/formItems.js"
+import basicInfo from "../mixins/basicInfo.js"
+import serviceInfo from "../mixins/serviceInfo.js"
+import productInfo from "../mixins/productInfo.js"
+import examineInfo from "../mixins/examineInfo.js"
+import QRCode from "qrcodejs2";
+export default {
+  props: {
+    storageType: {
+      type: String,
+      default: ""
+    }
+  },
+  components: { TemplatePage },
+  mixins: [import_mixin, operation_mixin, formItems, basicInfo, serviceInfo, productInfo, examineInfo],
+  data() {
+    return {
+      isPay: false,
+      codeUrl: "",
+      // 表格属性
+      tableAttributes: {
+      },
+      // 表格事件
+      tableEvents: {
+      },
+      // 勾选选中数据
+      recordSelected: [],
+      formTypeName: ["查看", "审批"],
+      formType: -1,
+      formData: {
+        flag: "",
+        examineRemark: "",
+        pgIncreItems: []
+      },
+      formDialog: false,
+      addFormDialog: false,
+      addFormData: {
+        shiyongleixing: "按使用年限",
+        "amount": "",
+        "brandId": "",
+        "brandName": "",
+        "buyCertImg": [],
+        "commissionAmount": "",
+        "companyWechatId": "",
+        "companyWechatName": "",
+        "createBy": "",
+        "createTime": "",
+        "examineBy": "",
+        "examineRemark": "",
+        "examineTime": "",
+        "flag": "",
+        "id": "",
+        "increContent": "",
+        "increType": "",
+        "insideCode": "",
+        "insideCodeImg": [],
+        "insureTime": "",
+        "invoiceAmount": "",
+        "invoiceTime": "",
+        "limitNum": "",
+        "machineImg": [],
+        "mainId": "",
+        "mainImg": "",
+        "mainName": "",
+        "orderChannel": "",
+        "payNo": "",
+        "payStatus": "",
+        "payTime": "",
+        "payType": "",
+        "pgIncreId": "",
+        "pgIncreItemId": "",
+        "refundNo": "",
+        "refundTime": "",
+        "remark": "",
+        "residuNum": "",
+        "serviceEndTime": "",
+        "serviceNo": "",
+        "settleRemark": "",
+        "settleStatus": "",
+        "transcationId": "",
+        "updateBy": "",
+        "updateTime": "",
+        "userAddress": "",
+        "userAddressId": "",
+        "userMobile": "",
+        "userName": "",
+        "websitAmount": "",
+        "websitId": "",
+        "websitName": "",
+        "workerAmount": "",
+        "workerId": "",
+        "workerIdcard": "",
+        "workerMobile": "",
+        "workerName": "",
+        "workerOpenId": ""
+      },
+    }
+  },
+  computed: {
+    // 事件组合
+    optionsEvensGroup() {
+      return [
+        [
+          [
+            this.optionsEvensAuth("add", {
+              click: () => {
+                this.addFormOpen()
+              }
+            })
+          ],
+        ]
+      ]
+    },
+    // 更多参数
+    moreParameters() {
+      return [
+        {
+          name: '审批状态',
+          key: 'flag',
+          value: '',
+          conditions: [
+            {
+              label: "全部",
+              value: ""
+            }, {
+              label: "待审核",
+              value: "WAIT"
+            }, {
+              label: "通过",
+              value: "OK"
+            }, {
+              label: "失败",
+              value: "FAIL"
+            }]
+        },
+      ]
+    },
+  },
+  watch: {
+    codeUrl(newVal) {
+      this.isPay = !!newVal
+      if (!this.isPay) {
+        if (this.wxpayTimeId) {
+          clearTimeout(this.wxpayTimeId)
+        }
+        this.formCancel()
+        this.addFormCancel()
+        this.$refs?.pageRef?.refreshList()
+      }
+    }
+  },
+  methods: {
+    wxPay(id) {
+      increOrderSettleGeneratePayCode({ id }).then(res => {
+        this.codeUrl = res.data.codeUrl
+        this.$nextTick(() => {
+          new QRCode(this.$refs.payQRCode, {
+            text: res.data.codeUrl,
+            width: 200,
+            height: 200,
+            colorDark: "#333333", // 二维码颜色
+            colorLight: "#ffffff", // 二维码背景色
+            correctLevel: QRCode.CorrectLevel.L // 容错率,L/M/H
+          });
+          this.wxpaygetDetail(id)
+        });
+      })
+    },
+    wxpaygetDetail(id) {
+      if (this.wxpayTimeId) {
+        clearTimeout(this.wxpayTimeId)
+      }
+      this.wxpayTimeId = setTimeout(() => {
+        increOrderSettleDetail({ id }).then(res => {
+          if (res.data.payStatus == "PAID" && res.data.payType == 1) {
+            this.codeUrl = ""
+            this.addFormCancel()
+          } else {
+            this.wxpaygetDetail(id)
+          }
+        })
+      }, 1000)
+    },
+    // 列表请求函数
+    getList(p, cb) {
+      var pam = JSON.parse(JSON.stringify(p))
+      try {
+        if (pam.flag) {
+          pam.params.push({ "param": "a.flag", "compare": "=", "value": pam.flag })
+        }
+        pam.params.push({ "param": "a.order_channel", "compare": "=", "value": "SELF" })
+        cb && cb(pam)
+        return increOrderSettleList(pam)
+      } catch (err) {
+      }
+    },
+    // 列表导出函数
+    exportList: increOrderSettleListExport,
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      if (item.jname === 'residuNum') {
+        defaultData.render = (h, { row, index, column }) => {
+          return (
+            <div style="padding:0 6px;cursor: pointer;">
+              {row["increType"] != 1 ? row["residuNum"] : ""}
+            </div>
+          )
+        }
+      }
+      if (item.jname === 'serviceEndTime') {
+        defaultData.render = (h, { row, index, column }) => {
+          return (
+            <div style="padding:0 6px;cursor: pointer;">
+              {row[column.columnAttributes.prop] ? row[column.columnAttributes.prop].split(" ")[0] : ""}
+            </div>
+          )
+        }
+      }
+      return defaultData
+    },
+    // 表格操作列
+    operation() {
+      return this.operationBtn({
+        detail: {
+          btnType: 'text',
+          click: ({ row, index, column }) => {
+            this.formType = 0
+            this.getDetail(row.id)
+          }
+        },
+        orderDetail: {
+          btnType: 'text',
+          conditions: ({ row, index, column }) => {
+            return ["PAID", "REFUND"].includes(row.payStatus)
+          },
+          click: ({ row, index, column }) => {
+            this.$router.push({
+              name: "workOrderPool",
+              query: {
+                pgIncreItemId: row.id,
+              }
+            })
+          }
+        },
+        examine: {
+          btnType: 'text',
+          conditions: ({ row, index, column }) => {
+            return row.flag == "WAIT"
+          },
+          click: ({ row, index, column }) => {
+            this.formType = 1
+            this.getDetail(row.id)
+          }
+        },
+      })
+    },
+    getDetail(id) {
+      increOrderSettleDetail({ id }).then(res => {
+        Object.assign(this.formData, res.data)
+        this.openForm()
+      })
+    },
+    openForm() {
+      this.formDialog = true
+    },
+    // 关闭弹窗
+    formCancel() {
+      this.$refs?.formRef?.$refs?.inlineForm?.clearValidate()
+      this.$data.formData = this.$options.data().formData
+      this.formDialog = false
+    },
+    openAddForm() {
+      this.formDialog = true
+    },
+    shenhexinxi() {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          increOrderSettleExamine(this.formData).then(res => {
+            this.$message({ type: 'success', message: `审核完成!` })
+            this.formCancel()
+            this.$refs?.pageRef?.refreshList()
+          })
+        }
+      })
+    },
+    addFormCancel() {
+      this.$refs?.addFormRef?.$refs?.inlineForm?.clearValidate()
+      this.$data.addFormData = this.$options.data().addFormData
+      this.addFormDialog = false
+    },
+    addFormOpen() {
+      this.getincreOrderSettleGetBrand()
+      this.addFormDialog = true
+    },
+    formConfirm() {
+      this.$refs.addFormRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          increOrderSettleAdd({
+            ...this.addFormData,
+            "serviceEndTime": this.addFormData.serviceEndTime + " 23:59:59",
+            "buyCertImg": this.addFormData.buyCertImg.map(item => item.url).join(","),
+            "insideCodeImg": this.addFormData.insideCodeImg.map(item => item.url).join(","),
+            "machineImg": this.addFormData.machineImg.map(item => item.url).join(","),
+          }).then(res => {
+            this.$message({ type: 'success', message: `新增成功!` })
+            if (res.data.payStatus == "WAIT" && res.data.payType == 1) {
+              this.wxPay(res.data.id)
+            } else {
+              this.addFormCancel()
+            }
+          })
+        }
+      })
+    },
+  }
+}
+</script>
+
+<style lang="scss">
+.redbordererr {
+  .el-form-item {
+    margin: 0 !important;
+    overflow: hidden;
+  }
+}
+</style>

+ 2 - 0
src/views/valueAddedService/valueAddedConfig/index.vue

@@ -189,6 +189,7 @@ export default {
             return this.isEditIndex == index ? <div class="redbordererr">
               <el-form-item label="" label-width="0px" prop={`pgIncreItems.${index}.${column.columnAttributes.prop}`} rules={required}>
                 <el-input
+                  type="number"
                   value={row[column.columnAttributes.prop]}
                   onInput={(val) => {
                     row[column.columnAttributes.prop] = val
@@ -212,6 +213,7 @@ export default {
             return this.isEditIndex == index ? <div class="redbordererr">
               <el-form-item label="" label-width="0px" prop={`pgIncreItems.${index}.${column.columnAttributes.prop}`} rules={required}>
                 <el-input
+                  type="number"
                   value={row[column.columnAttributes.prop]}
                   onInput={(val) => {
                     row[column.columnAttributes.prop] = val && row.amount && Number(val) > Number(row.amount) ? row.amount : val

+ 1162 - 0
src/views/workOrder/completedToBeSettled/index.vue

@@ -0,0 +1,1162 @@
+<template>
+	<template-page ref="pageRef" :getList="getList" :optionsEvensGroup="optionsEvensGroup" :columnParsing="columnParsing"
+		:tableAttributes="tableAttributes" :tableEvents="tableEvents" :moreParameters="moreParameters"
+		:screeningAnalysis="screeningAnalysis" :filterMethod="filterMethod" :replaceOrNotMap="true">
+	</template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import { listPageV2 as listPageV3 } from "@/api/workOrder/settlementStandardInstall";
+import { listPageV2 as listPageV2Repair } from "@/api/workOrder/settlementStandardRepair";
+import { orderBaseList2, orderBaseStatusCount2, orderBaseSettleNormDetail2, settleNormInstallQuery, orderBaseSettleNormConfirm, settleNormOtherQuery, orderBaseSettleNormReset } from "@/api/workOrderPool.js"
+import { listPageV2 } from "@/api/workOrder/orderType";
+import ywgdjs from "@/assets/ywgdjs.png"
+import yjs from "@/assets/yjs.png"
+import { required } from '@/components/template/rules_verify.js'
+export default {
+	components: {
+		TemplatePage,
+	},
+	mixins: [import_mixin, operation_mixin],
+	data() {
+		return {
+			// 表格属性
+			tableAttributes: {
+				columnExpand: this.columnExpand
+			},
+			// 表格事件
+			tableEvents: {
+				'expand-change': this.expandChange
+			},
+			orderTypeList: [],
+			orderStatusList: [],
+		}
+	},
+	computed: {
+		moreParameters() {
+			return [
+				{
+					name: '工单类型',
+					key: 'orderSmallType',
+					value: '',
+					conditions: [{
+						label: "全部",
+						value: ""
+					}, ...this.orderTypeList]
+				},
+				{
+					name: '工单状态',
+					key: 'orderStatus',
+					value: this.$route.query.orderStatus || "",
+					conditions: [{
+						label: "全部",
+						value: ""
+					}, ...this.orderStatusList]
+				}
+			]
+		},
+		// 用户信息
+		userInfo() {
+			return JSON.parse(localStorage.getItem('greemall_user'))
+		},
+		// 事件组合
+		optionsEvensGroup() {
+			return []
+		}
+	},
+	created() {
+		// 获取工单类型
+		listPageV2({ "pageNum": 1, "pageSize": -1, "params": [{ "param": "a.status", "compare": "=", "value": "true" }] }).then(res => {
+			this.orderTypeList = res.data.records.map(item => ({
+				value: item.id,
+				label: item.orderSmallTypeText
+			}))
+		})
+	},
+	methods: {
+
+		screeningAnalysis(jname, val) {
+			if (jname == 'orderFlags') {
+				return (val || []).map(item => item.tagName).join(',')
+			} else {
+				return val
+			}
+		},
+
+		filterMethod(value, row, column) {
+			if (column['property'] == 'orderFlags') {
+				return (row[column['property']] || []).map(item => item.tagName).join(',') === value
+			}
+			return row[column['property']] === value
+		},
+
+		// 获取统计
+		getOrderBaseStatusCount(...p) {
+			orderBaseStatusCount2(...p).then(res => {
+				this.orderStatusList = [{
+					label: "已完工待结算",
+					value: "YWG"
+				}, {
+					label: "已结算",
+					value: "YJS"
+				}].map(item => {
+					var data = res.data.find(val => val.orderStatus == item.value)
+					if (data) {
+						item.label = `${item.label}(${data.total})`
+					}
+					return item
+				})
+			})
+		},
+
+		// 列表请求函数
+		getList(p, cb) {
+			var pam = JSON.parse(JSON.stringify(p))
+			try {
+				if (pam.orderStatus) {
+					pam.params.push({ "param": "a.order_status", "compare": "=", "value": pam.orderStatus })
+				}
+				if (pam.orderSmallType) {
+					pam.params.push({ "param": "a.order_small_type", "compare": "=", "value": pam.orderSmallType })
+				}
+				cb && cb(pam)
+				return orderBaseList2(pam)
+			} catch (err) {
+			} finally {
+				this.$nextTick(() => {
+					this.getOrderBaseStatusCount({ orderSmallType: pam.orderSmallType || "" })
+				})
+			}
+		},
+
+		// 表格列解析渲染数据更改
+		columnParsing(item, defaultData) {
+			if (item.jname === 'orderFlags') {
+				defaultData.render = (h, { row, index, column }) => {
+					return (
+						<div style="padding:0 6px;display:flex;align-items:center;">
+							{(row[column.columnAttributes.prop] || []).map(item => {
+								if (item.tagName == "已完工") {
+									return (
+										<img src={ywgdjs} style="width:22px;height:22px;" />
+									)
+								} else if (item.tagName == "已结算") {
+									return (
+										<img src={yjs} style="width:22px;height:22px;" />
+									)
+								} else {
+									return (
+										<div style="display: inline-block;border:1px solid #409EFF; color:#409EFF;padding:0 2px;border-radius: 4px;margin:2px 2px 0 0;">
+											{item.tagName}
+										</div>
+									)
+								}
+							})}
+						</div>
+					)
+				}
+			}
+			if (item.jname === 'appointmentTime') {
+				defaultData.render = (h, { row, index, column }) => {
+					return (
+						<div style="padding:0 6px;cursor: pointer;">
+							{row[column.columnAttributes.prop] ? row[column.columnAttributes.prop].split(" ")[0] : ""}
+						</div>
+					)
+				}
+			}
+			return defaultData
+		},
+
+		expandChange(row) {
+			if (!row.expandData) {
+				orderBaseSettleNormDetail2({
+					id: row.id,
+					orderProductId: row.pgOrderProductId
+				}).then(res => {
+					this.zhuzhuang(res.data).then(res => {
+						row.expandData = res
+					})
+				})
+			}
+		},
+
+		columnExpand(h, { row, column, index }) {
+			var expandDataForm = row.expandData
+			var rowZhu = row
+			return expandDataForm ? (<div style="box-sizing: border-box;padding: 10px 10px 0px 50px;">
+				<zj-form-container form-data={expandDataForm}
+					formAttributes={{ 'label-position': 'top' }}
+					styleSwitch={false}>
+					<zj-form-module title="费用结算" showHade={false} form-data={expandDataForm}
+						form-items={[{
+							md: 24,
+							name: 'slot-component',
+							formItemAttributes: {
+								label: '费用结算',
+								prop: 'normList',
+							},
+							render: (h, { props, onInput }) => {
+								var { formData } = props
+								var columns = [{
+									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={expandDataForm.normListBj || !row.bianji}
+													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(expandDataForm.classifyList, "orderChannelId", "orderChannelText").find(item => item.value == val)
+															row.channelText = data.label
+														} else {
+															row.channelText = ""
+														}
+													}}
+													placeholder="请选择">
+													{this.classifyListChuLi(expandDataForm.classifyList, "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={expandDataForm.normListBj || !row.bianji}
+													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(expandDataForm.classifyList, "parentCategoryId", "parentCategoryName", (item) => item.orderChannelId == row.channelId).find(item => item.value == val)
+															row.parentCategoryName = data.label
+														} else {
+															row.parentCategoryName = ""
+														}
+													}}
+													placeholder="请选择">
+													{this.classifyListChuLi(expandDataForm.classifyList, "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={expandDataForm.normListBj || !row.bianji}
+													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(expandDataForm.classifyList, "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(expandDataForm.classifyList, "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
+									}
+								},
+								...(() => {
+									if (expandDataForm.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={expandDataForm.normListBj || !row.bianji}
+																value={row[column.columnAttributes.prop]}
+																onInput={(val) => { row[column.columnAttributes.prop] = val }}
+																onChange={(val) => {
+																	if (val) {
+																		var data = this.getflList(expandDataForm.gonglv, row).find(item => item.label == val)
+																		row.normAmount = data.normAmount
+																		row.settleNormId = data.id
+																	} else {
+																		row.normAmount = ""
+																		row.settleNormId = ""
+																	}
+																}}
+																placeholder="请选择">
+																{this.getflList(expandDataForm.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',
+													width: "160px"
+												},
+											},
+											{
+												columnAttributes: {
+													label: '结算数量',
+													prop: 'settleNum',
+													width: "160px"
+												},
+												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={expandDataForm.normListBj || !row.bianji}
+																value={row[column.columnAttributes.prop]}
+																onInput={(val) => { row[column.columnAttributes.prop] = val }}
+																placeholder="请输入内容"
+															>
+															</el-input>
+														</el-form-item>
+													</div> : null
+												}
+											},
+											{
+												columnAttributes: {
+													label: '结算金额(元)',
+													prop: 'settleAmount',
+													width: "160px"
+												},
+												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 (expandDataForm.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={expandDataForm.normListBj || !row.bianji}
+																value={row[column.columnAttributes.prop]}
+																onInput={(val) => { row[column.columnAttributes.prop] = val }}
+																onChange={(val) => {
+																	if (val) {
+																		var data = this.getflList(expandDataForm.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(expandDataForm.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={expandDataForm.normListBj || !row.bianji}
+																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={expandDataForm.normListBj || !row.bianji}
+																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',
+													width: "160px"
+												},
+												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={expandDataForm.normListBj || !row.bianji}
+																value={row[column.columnAttributes.prop]}
+																onInput={(val) => { row[column.columnAttributes.prop] = val }}
+																placeholder="请输入内容"
+															>
+															</el-input>
+														</el-form-item>
+													</div> : null
+												}
+											},
+											{
+												columnAttributes: {
+													label: '结算金额(元)',
+													prop: 'settleAmount',
+													width: "160px"
+												},
+												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',
+										width: "200px"
+									},
+									render: (h, { row, column, index }) => {
+										return this.panfuan(row) ? <div class="redbordererr">
+											<el-form-item label="" label-width="0px">
+												<el-input
+													disabled={expandDataForm.normListBj || !row.bianji}
+													value={row[column.columnAttributes.prop]}
+													onInput={(val) => { row[column.columnAttributes.prop] = val }}
+													placeholder="请输入内容"
+												>
+												</el-input>
+											</el-form-item>
+										</div> : null
+									}
+								},
+								{
+									columnAttributes: {
+										label: '工程师名称',
+										prop: 'workerName',
+										width: "140px"
+									},
+									render: (h, { row, column, index }) => {
+										return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
+											{expandDataForm?.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;">
+											{expandDataForm?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
+										</div>
+									}
+								},
+								{
+									columnAttributes: {
+										label: '结算费用',
+										prop: 'settleAmount',
+										width: "140px"
+									},
+									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={!expandDataForm.normList[row.pfuqinid].bianji || expandDataForm?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.["poolStatus"] == "YES"}
+													value={expandDataForm?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
+													onInput={(val) => {
+														expandDataForm.normList[row.pfuqinid].workerList[row.zijideid][column.columnAttributes.prop] = val
+													}}
+													placeholder="请输入内容"
+												>
+												</el-input>
+											</el-form-item>
+										</div>
+									}
+								}, {
+									columnAttributes: {
+										label: '确认人',
+										prop: 'confirmBy',
+										width: "100px"
+									},
+									render: (h, { row, column, index }) => {
+										return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
+											{expandDataForm?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
+										</div>
+									}
+								},
+								{
+									columnAttributes: {
+										label: '确认时间',
+										prop: 'confirmTime',
+										width: "140px"
+									},
+									render: (h, { row, column, index }) => {
+										return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
+											{expandDataForm?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
+										</div>
+									}
+								},
+								{
+									columnAttributes: {
+										label: '汇总状态',
+										prop: 'poolStatus',
+										width: "100px"
+									},
+									render: (h, { row, column, index }) => {
+										return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
+											{({ "NO": "未汇总", "YES": "已汇总" })[expandDataForm?.normList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]]}
+										</div>
+									}
+								}, {
+									columnAttributes: {
+										label: '操作',
+										prop: '',
+										fixed: 'right',
+										width: "120px"
+									},
+									render: (h, { row, column, index }) => {
+										return expandDataForm.settleStatus == 'YWG' || (expandDataForm.settleStatus == 'YJS' && expandDataForm?.normList[row.pfuqinid]?.workerList?.find(item => item.poolStatus == "NO")) ? (<div class="redbordererr redbordererranniuright" style="padding:0 6px;">
+											{expandDataForm.normList[row.pfuqinid].bianji ? <el-button type="text" onClick={
+												() => {
+													var yjsje = [0, 0, 0, expandDataForm?.normList[row.pfuqinid]?.workerList?.filter(item => item.poolStatus == "YES").map(item => item.settleAmount)].reduce(function (prev, curr, idx, arr) {
+														return prev + curr;
+													})
+													var nou = expandDataForm?.normList[row.pfuqinid]?.workerList?.filter(item => item.poolStatus == "NO")
+													var qian = ((((Number(expandDataForm?.normList[row.pfuqinid]["settleAmount"]) - yjsje) / nou.length) * 100) / 100).toFixed(2)
+													var rongyu = ((Number(expandDataForm?.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}
+											{expandDataForm.normList[row.pfuqinid].bianji ? <el-button type="text" onClick={
+												() => {
+													this.itemOrderBaseSettleNormReset(rowZhu, "normList", () => {
+														expandDataForm.normList[row.pfuqinid].bianji = false
+													})
+												}
+											}>确定</el-button> : null}
+											{!expandDataForm.normList[row.pfuqinid].bianji ? <el-button type="text" onClick={
+												() => {
+													expandDataForm.normList[row.pfuqinid].bianji = true
+												}
+											}>修改</el-button> : null}
+											{!expandDataForm.showOtherNormList ? <el-button type="text" onClick={
+												() => {
+													expandDataForm.showOtherNormList = true
+												}
+											}>添加其他费用</el-button> : null}
+										</div>) : null
+									}
+								}]
+								return (
+									<zj-table
+										columns={columns}
+										table-data={formData.normList}
+										tableAttributes={{
+											'span-method': ({ row, column, rowIndex, columnIndex }) => {
+												if (columnIndex === columns.length - 1) {
+													if (row.zijideid == 0) {
+														return {
+															rowspan: formData.normList[row.pfuqinid].workerList?.length,
+															colspan: 1
+														};
+													} else {
+														return {
+															rowspan: 0,
+															colspan: 0
+														};
+													}
+												}
+											}
+										}}
+									/>
+								)
+							}
+						},
+						{
+							md: 24,
+							isShow: expandDataForm.showOtherNormList,
+							name: 'slot-component',
+							formItemAttributes: {
+								label: '其他费用结算',
+								prop: 'otherNormList',
+							},
+							render: (h, { props, onInput }) => {
+								var { formData } = props
+								var columns = [{
+									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={expandDataForm.otherNormListBj || !row.bianji}
+													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.classifyListChuLi(expandDataForm.otherList, "orderChannelId", "orderChannelText").find(item => item.value == val)
+															row.channelText = data.label
+														} else {
+															row.channelText = ""
+														}
+													}}
+													placeholder="请选择">
+													{this.classifyListChuLi(expandDataForm.otherList, "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={expandDataForm.otherNormListBj || !row.bianji}
+													value={row[column.columnAttributes.prop]}
+													onInput={(val) => { row[column.columnAttributes.prop] = val }}
+													onChange={(val) => {
+														row.label = ""
+														row.normAmount = ""
+														row.settleNormId = ""
+														row.settleNum = ""
+													}}
+													placeholder="请选择">
+													{this.classifyListChuLi(expandDataForm.otherList, "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={expandDataForm.otherNormListBj || !row.bianji}
+													value={row[column.columnAttributes.prop]}
+													onInput={(val) => { row[column.columnAttributes.prop] = val }}
+													onChange={(val) => {
+														row.settleNum = ""
+														if (val) {
+															var data = this.classifyListChuLi(expandDataForm.otherList, "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.classifyListChuLi(expandDataForm.otherList, "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
+									}
+								},
+								{
+									columnAttributes: {
+										label: '单价(元/套)',
+										prop: 'normAmount',
+										width: "160px"
+									},
+								},
+								{
+									columnAttributes: {
+										label: '数量',
+										prop: 'settleNum',
+										width: "160px"
+									},
+									render: (h, { row, column, index }) => {
+										return this.panfuan(row) ? <div class="redbordererr">
+											<el-form-item label="" label-width="0px">
+												<el-input
+													type="number"
+													disabled={expandDataForm.otherNormListBj || !row.bianji}
+													value={row[column.columnAttributes.prop]}
+													onInput={(val) => { row[column.columnAttributes.prop] = val }}
+													placeholder="请输入内容"
+												>
+												</el-input>
+											</el-form-item>
+										</div> : null
+									}
+								},
+								{
+									columnAttributes: {
+										label: '结算金额(元)',
+										prop: 'settleAmount',
+										width: "160px"
+									},
+									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',
+										width: "200px"
+									},
+									render: (h, { row, column, index }) => {
+										return this.panfuan(row) ? <div class="redbordererr">
+											<el-form-item label="" label-width="0px">
+												<el-input
+													disabled={expandDataForm.otherNormListBj || !row.bianji}
+													value={row[column.columnAttributes.prop]}
+													onInput={(val) => { row[column.columnAttributes.prop] = val }}
+													placeholder="请输入内容"
+												>
+												</el-input>
+											</el-form-item>
+										</div> : null
+									}
+								},
+								{
+									columnAttributes: {
+										label: '工程师名称',
+										prop: 'workerName',
+										width: "140px"
+									},
+									render: (h, { row, column, index }) => {
+										return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
+											{expandDataForm?.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;">
+											{expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
+										</div>
+									}
+								},
+								{
+									columnAttributes: {
+										label: '结算费用',
+										prop: 'settleAmount',
+										width: "140px"
+									},
+									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={!expandDataForm.otherNormList[row.pfuqinid].bianji || expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.["poolStatus"] == "YES"}
+													value={expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
+													onInput={(val) => {
+														expandDataForm.otherNormList[row.pfuqinid].workerList[row.zijideid][column.columnAttributes.prop] = val
+													}}
+													placeholder="请输入内容"
+												>
+												</el-input>
+											</el-form-item>
+										</div>
+									}
+								}, {
+									columnAttributes: {
+										label: '确认人',
+										prop: 'confirmBy',
+										width: "100px"
+									},
+									render: (h, { row, column, index }) => {
+										return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
+											{expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
+										</div>
+									}
+								},
+								{
+									columnAttributes: {
+										label: '确认时间',
+										prop: 'confirmTime',
+										width: "140px"
+									},
+									render: (h, { row, column, index }) => {
+										return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
+											{expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]}
+										</div>
+									}
+								},
+								{
+									columnAttributes: {
+										label: '汇总状态',
+										prop: 'poolStatus',
+										width: "100px"
+									},
+									render: (h, { row, column, index }) => {
+										return <div class="redbordererr" style="padding:0 6px;display:flex;align-items:center;">
+											{({ "NO": "未汇总", "YES": "已汇总" })[expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.[row.zijideid]?.[column.columnAttributes.prop]]}
+										</div>
+									}
+								}, {
+									columnAttributes: {
+										label: '操作',
+										prop: '',
+										fixed: 'right',
+										width: "120px"
+									},
+									render: (h, { row, column, index }) => {
+										return expandDataForm.settleStatus == 'YWG' || (expandDataForm.settleStatus == 'YJS' && expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.find(item => item.poolStatus == "NO")) ? (<div class="redbordererr redbordererranniuright" style="padding:0 6px;display:flex;align-items:center;">
+											{expandDataForm.otherNormList[row.pfuqinid].bianji ? <el-button type="text" onClick={
+												() => {
+													var yjsje = [0, 0, 0, expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.filter(item => item.poolStatus == "YES").map(item => item.settleAmount)].reduce(function (prev, curr, idx, arr) {
+														return prev + curr;
+													})
+													var nou = expandDataForm?.otherNormList[row.pfuqinid]?.workerList?.filter(item => item.poolStatus == "NO")
+													var qian = ((((Number(expandDataForm?.otherNormList[row.pfuqinid]["settleAmount"]) - yjsje) / nou.length) * 100) / 100).toFixed(2)
+													var rongyu = ((Number(expandDataForm?.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}
+											{expandDataForm.otherNormList[row.pfuqinid].bianji ? <el-button type="text" onClick={
+												() => {
+													this.itemOrderBaseSettleNormReset(rowZhu, "otherNormList", () => {
+														expandDataForm.otherNormList[row.pfuqinid].bianji = false
+													})
+												}
+											}>确定</el-button> : null}
+											{!expandDataForm.otherNormList[row.pfuqinid].bianji ? <el-button type="text" onClick={
+												() => {
+													expandDataForm.otherNormList[row.pfuqinid].bianji = true
+												}
+											}>修改</el-button> : null}
+										</div>) : null
+									}
+								}]
+								return (
+									<zj-table
+										columns={columns}
+										table-data={formData.otherNormList}
+										tableAttributes={{
+											'span-method': ({ row, column, rowIndex, columnIndex }) => {
+												if (columnIndex === columns.length - 1) {
+													if (row.zijideid == 0) {
+														return {
+															rowspan: formData.otherNormList[row.pfuqinid].workerList?.length,
+															colspan: 1
+														};
+													} else {
+														return {
+															rowspan: 0,
+															colspan: 0
+														};
+													}
+												}
+											}
+										}}
+									/>
+								)
+							}
+						}]} />
+				</zj-form-container>
+			</div>) : null
+		},
+
+		itemOrderBaseSettleNormReset(data, type, cb) {
+			try {
+				data.expandData.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}:合计结算总金额与总金额不等`);
+					}
+				})
+				data.expandData.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
+			}
+
+			var { classifyList, gonglr, gonglv, otherList, normListBj, otherNormListBj, showOtherNormList, ...pam } = data.expandData;
+			var pams = {
+				...pam,
+				...(() => {
+					if (type == "normList") {
+						return {
+							normList: pam.normList.filter(item => !!item.id),
+						}
+					}
+					return {
+						normList: [],
+					}
+				})(),
+				...(() => {
+					if (type == "otherNormList") {
+						return {
+							otherNormList: pam.otherNormList.filter(item => !!item.id),
+						}
+					}
+					return {
+						otherNormList: [],
+					}
+				})(),
+			};
+			([orderBaseSettleNormConfirm, orderBaseSettleNormReset])[pams[type]?.map(item => item.workerList?.find(resdata => !!resdata.settleOrderId))?.find(item => item) ? 1 : 0](pams).then(res => {
+				orderBaseSettleNormDetail2({
+					id: data.id,
+					orderProductId: data.pgOrderProductId
+				}).then(res => {
+					this.zhuzhuang(res.data).then(res => {
+						data.expandData = res
+					})
+				})
+				cb && cb()
+				this.$message({
+					type: 'success',
+					message: '结算成功'
+				})
+			})
+		},
+
+		zhuzhuang(data) {
+			return new Promise((r, j) => {
+				var orderChannelId
+				var normList = []
+				var pfuqinid = 0
+				data.normListBj = false
+				data.otherNormListBj = false
+				data.showOtherNormList = false
+				data.normList.map((item, index) => {
+					if (!orderChannelId) { orderChannelId = item.orderChannelId }
+					item.settleNum = item.settleNum || ""
+					normList.push({ ...item, pfuqinid: pfuqinid, zijideid: 0, bianji: !item.workerList?.find(resdata => !!resdata.settleOrderId) })
+					item.workerList?.map((resdata, ind_) => {
+						if (resdata.settleOrderId) { data.normListBj = true }
+						if (ind_ !== 0) { normList.push({ pfuqinid: pfuqinid, zijideid: ind_ }) }
+						if (ind_ == item.workerList?.length - 1) { pfuqinid += (ind_ + 1) }
+					})
+				})
+				var otherNormList = []
+				var qtpfuqinid = 0
+				data.otherNormList.map((item, index) => {
+					item.settleNum = item.settleNum || ""
+					otherNormList.push({ ...item, pfuqinid: qtpfuqinid, zijideid: 0, bianji: !item.workerList?.find(resdata => !!resdata.settleOrderId) })
+					if (!data.showOtherNormList) {
+						data.showOtherNormList = !!item.workerList?.find(resdata => !!resdata.settleOrderId)
+					}
+					item.workerList?.map((resdata, ind_) => {
+						if (resdata.settleOrderId) { data.otherNormListBj = true }
+						if (ind_ !== 0) { otherNormList.push({ pfuqinid: qtpfuqinid, zijideid: ind_ }) }
+						if (ind_ == item.workerList?.length - 1) { qtpfuqinid += (ind_ + 1) }
+					})
+				})
+				Promise.all([
+					listPageV3({ "pageNum": 1, "pageSize": -1 }),
+					listPageV2Repair({ "pageNum": 1, "pageSize": -1 }),
+					settleNormInstallQuery({
+						settleNormType: data.orderType,
+						type: data.orderSmallType
+					}),
+					settleNormOtherQuery()
+				]).then(([res1, res2, res3, res4]) => {
+					r({
+						...data,
+						normList,
+						otherNormList,
+						gonglv: res1.data.records,
+						gonglr: res2.data.records,
+						classifyList: res3.data,
+						otherList: res4.data,
+					})
+
+				}).catch(j)
+			})
+		},
+
+		panfuan(item) {
+			if (!!item.id) {
+				return true
+			} else {
+				return false
+			}
+		},
+
+		classifyListChuLi(list, value, label, func, ...keys) {
+			var obj = {};
+			list.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
+			))
+		},
+
+	}
+}
+</script>
+
+<style lang="scss">
+.redbordererranniuright {
+	.el-button {
+		margin-left: 0px;
+		margin-right: 10px;
+	}
+}
+</style>

+ 1 - 3
src/views/workOrder/workOrderPool/detailModule/SettleAccounts/index.vue

@@ -18,11 +18,9 @@
 </template>
 
 <script>
-import { getClassifyList } from '@/api/goods'
-import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+import { required } 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 {

+ 2 - 2
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/index.vue

@@ -9,7 +9,7 @@
       >
         <!-- 派工信息 创建不需要 -->
         <zj-form-module v-if="id" title="派工信息" label-width="90px" :form-data="orderInfo" :form-items="dispatchInfo">
-          <div slot="internal-bottom">
+          <div slot="internal-bottom" style="text-align: right;">
             <copy-info text="复制工单信息" :info="dispatchInfo" :order-info="orderInfo" />
           </div>
           <div slot="right" style="width: 55%; position: relative">
@@ -33,7 +33,7 @@
           :form-items="workOrderType == 1 ? product_wb : product"
         />
         <!-- 其它信息 -->
-        <zj-form-module title="其它信息" :form-data="orderInfo" :form-items="otherInfo" />
+        <!-- <zj-form-module title="其它信息" :form-data="orderInfo" :form-items="otherInfo" /> -->
         <!-- 派单信息 -->
         <zj-form-module title="派单信息" label-width="100px" :form-data="orderInfo" :form-items="pandanxinxi" />
       </zj-form-container>

+ 18 - 2
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/basicInfo.js

@@ -138,7 +138,7 @@ export default {
         {
           isShow: this.formOptions.gpsAddress.isShow,
           name: 'el-select',
-          md: 7,
+          md: 6,
           formItemAttributes: {
             label: '客户地址', //省
             prop: 'provinceId',
@@ -234,7 +234,7 @@ export default {
         {
           isShow: this.formOptions.gpsAddress.isShow,
           name: 'slot-component',
-          md: 2,
+          md: 3,
           formItemAttributes: {
             'label-width': '0px',
             prop: '',
@@ -302,6 +302,22 @@ export default {
           formItemAttributes: { label: '', prop: 'address', 'label-width': '0px', rules: this.formOptions.address.isRules },
           attributes: { disabled: !this.formOptions.address.isEdit, placeholder: '详细地址' }
         },
+        {
+          isShow: this.formOptions.remark.isShow && !this.id,
+          name: 'el-input',
+          md: 24,
+          attributes: {
+            disabled: !this.formOptions.remark.isEdit,
+            type: 'textarea',
+            rows: 3,
+            placeholder: '请输入'
+          },
+          formItemAttributes: {
+            label: '备注',
+            prop: 'remark',
+            rules: this.formOptions.remark.isRules
+          }
+        }
       ]
     }
   },

+ 31 - 14
src/views/workOrder/workOrderPool/detailModule/workOrderInfo/mixins/dispatchInfo.js

@@ -59,15 +59,16 @@ export default {
           md: 24,
           attributes: { disabled: true, placeholder: '请输入' },
           formItemAttributes: { label: '工单单号', prop: 'id' },
-          append: (h, { props, onInput }) => {
-            var { value } = props
-            return <copyInfo
-              btnys={true}
-              slot="append"
-              text="复制"
-              columnCopyClass="columnCopyClass_cp_888"
-              cpText={value}
-            ></copyInfo>
+          slots:{
+            append: (h, { props, onInput }) => {
+              return <copyInfo
+                btnys={true}
+                slot="append"
+                text="复制"
+                columnCopyClass="columnCopyClass_cp_888aa"
+                cpText={props?.formData?.id}
+              ></copyInfo>
+            }
           }
         },
         {
@@ -92,25 +93,25 @@ export default {
         },
         {
           name: 'el-input',
-          md: 24,
+          md: 12,
           attributes: { disabled: true, placeholder: '请选择' },
           formItemAttributes: { label: '派工状态', prop: 'orderStatusText' }
         },
         {
           name: 'el-input',
-          md: 24,
+          md: 12,
           attributes: { disabled: true, placeholder: '请输入' },
           formItemAttributes: { label: '创建时间', prop: 'createTime' }
         },
         {
           name: 'el-input',
-          md: 24,
+          md: 12,
           attributes: { disabled: true, placeholder: '请输入' },
           formItemAttributes: { label: '派单时间', prop: 'dispatchTime' }
         },
         {
           name: 'el-input',
-          md: 24,
+          md: 12,
           attributes: { disabled: true, placeholder: '请输入' },
           formItemAttributes: { label: '接单时间', prop: 'workerReceTime' }
         },
@@ -144,7 +145,23 @@ export default {
             })
           })
           return list
-        })()
+        })(),
+        {
+          isShow: this.formOptions.remark.isShow && !!this.id,
+          name: 'el-input',
+          md: 24,
+          attributes: {
+            disabled: !this.formOptions.remark.isEdit,
+            type: 'textarea',
+            rows: 3,
+            placeholder: '请输入'
+          },
+          formItemAttributes: {
+            label: '备注',
+            prop: 'remark',
+            rules: this.formOptions.remark.isRules
+          }
+        }
       ]
     }
   },