ly vor 1 Jahr
Ursprung
Commit
409e9be0f1
26 geänderte Dateien mit 4313 neuen und 1891 gelöschten Zeilen
  1. 53 0
      .dev.drone.yml
  2. 51 0
      src/api/business/entrust/currentWorkOrder.js
  3. 0 1
      src/utils/request.js
  4. 1888 0
      src/views/business/crm/company/formView.vue
  5. 194 566
      src/views/business/crm/order/form.vue
  6. 19 9
      src/views/business/deduction/index.vue
  7. 5 3
      src/views/business/entrust/statementAccount/form.vue
  8. 1 1
      src/views/business/entrust/statementAccount/index.vue
  9. 42 40
      src/views/business/entrust/workOrder/currentMonth/index.vue
  10. 352 0
      src/views/business/entrust/workOrder/historyMonth/index.vue
  11. 353 0
      src/views/business/entrust/workOrder/nextMonth/export.vue
  12. 20 6
      src/views/business/entrust/workOrder/nextMonth/index.vue
  13. 10 9
      src/views/business/entrust/workOrderForFactory/currentMonth/index.vue
  14. 348 0
      src/views/business/entrust/workOrderForFactory/history/index.vue
  15. 15 6
      src/views/business/entrust/workOrderForFactory/nextMonth/index.vue
  16. 12 3
      src/views/business/financial/collection/form.vue
  17. 13 3
      src/views/business/financial/contract/form.vue
  18. 644 1006
      src/views/business/financial/payment/form.vue
  19. 119 104
      src/views/business/housingFund/declare/form.vue
  20. 12 5
      src/views/business/housingFund/declare/view.vue
  21. 11 3
      src/views/business/housingFund/fileListDialog.vue
  22. 103 101
      src/views/business/production/IndividualIncomeTaxIs/FormDialog.vue
  23. 2 1
      src/views/business/production/onceWork/index.vue
  24. 21 11
      src/views/business/socialSecurity/declare/form.vue
  25. 16 9
      src/views/business/socialSecurity/declare/view.vue
  26. 9 4
      src/views/business/socialSecurity/fileListDialog.vue

+ 53 - 0
.dev.drone.yml

@@ -0,0 +1,53 @@
+kind: pipeline # 定义对象类型,还有secret和signature两种类型
+type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
+name: ezhizao_yzbh_vue # 定义流水线名称 与仓库名保持一致
+
+steps: # 定义流水线执行步骤,这些步骤将顺序执行
+  - name: package # 流水线名称
+    image: node:18.12.1 # 定义创建容器的Docker镜像
+    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
+      - name: ssh
+        path: /root/.ssh
+      - name: node_modules
+        path: /drone/src/node_modules # 将node包依赖挂载出来,防止重复下载
+      - name: node_dist
+        path: /home/nginx/html # 将应用打包好的和执行脚本挂载出来
+    commands: # 定义在Docker容器中执行的shell命令
+      - npm install --registry=https://registry.npmmirror.com
+      - npm run build:prod
+      - mkdir -p /home/nginx/html/yzbh/
+      - cp -r dist /home/nginx/html/yzbh/
+      - cp -r ssl /home/nginx/html/yzbh/
+      - cp Dockerfile /home/nginx/html/yzbh/Dockerfile
+      - cp run.sh /home/nginx/html/yzbh/run.sh
+      - cp nginx.conf /home/nginx/html/yzbh/nginx.conf
+  - name: build-start
+    image: appleboy/drone-ssh #SSH工具镜像
+    settings:
+      host: 82.156.209.15 # 远程连接地址
+      username:
+        from_secret: ssh_user # 远程连接账号
+      password:
+        from_secret: ssh_password # 从Secret中读取SSH密码
+      port: 22 # 远程连接端口
+      command_timeout: 5m # 远程执行命令超时时间
+      script:
+        - mkdir -p /home/nginx/html/yzbh/
+        - cd /home/nginx/html/yzbh # 进入宿主机构建目录
+        - chmod +x run.sh #更改为可执行脚本
+        - ./run.sh # 运行脚本打包应用镜像并运行
+
+volumes: # 定义流水线挂载目录,用于共享数据
+  - name: ssh
+    host:
+      path: /root/.ssh/
+  - name: node_modules
+    host:
+      path: /home/node/18.12.1/node_modules/ # 从宿主机中挂载的目录
+  - name: node_dist
+    host:
+      path: /home/nginx/html/
+
+trigger:
+  branch:
+    - develop

+ 51 - 0
src/api/business/entrust/currentWorkOrder.js

@@ -92,4 +92,55 @@ export function transNextForFactory() {
     url: '/business/workOrderCurrent/transNextForFactory',
     method: 'get'
   })
+}
+
+
+
+export function listHistory(query) {
+  request.defaults.baseURL = '/ezhizao-yzbh-entrust'
+  return request({
+    url: '/business/workOrderCurrent/history/list',
+    method: 'get',
+    params: query
+  })
+}
+export function exportStore(query) {
+  request.defaults.baseURL = '/ezhizao-yzbh-entrust'
+  download(
+    "business/workOrderCurrent/exportStore",
+    {
+      ...query,
+    },
+    `本月工单导出_${new Date().getTime()}.xlsx`
+  )
+}
+export function exportNextStore(query) {
+  request.defaults.baseURL = '/ezhizao-yzbh-entrust'
+  download(
+    "business/workOrderCurrent/exportNextStore",
+    {
+      ...query,
+    },
+    `下月工单导出_${new Date().getTime()}.xlsx`
+  )
+}
+export function exportFactory(query) {
+  request.defaults.baseURL = '/ezhizao-yzbh-entrust'
+  download(
+    "business/workOrderCurrent/exportFactory",
+    {
+      ...query,
+    },
+    `本月工单导出_${new Date().getTime()}.xlsx`
+  )
+}
+export function exportNextFactory(query) {
+  request.defaults.baseURL = '/ezhizao-yzbh-entrust'
+  download(
+    "business/workOrderCurrent/exportNextFactory",
+    {
+      ...query,
+    },
+    `下月工单导出_${new Date().getTime()}.xlsx`
+  )
 }

+ 0 - 1
src/utils/request.js

@@ -161,7 +161,6 @@ service.interceptors.request.use(
 // 响应拦截器
 service.interceptors.response.use(
   (res) => {
-    console.log("res config", res.config, res.config.data, typeof res.config.data)
 
     // 是否需要防止数据重复提交
     stopRepeatSubmitRequest(res.config);

+ 1888 - 0
src/views/business/crm/company/formView.vue

@@ -0,0 +1,1888 @@
+<template>
+  <!-- 添加或修改项目信息对话框 -->
+  <div class="el-drawer__wrapper company-list">
+    <el-drawer :title="title" v-model="visible" direction="rtl" size="100%">
+      <div class="page-container form-container">
+        <!-- 功能按钮区域 -->
+        <div class="form-btns-container">
+          <span class="title-label"
+            ><el-icon>
+              <Document />
+            </el-icon>
+            客户表单</span
+          >
+
+          <!-- <el-button
+            v-if="editStatus"
+            type="primary"
+            size="small"
+            icon="Finished"
+            @click="submitForm"
+            >保存</el-button
+          >
+          <template v-else>
+            <el-button
+              v-hasPermi="['business:company:edit']"
+              type="warning"
+              size="small"
+              icon="Edit"
+              @click="editStatus = true"
+              >修改</el-button
+            >
+          </template> -->
+          <!-- <el-button
+            v-if="form.id && editStatus"
+            type="info"
+            size="small"
+            icon="Close"
+            @click="
+              () => {
+                editStatus = false;
+                getForm();
+              }
+            "
+            >取消修改</el-button
+          >
+          <el-button
+            v-if="form.id"
+            type="success"
+            size="small"
+            icon="refresh"
+            @click="getForm"
+          >
+            刷新</el-button
+          > -->
+
+          <div class="screen-btn" @click="handleScreen">
+            <template v-if="!isFullscreen">
+              <i class="fa fa-window-maximize" aria-hidden="true" />
+              <!-- <span>全屏</span> -->
+            </template>
+            <template v-else>
+              <i class="fa fa-window-restore" aria-hidden="true" />
+              <!-- <span>还原</span> -->
+            </template>
+          </div>
+          <div class="close-btn" @click="cancel">
+            <i class="fa fa-times" aria-hidden="true" />
+            <!-- <span>关闭</span> -->
+          </div>
+        </div>
+        <div
+          class="Y-scrollbar"
+          style="
+            position: absolute;
+            top: 32px;
+            bottom: 0;
+            width: 100%;
+            overflow: auto;
+          "
+        >
+          <!-- 主表 -->
+          <el-form
+            ref="companyRef"
+            class="master-container"
+            size="small"
+            :model="form"
+            :rules="rules"
+            label-width="120px"
+          >
+            <div class="radio-scroll">
+              <el-radio-group
+                v-model="queryRadio"
+                style="margin-left: 20px"
+                size="small"
+                @change="scrollTargetTo"
+              >
+                <el-radio-button label="base-form">基本信息</el-radio-button>
+                <el-radio-button label="business-form"
+                  >工商信息</el-radio-button
+                >
+                <el-radio-button label="tax-form">税务信息</el-radio-button>
+                <el-radio-button label="linkman-form">联系人</el-radio-button>
+                <el-radio-button v-if="form.id" label="follow-form"
+                  >跟进动态</el-radio-button
+                >
+              </el-radio-group>
+            </div>
+            <div
+              class="scroll-view"
+              style="
+                position: absolute;
+                top: 50px;
+                bottom: 20px;
+                right: 0px;
+                left: 0px;
+                overflow: auto;
+              "
+            >
+              <div class="details-container" style="margin-top: 8px">
+                <div id="base-form" class="details-head">
+                  <div class="title">
+                    <i class="fa fa-th-list" aria-hidden="true" /> 基本信息
+                  </div>
+                </div>
+                <el-row :gutter="30" style="margin-top: 10px">
+                  <el-col :span="12">
+                    <el-form-item label="客户编码:" prop="code">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.code"
+                        size="small"
+                        type="text"
+                        style="width: 100%"
+                        placeholder="客户编码"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.code }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="客户名称:" required prop="name">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.name"
+                        size="small"
+                        type="text"
+                        placeholder="客户名称"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.name }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="简称:" prop="shortName">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.shortName"
+                        size="small"
+                        type="text"
+                        placeholder="简称"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.shortName }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12" style="width: 100%">
+                    <el-form-item label="客户来源:" prop="sourceCategoryName">
+                      <CustomerFormCom
+                        ref="CustomerFormComRef"
+                        :edit-status="editStatus"
+                        :form-data="form"
+                        :source-categories="sourceCategories"
+                      />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6" >
+                    <el-form-item label="客户标签" prop="customerLabelId" >
+                      <el-select v-model="form.customerLabelId"  style="width:100%"
+                      v-if="editStatus"
+                      >
+                      <el-option
+                      v-for="item in options"
+                      :key="item.id"
+                      :label="item.lable"
+                      :value="item.id"
+                    />
+                    </el-select>
+                    <span v-else>{{ selectedOptionLabel }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="备注:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.remark"
+                        type="text"
+                        width="100%"
+                        size="small"
+                        placeholder="备注"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.remark }}</span>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <br />
+
+                <div id="business-form" class="details-head">
+                  <div class="title">
+                    <i class="fa fa-th-list" aria-hidden="true" /> 工商信息
+                  </div>
+                </div>
+                <el-row :gutter="30" style="margin-top: 10px">
+                  <el-col :span="8">
+                    <el-form-item
+                      label="税号:"
+                      prop="socialCreditCode"
+                    >
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.socialCreditCode"
+                        size="small"
+                        type="text"
+                        placeholder="税号"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.socialCreditCode }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-form-item label="主营行业:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.mainBusiness"
+                        size="small"
+                        type="text"
+                        placeholder="主营行业"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.mainBusiness }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-form-item label="企业类型:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.type"
+                        size="small"
+                        type="text"
+                        placeholder="企业类型"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.type }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-form-item label="法定代表人:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.legalRepresentative"
+                        size="small"
+                        type="text"
+                        placeholder="法定代表人"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.legalRepresentative }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-form-item label="成立日期:">
+                      <el-date-picker
+                        v-if="editStatus"
+                        v-model.trim="form.foundationDate"
+                        size="small"
+                        :clearable="true"
+                        style="width: 100%"
+                        format="YYYY-MM-DD"
+                        value-format="YYYY-MM-DD"
+                        align="center"
+                        type="date"
+                        placeholder="成立日期"
+                      />
+                      <span v-else>{{ form.foundationDate }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-form-item label="出执照日期:">
+                      <el-date-picker
+                        v-if="editStatus"
+                        v-model.trim="form.licenceDate"
+                        size="small"
+                        :clearable="true"
+                        style="width: 100%"
+                        format="YYYY-MM-DD"
+                        value-format="YYYY-MM-DD"
+                        align="center"
+                        type="date"
+                        placeholder="出执照日期"
+                      />
+                      <span v-else>{{ form.licenceDate }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-form-item
+                      label="营业开始日期:"
+                      prop="createTime"
+                      class="date-layout"
+                    >
+                      <template v-if="editStatus">
+                        <el-date-picker
+                          v-model="form.businessStartDate"
+                          size="small"
+                          :clearable="true"
+                          style="width: 100%"
+                          format="YYYY-MM-DD"
+                          value-format="YYYY-MM-DD"
+                          align="center"
+                          type="date"
+                          placeholder="开始日期"
+                        />
+                      </template>
+                      <span v-else>
+                        {{
+                          form.businessStartDate == null
+                            ? ""
+                            : form.businessStartDate
+                        }}</span
+                      >
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-form-item
+                      label="营业截止日期:"
+                      prop="createTime"
+                      class="date-layout"
+                    >
+                      <template v-if="editStatus">
+                        <el-date-picker
+                          v-model="form.businessEndDate"
+                          size="small"
+                          :clearable="true"
+                          style="width: 100%"
+                          format="YYYY-MM-DD"
+                          value-format="YYYY-MM-DD"
+                          :disabled="PermanentlyEffective"
+                          align="center"
+                          type="date"
+                          placeholder="结束日期"
+                        />
+                      </template>
+                      <span v-else-if="form.isPermanentlyEffective == 0">
+                        {{
+                          form.businessEndDate == null
+                            ? ""
+                            : form.businessEndDate
+                        }}
+                      </span>
+                      <span v-else-if="form.isPermanentlyEffective == 1">
+                        {{ "无固定期限" }}
+                      </span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="8">
+                    <div
+                      style="display: inline; height: 28pxs; margin-left: -70px"
+                    >
+                      <el-form-item>
+                        <template v-if="editStatus">
+                          <span
+                            style="
+                              font-size: 12px;
+                              margin-left: -16px;
+                              margin-right: 8px;
+                            "
+                            >无固定期限</span
+                          >
+                          <el-checkbox v-model="PermanentlyEffective" />
+                        </template>
+                      </el-form-item>
+                    </div>
+                  </el-col>
+                  <el-col :span="8">
+                    <el-form-item label="注册资金:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.number="form.registerMoney"
+                        number
+                        size="small"
+                        id="inputField"
+                        min="0"
+                        placeholder="注册资金"
+                        :clearable="true"
+                        controls-position="right"
+                        style="width: 100%"
+                        @input="handleInput"
+                        @change="handleCompute"
+                      >
+                        <template #append>万元</template>
+                      </el-input>
+                      <span v-else
+                        >{{ rowNum(form.registerMoney) }}{{ "万元" }}
+                      </span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="16">
+                    <el-form-item
+                      label="注册省市区:"
+                      prop="provinceCode"
+                    >
+                      <template v-if="editStatus">
+                        <el-select
+                          v-model="form.provinceCode"
+                          placeholder="省份"
+                          style="width: 33.33%"
+                          @change="handleSelectProvince"
+                        >
+                          <el-option
+                            v-for="item in provinces"
+                            :key="item.code"
+                            :label="item.name"
+                            :value="item.code"
+                          />
+                        </el-select>
+                        <el-select
+                          v-model="form.cityCode"
+                          placeholder="城市"
+                          style="width: 33.33%"
+                          @change="handleSelectCity"
+                        >
+                          <el-option
+                            v-for="item in cities"
+                            :key="item.code"
+                            :label="item.name"
+                            :value="item.code"
+                          />
+                        </el-select>
+                        <el-select
+                          v-model="form.districtCode"
+                          placeholder="行政区"
+                          style="width: 33.33%"
+                          @change="handleSelectDistrict"
+                        >
+                          <el-option
+                            v-for="item in districts"
+                            :key="item.code"
+                            :label="item.name"
+                            :value="item.code"
+                          />
+                        </el-select>
+                        <!-- <EluiChinaAreaDht v-model="area" @change="handleAreaChange" /> -->
+                      </template>
+                      <span v-else>{{
+                        form.province +
+                        (form.city ? " - " + form.city : "") +
+                        (form.district ? " - " + form.district : "")
+                      }}</span>
+                    </el-form-item>
+                  </el-col>
+
+                  <el-col :span="16">
+                    <el-form-item label="详细地址:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.address"
+                        size="small"
+                        type="text"
+                        placeholder="详细地址:"
+                        :clearable="true"
+                      />
+                      <div
+                        v-else
+                        style="
+                          display: flex;
+                          align-items: center;
+                          height: 28px;
+                          line-height: normal;
+                        "
+                      >
+                        <span>{{ form.address }}</span>
+                      </div>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="24" style="height: auto; min-height: 60px">
+                    <el-form-item label="经营范围:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.businessField"
+                        maxlength="200"
+                        type="textarea"
+                        :rows="5"
+                        width="100%"
+                        size="small"
+                        placeholder="经营范围"
+                        show-word-limit
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.businessField }}</span>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <br />
+                <div id="tax-form" class="details-head">
+                  <div class="title">
+                    <i class="fa fa-th-list" aria-hidden="true" /> 税务信息
+                  </div>
+                </div>
+                <el-row :gutter="30" style="margin-top: 10px">
+                  <el-col :span="6">
+                    <el-form-item label="纳税性质:" prop="taxType">
+                      <el-select
+                        v-if="editStatus"
+                        v-model="form.taxType"
+                        placeholder="请选择纳税性质"
+                        size="small"
+                        :clearable="true"
+                        @change="taxTypeChange"
+                      >
+                        <el-option
+                          v-for="item in taxTypes"
+                          :key="item.label"
+                          :label="item.label"
+                          :value="item.value"
+                        />
+                      </el-select>
+                      <span v-else>{{ form.taxType }} </span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col v-if="form.taxType === '个体工商户'" :span="6">
+                    <el-form-item label="征收方式:" required>
+                      <el-select
+                        v-if="editStatus"
+                        v-model="form.collectionMethod"
+                        placeholder="请选择征收方式"
+                        size="small"
+                        :clearable="true"
+                      >
+                        <el-option
+                          v-for="item in collectionMethods"
+                          :key="item.label"
+                          :label="item.label"
+                          :value="item.value"
+                        />
+                      </el-select>
+                      <span v-else>{{ form.collectionMethod }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col v-if="form.collectionMethod === '定期定额'" :span="6">
+                    <el-form-item label="定额金额:" required>
+                      <el-input-number
+                        v-if="editStatus"
+                        v-model="form.quotaAmount"
+                        placeholder="请输入定额金额"
+                        :min="0"
+                        :precision="2"
+                        controls-position="right"
+                        :controls="false"
+                        size="small"
+                      />
+                      <span v-else>{{ form.quotationAmount }}</span>
+                    </el-form-item>
+                  </el-col>
+
+                  <el-col :span="6">
+                    <el-form-item label="是否零申报:">
+                      <el-select
+                        v-if="editStatus"
+                        v-model="form.isZero"
+                        placeholder="请选择"
+                        style="width: 100%"
+                      >
+                        <el-option
+                          v-for="item in yesOrNo"
+                          :key="item.label"
+                          :label="item.label"
+                          :value="item.value"
+                        />
+                      </el-select>
+                      <span v-else>{{
+                        form.isZero === 1 ? "是" : form.isZero === 0 ? "否" : ""
+                      }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="主管税务机关:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.competentTaxAuthority"
+                        size="small"
+                        type="text"
+                        placeholder="主管税务机关"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.competentTaxAuthority }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="税务专管员">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.taxCollectorName"
+                        size="small"
+                        type="text"
+                        placeholder="税务专管员"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.taxCollectorName }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="专管员电话:">
+                      <el-input
+                        v-if="editStatus"
+                        v-model.trim="form.taxCollectorPhone"
+                        size="small"
+                        type="text"
+                        placeholder="专管员电话"
+                        minlength="1"
+                        maxlength="11"
+                        oninput="value=value.replace(/[^\d]/g, '')"
+                        :clearable="true"
+                      />
+                      <span v-else>{{ form.taxCollectorPhone }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="核税月份:">
+                      <el-date-picker
+                        v-if="editStatus"
+                        v-model.trim="form.taxMonth"
+                        size="small"
+                        :clearable="true"
+                        format="YYYY-MM"
+                        value-format="YYYY-MM-DD HH:mm:ss"
+                        align="center"
+                        type="month"
+                        placeholder="核税月份"
+                      />
+                      <span v-else> {{ form.taxMonth }}</span>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="年收入:" prop="annualIncome">
+                      <el-select
+                        style="width: 100%"
+                        v-if="editStatus"
+                        v-model="form.annualIncome"
+                        placeholder="请选择年收入"
+                      >
+                        <el-option
+                          v-for="item in incomeDefault"
+                          :key="item.value"
+                          :label="item.label"
+                          :value="item.value"
+                        />
+                      </el-select>
+                      <span v-else>{{ form.annualIncome }} </span>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <br />
+                <div id="linkman-form" class="details-head">
+                  <div class="title">
+                    <i class="fa fa-th-list" aria-hidden="true" /> 联系人
+                  </div>
+                  <div v-if="editStatus" class="details-btns-container">
+                    <el-button
+                      type="primary"
+                      size="small"
+                      icon="Plus"
+                      @click="handleAddContactor"
+                    >
+                      添加联系人</el-button
+                    >
+                  </div>
+                </div>
+                <el-row :gutter="10" style="height: 200px">
+                  <el-col :span="24">
+                    <div class="details-body">
+                      <el-table
+                        ref="contactorsable"
+                        :data="form.contactors"
+                        size="small"
+                        border
+                        header-row-class-name="list-header-row"
+                        max-height="200"
+                      >
+                        <el-table-column
+                          type="index"
+                          label="序号"
+                          width="47"
+                          align="center"
+                        />
+                        <el-table-column label="姓名" width="70" align="center">
+                          <template #default="scope">
+                            <div v-if="editStatus">
+                              <el-input
+                                v-model="scope.row.name"
+                                size="small"
+                                placeholder="姓名"
+                              />
+                              <span class="required">*</span>
+                            </div>
+                            <div v-else>
+                              {{ scope.row.name }}
+                              <span class="required">*</span>
+                            </div>
+                          </template>
+                        </el-table-column>
+                        <el-table-column
+                          label="角色"
+                          width="130"
+                          align="center"
+                        >
+                          <template #default="scope">
+                            <div v-if="editStatus">
+                              <el-select
+                                v-model="scope.row.position"
+                                size="small"
+                                placeholder="角色"
+                              >
+                                <el-option
+                                  v-for="(item, index) in contact_role"
+                                  :key="index"
+                                  :label="item.label"
+                                  :value="item.label"
+                                />
+                              </el-select>
+                            </div>
+                            <div v-else>
+                              {{ scope.row.position }}
+                            </div>
+                          </template>
+                        </el-table-column>
+                        <el-table-column
+                          label="联系电话"
+                          width="100"
+                          align="center"
+                        >
+                          <template #default="scope">
+                            <div v-if="editStatus">
+                              <el-input
+                                v-model="scope.row.phone"
+                                size="small"
+                                minlength="1"
+                                maxlength="11"
+                                placeholder="联系电话"
+                                oninput="value=value.replace(/[^\d]/g, '')"
+                              />
+                            </div>
+                            <div v-else>{{ scope.row.phone }}</div>
+                          </template>
+                        </el-table-column>
+                        <el-table-column
+                          label="主联系人"
+                          width="100"
+                          align="center"
+                        >
+                          <template #default="scope">
+                            <div v-if="editStatus">
+                              <el-select
+                                v-model="scope.row.isMain"
+                                class="txtC"
+                                size="small"
+                                placeholder="请选择"
+                              >
+                                <el-option
+                                  v-for="(item, index) in confirmDefaultRef"
+                                  :key="index"
+                                  :label="item.label"
+                                  :value="item.label"
+                                />
+                              </el-select>
+                            </div>
+                            <div v-else>
+                              {{ scope.row.isMain }}
+                            </div>
+                          </template>
+                        </el-table-column>
+                        <el-table-column
+                          label="备注"
+                          prop="remark"
+                          header-align="center"
+                        >
+                          <template #default="scope">
+                            <div v-if="editStatus">
+                              <el-input
+                                v-model="scope.row.remark"
+                                size="small"
+                                placeholder="备注"
+                              />
+                            </div>
+                            <div v-else>{{ scope.row.remark }}</div>
+                          </template>
+                        </el-table-column>
+                        <el-table-column label="操作" width="50" align="center">
+                          <template #default="scope">
+                            <div>
+                              <el-button
+                                v-if="editStatus"
+                                size="small"
+                                link
+                                type="danger"
+                                @click="handleDelContactor(scope.$index)"
+                                >删除</el-button
+                              >
+                              <span v-else>-</span>
+                            </div>
+                          </template>
+                        </el-table-column>
+                      </el-table>
+                    </div>
+                  </el-col>
+                </el-row>
+                <br />
+                <div v-if="form.id" id="follow-form" class="details-head">
+                  <div class="title">
+                    <i class="fa fa-th-list" aria-hidden="true" /> 跟进动态
+                  </div>
+                </div>
+                <el-row v-if="form.id" :gutter="30" style="margin-top: 10px">
+                  <el-col :span="6">
+                    <el-form-item label="跟进方式:" required>
+                      <el-select
+                        v-model.trim="followData.followTypeId"
+                        placeholder="跟进方式"
+                        size="small"
+                        :clearable="true"
+                        disabled
+                      
+                      >
+                        <el-option
+                          v-for="item in follow_modes"
+                          :key="item.label"
+                          :label="item.label"
+                          :value="item.id"
+                        />
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="跟进类型:" required >
+                      <el-select
+                        v-model.trim="followData.followCategoryId"
+                        placeholder="跟进类型"
+                        size="small"
+                        :clearable="true"
+                        disabled
+                      >
+                        <el-option
+                          v-for="item in follow_categories"
+                          :key="item.label"
+                          :label="item.label"
+                          :value="item.id"
+                        />
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="跟进时间:" required>
+                      <el-date-picker
+                        v-model="followData.followDate"
+                        style="width: 100%"
+                        size="small"
+                        format="YYYY-MM-DD HH:mm"
+                        type="datetime"
+                        placeholder="选择日期"
+                        disabled
+                        value-format="YYYY-MM-DD HH:mm"
+                      />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="下次跟进时间">
+                      <el-date-picker
+                        v-model="followData.nextFollowDate"
+                        :disabled-date="nextFollowDateDisable"
+                        style="width: 100%"
+                        size="small"
+                        format="YYYY-MM-DD HH:mm"
+                        type="datetime"
+                        placeholder="选择日期"
+                        value-format="YYYY-MM-DD HH:mm"
+                        disabled
+                      />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="24" style="height: auto; min-height: 24px">
+                    <el-form-item label="跟进内容:" required>
+                      <el-input
+                        v-model.trim="followData.content"
+                        disabled
+                        maxlength="200"
+                        type="textarea"
+                        :rows="2"
+                        width="100%"
+                        size="small"
+                        placeholder="请填写跟进内容"
+                        :clearable="true"
+                        show-word-limit
+                      />
+                    </el-form-item>
+                  </el-col>
+
+                  <el-col :span="24" style="padding: 15px 15px 16px 15px">
+                    <div class="details-btns-container">
+                      <el-form-item label="上传附件" required>
+                        <el-upload
+                          action="#"
+                          :http-request="upload"
+                          :with-credentials="true"
+                          :show-file-list="false"
+                          multiple
+                        >
+                          <!-- <el-button size="small" type="primary" icon="Upload"
+                            >点击上传</el-button
+                          > -->
+                        </el-upload>
+                      </el-form-item>
+                    </div>
+                    <div class="details-body" style="height: 100px">
+                      <el-table
+                        ref="filesTable"
+                        :data="fileList"
+                        size="small"
+                        height="100%"
+                        border
+                        header-row-class-name="list-header-row"
+                      >
+                        <el-table-column
+                          label="文件名"
+                          prop="fileName"
+                          align="center"
+                        >
+                          <template #default="scope">
+                            <el-link
+                              :href="`${baseUrl}${scope.row.fileUrl}`"
+                              :underline="false"
+                              target="_blank"
+                              type="primary"
+                            >
+                              {{ scope.row.fileName }}
+                            </el-link>
+                          </template>
+                        </el-table-column>
+                        <el-table-column
+                          label="文件类型"
+                          prop="fileType"
+                          width="90"
+                          align="center"
+                        >
+                          <template #default="scope">
+                            <el-link :underline="false" target="_blank">
+                              {{ scope.row.fileType }}
+                            </el-link>
+                          </template>
+                        </el-table-column>
+                        <!-- <el-table-column label="操作" width="60" align="center">
+                          <template #default="scope">
+                            <el-button
+                              link
+                              size="small"
+                              type="danger"
+                              @click="handleDelFile(scope.$index)"
+                              >删除</el-button
+                            >
+                          </template>
+                        </el-table-column> -->
+                      </el-table>
+                    </div>
+                  </el-col>
+                  <el-col
+                    :span="24"
+                    style="
+                      text-align: center;
+                      display: flex;
+                      flex-direction: row;
+                      justify-content: center;
+                    "
+                  >
+                    <!-- <el-button
+                      size="small"
+                      type="primary"
+                      style="width: 160px"
+                      @click="followSaveHandler"
+                      >发 布</el-button
+                    > -->
+                  </el-col>
+                  <br />
+                  <el-col :span="24">
+                    <br />
+                    <div class="details-head">
+                      <div class="title">
+                        <i class="fa fa-th-list" aria-hidden="true" /> 跟进记录
+                      </div>
+                      <div class="details-btns-container" style="display: flex">
+                        <el-switch
+                          v-model="followQuery.asc"
+                          style="display: inline-block height:28px; line-height:28px;"
+                          active-color="#13ce66"
+                          inactive-color="#ff4949"
+                          active-text="正序"
+                          inactive-text="倒序"
+                          size="small"
+                        />
+                      </div>
+                    </div>
+                    <div class="details-body" style="height: 200px">
+                      <el-table
+                        ref="filesTable"
+                        :data="form.followDetails"
+                        size="small"
+                        height="100%"
+                        border
+                        header-row-class-name="list-header-row"
+                      >
+                        <el-table-column
+                          type="index"
+                          label="序号"
+                          width="47"
+                          align="center"
+                        />
+                        <el-table-column
+                          label="跟进方式"
+                          prop="followMode"
+                          align="center"
+                          width="120"
+                        />
+                        <el-table-column
+                          label="跟进类型"
+                          prop="followCategory"
+                          align="center"
+                          width="120"
+                        />
+                        <el-table-column
+                          label="跟进时间"
+                          prop="followDate"
+                          align="center"
+                          width="140"
+                        />
+                        <el-table-column
+                          label="跟进内容"
+                          prop="content"
+                          align="center"
+                        />
+                        <el-table-column
+                          label="下次跟进时间"
+                          prop="nextFollowDate"
+                          align="center"
+                          width="140"
+                        />
+                        <el-table-column label="操作" align="center">
+                          <template #default="scope">
+                            <el-button
+                              link
+                              size="small"
+                              type="primary"
+                              @click="handleImageView(scope.row)"
+                              >查看</el-button
+                            >
+                            <!-- <el-button
+                              link
+                              size="small"
+                              type="danger"
+                              @click="handleDelFollow(scope.row)"
+                              >删除</el-button
+                            > -->
+                          </template>
+                        </el-table-column>
+                      </el-table>
+                    </div>
+                    <br />
+                  </el-col>
+                </el-row>
+              </div>
+            </div>
+          </el-form>
+        </div>
+      </div>
+    </el-drawer>
+    <!-- 图片预览 -->
+    <el-image-viewer
+      v-if="showViewer"
+      :url-list="currentFileList"
+      @close="closeImages"
+      :initial-index="showIndex"
+    />
+    <fileDialog ref="fileDialogRef" />
+  </div>
+</template>
+<script setup>
+import { getToken } from "@/utils/auth";
+import { EluiChinaAreaDht } from "elui-china-area-dht";
+import {
+  addFollow,
+  listFollow,
+  delFollow,
+} from "@/api/business/crm/companyFollowDetail";
+import { regionData, codeToText } from "element-china-area-data";
+import CustomerFormCom from "@/components/CustomerFormCom";
+import fileDialog from "@/views/dialog/fileDialog.vue";
+import {
+  getCompany,
+  addCompany,
+  updateCompany,
+} from "@/api/business/crm/company";
+import useUserStore from "@/store/modules/user";
+import { listSource } from "@/api/settings/source";
+import { deepClone } from "@/utils";
+import { rowNum } from "@/utils/index";
+import { uploadFile } from "@/api/tool/file";
+import { ref } from "vue";
+import {
+  incomeDefault,
+  taxTypes,
+  confirmDefault,
+  collectionMethods,
+  yesOrNo,
+} from "@/utils/default";
+const { proxy } = getCurrentInstance();
+/** 父组件传参 */
+const props = defineProps({
+  getList: {
+    type: Function,
+    default: () => {},
+  },
+});
+
+const registerMoneyUnits = ref([]);
+const mainBusinesses = ref([]);
+const taxDishes = ref([]);
+const { getList } = toRefs(props);
+const options = ref([]);
+/** 字典数组区 */
+const { develop_type } = proxy.useDict("develop_type");
+const { follow_categories } = proxy.useDict("follow_categories");
+const { contact_role } = proxy.useDict("contact_role");
+const { follow_modes } = proxy.useDict("follow_modes");
+const confirmDefaultRef = ref(confirmDefault);
+import { listLableNoPage } from "@/api/business/lable";
+const CustomerFormComRef = ref(null);
+/** 表单抽屉 页变量 */
+const title = ref("");
+const loading = ref(false);
+const multiple = ref(true);
+const visible = ref(false);
+const editStatus = ref(false);
+const isFullscreen = ref(false);
+const addDetailNum = ref(1);
+const currentMember = {};
+const provinces = ref(proxy.region.getProvinces());
+provinces.value.unshift({ code: "", name: "全部" });
+const cities = ref([]);
+const fileDialogRef = ref(null);
+
+const districts = ref([]);
+const sourceCategories = ref([]);
+const area = ref([]);
+const fileList = ref([]);
+const PermanentlyEffective = ref(false);
+const showViewer = ref(false);
+const currentFileList = ref([]);
+const showIndex = ref(0);
+const types = ref([]);
+const taxDeclarationCategories = ref([]);
+
+const baseUrl = ref(import.meta.env.VITE_APP_BASE_API);
+
+const webHost = import.meta.env.VITE_APP_BASE_API;
+const setHeaders = {
+  Authorization: getToken(),
+};
+const data = reactive({
+  form: {},
+  followData: {},
+  followQuery: {
+    isAsc: "asc",
+  },
+  rules: {
+    name: [{ required: true, message: "客户名称不能为空", trigger: "blur" }],
+    // socialCreditCode: [
+    //   { max: 18, min: 18, message: "税号为18位", trigger: "blur" },
+    // ],
+    // provinceCode: [{ validator: areaValidator, trigger: "blur" }],
+    taxType: [{ require: true, message: "纳税性质不能为空", trigger: "blur" }],
+    sourceCategoryName: [
+      { validator: sourceValidator, trigger: "change" },
+      { required: true, message: "客户来源不能为空", trigger: "change" },
+    ],
+  },
+});
+
+const { form, rules, followData, followQuery } = toRefs(data);
+
+watch(
+  followQuery,
+  () => {
+    if (followQuery.value.asc) {
+      followQuery.value.isAsc = "asc";
+    } else {
+      followQuery.value.isAsc = "desc";
+    }
+    loadFollow();
+  },
+  { deep: true }
+);
+
+const contactorEmptyData = {
+  id: null,
+  name: "",
+  position: "",
+  gender: "男",
+  phone: "",
+  email: "",
+  isMain: "是",
+  remark: "",
+};
+const companyEmptyData = {
+  id: null,
+  code: "",
+  name: "",
+  oldName: "",
+  shortName: "",
+  ownerId: "",
+  ownerName: "",
+  sourceCategoryId: "",
+  sourceCategoryName: "",
+  sourceId: "",
+  sourceName: "",
+  stageId: "",
+  stageName: "",
+  phone: "",
+  email: "",
+  contactAddress: "",
+  remark: "",
+  socialCreditCode: "",
+  mainBusinessId: "",
+  mainBusinessName: "",
+  typeId: "",
+  typeName: "",
+  legalRepresentative: "",
+  foundationDate: "",
+  licenceDate: "",
+  businessStartDate: "",
+  collectionMethod: "",
+  businessEndDate: "",
+  isPermanentlyEffective: "",
+  registerMoney: "",
+  registerMoneyUnitId: "",
+  registerMoneyUnitName: "",
+  provinceCode: "",
+  province: "",
+  cityCode: "",
+  city: "",
+  districtCode: "",
+  district: "",
+  address: "",
+  businessField: "",
+  taxTypeId: "",
+  taxTypeName: "",
+  taxDeclarationCategoryId: "",
+  taxDeclarationCategoryName: "",
+  isZero: "",
+  taxDishId: "",
+  taxDishName: "",
+  competentTaxAuthority: "",
+  annualIncome: "",
+  taxType: "",
+  taxCollectorName: "",
+  taxCollectorPhone: "",
+  taxMonth: "",
+  openingBank: "",
+  bankAccount: "",
+  companyTags: [],
+  companyTagIds: [],
+  contactors: [],
+  serviceTeams: [],
+  companyFiles: [],
+  stores: [],
+  creatorId: useUserStore().user.id,
+};
+const queryRadio = ref("base-form");
+const defaultIsZero = ref(0);
+/***********************  表单页方法 ****************************/
+
+function sourceValidator(rule, value, callback) {
+  if (form.value.sourceCategoryName === "") {
+    callback(new Error("来源类型不能为空"));
+    return;
+  }
+  if (
+    form.value.referrerDataSource !== "" &&
+    form.value.referrerDataSource != null &&
+    (form.value.sourceName === "" || form.value.sourceName == null)
+  ) {
+    callback(new Error("来源不能为空"));
+    return;
+  }
+  return callback();
+}
+
+/** 抽屉打开 */
+function open(id, position) {
+  reset();
+  visible.value = true;
+
+  if (id) {
+    getCompany(id).then((response) => {
+      form.value = response.data;
+      defaultIsZero.value = Number(response.data.isZero);
+      initRegion();
+      editStatus.value = false;
+      title.value = "修改客户";
+
+      nextTick((_) => {
+        if (position) {
+          scrollTargetTo(position);
+        } else {
+          scrollTargetTo("base-form");
+        }
+      });
+    });
+  } else {
+    editStatus.value = true;
+    title.value = "添加客户";
+  }
+  getOption()
+  console.log("字典", contact_role.value);
+}
+function getOption(){
+  listLableNoPage().then(res =>{
+     options.value = res.data
+  })
+}
+const selectedOptionLabel = computed(() => {
+      const selectedOption = options.value.find(option => option.id === form.value.customerLabelId);
+      return selectedOption ? selectedOption.lable : '';
+    });
+/** 注册资金限制 */
+function handleInput(event) {
+  if (event) {
+    var str = event;
+    var len1 = str.substr(0, 1);
+    var len2 = str.substr(1, 1);
+    //如果第一位是0,第二位不是点,就用数字把点替换掉
+    if (str.length > 1 && len1 == 0 && len2 != ".") {
+      str = str.substr(1, 1);
+    }
+    //第一位不能是.
+    if (len1 == ".") {
+      str = "";
+    }
+    //限制只能输入一个小数点
+    if (str.indexOf(".") != -1) {
+      var str_ = str.substr(str.indexOf(".") + 1);
+      if (str_.indexOf(".") != -1) {
+        str = str.substr(0, str.indexOf(".") + str_.indexOf(".") + 1);
+      }
+    }
+    //正则替换,保留数字和小数点
+    str = str.replace(/[^\d^\.]+/g, "");
+    form.value.registerMoney = str;
+  }
+}
+
+/** 注册资金计算保留两位小数 */
+function handleCompute() {
+  form.value.registerMoney = Math.round(form.value.registerMoney * 100) / 100;
+}
+
+function init() {
+  listSource()
+    .then((res) => {
+      sourceCategories.value = res.rows;
+    })
+    .catch((err) => {
+      console.log(err);
+    });
+}
+
+/**  取消按钮 */
+function cancel() {
+  visible.value = false;
+  reset();
+}
+
+/** 表单重置 */
+function reset() {
+  form.value = deepClone(companyEmptyData);
+  if (CustomerFormComRef.value) CustomerFormComRef.value.reset();
+  followData.value = {};
+  proxy.resetForm("companyRef");
+}
+
+/** 上传后方法处理 */
+function uploadSuccess(res) {
+  if (res.code == 200) {
+    const newAttach = {
+      name: res.data.name,
+      url: res.data.url,
+    };
+    form.value.attaches.push(newAttach);
+  } else {
+    proxy.$modal.msgError("上传失败" + res.msg);
+  }
+}
+
+function handleDownLoad(url) {
+  window.open(webHost + url);
+}
+
+// 全屏缩放
+function handleScreen() {
+  const dom = document.querySelector(
+    ".list-container > .el-drawer__wrapper > .el-overlay"
+  );
+  isFullscreen.value = !isFullscreen.value;
+  dom.style.position = isFullscreen.value ? "fixed" : "absolute";
+}
+
+function getForm() {
+  loading.value = true;
+  getCompany(form.value.id).then((response) => {
+    reset();
+    loading.value = false;
+    form.value = response.data;
+    PermanentlyEffective.value = form.value.isPermanentlyEffective == 1;
+    // CustomerFormCom.value.setForm(form.value);
+    console.log("刷新表单", form.value);
+  });
+}
+
+function checkZero() {
+  if (defaultIsZero.value === 1) {
+    return true;
+  } else if (
+    defaultIsZero.value != form.value.isZero &&
+    form.value.isZero === 1
+  ) {
+    proxy.$modal.msgError("不可将非零申报客户改为零申报");
+
+    return false;
+  } else {
+    return true;
+  }
+}
+
+/** 提交保存 */
+function submitForm() {
+  console.log("提交表单", form.value);
+  form.value.isPermanentlyEffective = PermanentlyEffective.value ? 1 : 0;
+  proxy.$refs["companyRef"].validate((valid) => {
+    if (valid && validDetails() && checkZero()) {
+      if (form.value.id) {
+        updateCompany(form.value).then((response) => {
+          proxy.$modal.msgSuccess("保存成功!");
+          editStatus.value = false;
+          form.value = response.data;
+          defaultIsZero.value = Number(response.data.isZero);
+          getList.value();
+        });
+      } else {
+        addCompany(form.value).then((res) => {
+          proxy.$modal.msgSuccess("保存成功!");
+          editStatus.value = false;
+          form.value = response.data;
+          defaultIsZero.value = Number(response.data.isZero);
+          getList.value();
+        });
+      }
+    }
+  });
+}
+
+/** 添加从表 */
+function handleAdd() {
+  for (var i = 0; i < addDetailNum.value; i++) {
+    form.value.members.push({});
+  }
+}
+
+/** 删除从表 */
+function handleDel(index) {
+  proxy.$modal
+    .confirm("确定删除?")
+    .then(() => {
+      form.value.members.splice(index, 1);
+    })
+    .catch(() => {
+      proxy.$modal.msg("已取消删除");
+    });
+}
+
+function handleDelAttach(index) {
+  proxy.$modal
+    .confirm("确定删除?")
+    .then(() => {
+      form.value.attaches.splice(index, 1);
+    })
+    .catch(() => {
+      proxy.$modal.msg("已取消删除");
+    });
+}
+
+/** 单选添加 */
+function handleDialogOpen(person) {
+  multiple.value = false;
+  currentMember.value = person;
+  proxy.$refs.personRef.open();
+}
+
+/** 多选添加 */
+function handleAddBatch() {
+  multiple.value = true;
+  proxy.$refs.personRef.open();
+}
+
+function handleSingleSelected(person) {
+  if (
+    form.value.members.findIndex((item) => item.personId === person.id) === -1
+  ) {
+    currentMember.value.personId = person.id;
+    currentMember.value.name = person.name;
+    currentMember.value.code = person.code;
+    currentMember.value.gender = person.gender;
+    currentMember.value.age = person.age;
+    currentMember.value.phone = person.phone;
+  } else {
+    proxy.$modal.msgError(person.name + "已存在,请勿重复添加!");
+  }
+}
+
+function handleMultipleSelected(selection) {
+  for (var i = 0; i < selection.length; ++i) {
+    const newPerson = {};
+    if (
+      form.value.members.findIndex(
+        (item) => item.personId === selection[i].id
+      ) === -1
+    ) {
+      newPerson.personId = selection[i].id;
+      newPerson.name = selection[i].name;
+      newPerson.code = selection[i].code;
+      newPerson.gender = selection[i].gender;
+      newPerson.age = selection[i].age;
+      newPerson.phone = selection[i].phone;
+      form.value.members.push(newPerson);
+    } else {
+      proxy.$modal.msgError(selection[i].name + "已存在,请勿重复添加!");
+    }
+  }
+}
+
+function scrollTargetTo(target) {
+  const targetElement = document.getElementById(target);
+  if (targetElement) {
+    targetElement.scrollIntoView();
+  }
+}
+
+async function followSaveHandler() {
+  if (
+    followData.value.followTypeId === null ||
+    followData.value.followTypeId === "0"
+  ) {
+    proxy.$modal.msgWarning("请选择跟进方式");
+    return;
+  }
+  if (
+    followData.value.followCategoryId === null ||
+    followData.value.followCategoryId === "0"
+  ) {
+    proxy.$modal.msgWarning("请选择跟进类型");
+    return;
+  }
+  if (followData.value.content == null || followData.value.content === "") {
+    proxy.$modal.msgWarning("请输入跟进内容");
+    return;
+  }
+  followData.value.companyId = form.value.id;
+  followData.value.files = fileList.value;
+  const res = await addFollow(followData.value);
+  if (res.code === 200) {
+    editStatus.value = false;
+    getForm(form.value.id);
+    getList.value();
+    followData.value = {};
+    fileList.value = [];
+    proxy.$modal.msgSuccess("发布成功");
+  } else {
+    proxy.$modal.msgError(res.message);
+  }
+}
+
+function handleAddContactor() {
+  const contactor = JSON.parse(JSON.stringify(contactorEmptyData));
+  form.value.contactors.push(contactor);
+  return;
+}
+// function areaValidator(rule, value, callback) {
+//   console.log("省份验证");
+//   if (form.value.provinceCode === "") {
+//     callback(new Error("省份不能为空"));
+//     return;
+//   }
+//   if (form.value.cityCode === "") {
+//     callback(new Error("城市不能为空"));
+//     return;
+//   }
+//   if (form.value.districtCode === "") {
+//     callback(new Error("行政区不能为空"));
+//     return;
+//   }
+
+//   return callback();
+// }
+
+function handleSelectProvince() {
+  const _provinceCode = form.value.provinceCode;
+  const _province = provinces.value.find(function (item) {
+    return item.code === _provinceCode;
+  });
+  form.value.province = _province.name;
+  cities.value = proxy.region.getCities(_provinceCode);
+  if (cities.value.length === 0) {
+    // 清空城市数据
+    form.value.cityCode = "";
+    form.value.city = "";
+    cities.value = [{ code: "", name: "全部" }];
+    // 清空行政区数据
+    form.value.districtCode = "";
+    form.value.district = "";
+    districts.value = [];
+  } else {
+    cities.value.unshift({ code: "", name: "全部" });
+    form.value.cityCode = cities.value[0].code;
+    form.value.city = cities.value[0].name;
+    handleSelectCity();
+  }
+}
+
+function handleSelectCity() {
+  console.log("市");
+  const _cityCode = form.value.cityCode;
+  const _city = cities.value.find(function (item) {
+    return item.code === _cityCode;
+  });
+  form.value.city = _city.name;
+  districts.value = proxy.region.getDistricts(_cityCode);
+  if (districts.value.length === 0) {
+    // 清空行政区数据
+    form.value.districtCode = "";
+    form.value.district = "";
+    districts.value = [{ code: "", name: "全部" }];
+  } else {
+    districts.value.unshift({ code: "", name: "全部" });
+    form.value.districtCode = districts.value[0].code;
+    form.value.district = districts.value[0].name;
+  }
+}
+
+function handleSelectDistrict() {
+  console.log("区");
+  const _districtCode = form.value.districtCode;
+  const _district = districts.value.find(function (item) {
+    return item.code === _districtCode;
+  });
+  form.value.district = _district.name;
+}
+
+function validDetails() {
+  const contactors = form.value.contactors;
+  if (contactors.length === 0) {
+    return true;
+  }
+  form.value.contactors.forEach(function (val, index) {
+    if (val.name === "") {
+      proxy.$modal.msgError(`第 ${index + 1} 行联系人的姓名不能为空`);
+      _isNull = true;
+
+      return false;
+    } else if (val.position === "") {
+      proxy.$modal.msgError(`第 ${index + 1} 行联系人的角色不能为空`);
+      _isNull = true;
+
+      return false;
+    }
+  });
+  return true;
+}
+
+function handleDelContactor(index) {
+  proxy.$modal.confirm("是否确认删除选中的数据项?").then(() => {
+    form.value.contactors.splice(index, 1);
+  });
+}
+
+function handleAreaChange(arg) {
+  if (arg != null && arg.length === 3) {
+    form.value.provinceCode = arg[0];
+    form.value.cityCode = arg[1];
+    form.value.districtCode = arg[2];
+
+    form.value.province = codeToText[arg[0]];
+    form.value.city = codeToText[arg[1]];
+    form.value.district = codeToText[arg[2]];
+  }
+}
+
+function upload(param) {
+  const formData = new FormData();
+  formData.append("file", param.file);
+  uploadFile(formData).then((res) => {
+    if (res.code === 200) {
+      const file = {};
+      file.fileName = res.newFileName;
+      file.fileType =
+        res.newFileName.split(".")[res.newFileName.split(".").length - 1];
+      file.url = res.url;
+      file.originalFileName = res.originalFilename;
+      file.fileUrl = res.fileName;
+      fileList.value.push(file);
+    }
+  });
+}
+
+function uploadFollowRemove(index) {
+  fileList.value.splice(index, 1);
+}
+
+function openFollowFile(arg) {
+  const attach = arg;
+  window.open(`${arg.url}`, arg.fileName);
+}
+
+function nextFollowDateDisable(date) {
+  const follow = proxy.moment(followData.value.followDate);
+  if (proxy.moment(date).isBefore(follow)) {
+    return true;
+  } else return false;
+}
+
+function loadFollow() {
+  followQuery.value.companyId = form.value.id;
+  listFollow(followQuery.value).then((res) => {
+    form.value.followDetails = res.rows;
+  });
+}
+
+function handleDelFollow(row) {
+  const _ids = row.id;
+  proxy.$modal
+    .confirm("是否确认删除选中的数据项?")
+    .then(function () {
+      return delFollow(_ids);
+    })
+    .then(() => {
+      loadFollow();
+      proxy.$modal.msgSuccess("删除成功!");
+    })
+    .catch(() => {});
+}
+
+/** 查看按钮事件 */
+function handleImageView(row) {
+  // let imgUrl = [];
+  // let txtUrl = [];
+  // row.files.forEach((l) => {
+  //   var res = l.fileUrl.split(".")[l.fileUrl.split(".").length - 1];
+  //   if (
+  //     res === "jpg" ||
+  //     res === "png" ||
+  //     res === "psd" ||
+  //     res === "pdf" ||
+  //     res === "gif" ||
+  //     res === "bmp"
+  //   ) {
+  //     imgUrl.push(`${baseUrl.value}${l.fileUrl}`);
+  //   } else {
+  //     txtUrl.push(`${baseUrl.value}${l.fileUrl}`);
+  //   }
+  // });
+  // if (imgUrl.length > 0) {
+  //   currentFileList.value = imgUrl;
+  //   showViewer.value = true;
+  // }
+  // if (txtUrl.length > 0) {
+  //   txtUrl.forEach((l) => {
+  //     downloadFile(l);
+  //   });
+  // }
+  fileDialogRef.value.open({
+    masterTableName: "biz_company_follow_detail",
+    masterId: row.id,
+  });
+}
+
+/** 下载事件 */
+function downloadFile(url) {
+  const iframe = document.createElement("iframe");
+  iframe.style.display = "none"; // 防止影响页面
+  iframe.style.height = 0; // 防止影响页面
+  iframe.src = url;
+  document.body.appendChild(iframe); // 这一行必须,iframe挂在到dom树上才会发请求
+  // 5分钟之后删除
+  setTimeout(() => {
+    iframe.remove();
+  }, 5 * 60 * 1000);
+}
+
+function closeImages() {
+  showViewer.value = false;
+}
+
+function taxTypeChange(item) {
+  if (item !== "个体工商户") {
+    form.value.collectionMethod = "";
+  }
+}
+
+function initRegion() {
+  console.log("省市区", form.value);
+  cities.value = proxy.region.getCities(form.value.provinceCode);
+  cities.value.unshift({ code: "", name: "全部" });
+  districts.value = proxy.region.getDistricts(form.value.cityCode);
+  districts.value.unshift({ code: "", name: "全部" });
+  console.log("省市区", cities.value, districts.value);
+}
+
+function handleDelFile(index) {
+  proxy.$modal
+    .confirm("是否确认删除选中的数据项?")
+    .then(function () {
+      fileList.value.splice(index, 1);
+    })
+    .then(() => {
+      proxy.$modal.msgSuccess("删除成功!");
+    })
+    .catch(() => {});
+}
+
+init();
+// 暴露给父组件的方法
+defineExpose({
+  open,
+});
+</script>
+
+<style>
+.radio-scroll .el-radio-button__orig-radio:checked + .el-radio-button__inner {
+  color: rgb(64, 158, 255);
+  background-color: rgba(0, 0, 0, 0);
+  border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgb(64, 158, 255)
+    rgba(0, 0, 0, 0);
+  border-style: none none solid none;
+  border-width: 0 0 3px 0;
+  box-shadow: none;
+}
+
+.radio-scroll .el-radio-button__inner {
+  border: none;
+  background-color: rgba(0, 0, 0, 0);
+  border-color: rgba(0, 0, 0, 0);
+  border-style: none none solid none;
+  border-width: 0 0 3px 0;
+  box-shadow: none;
+}
+
+.radio-scroll .el-radio-button:first-child .el-radio-button__inner {
+  border-left: none;
+  border-radius: 0 0 0 0;
+}
+
+.radio-scroll .el-radio-button:last-child .el-radio-button__inner {
+  border-radius: 0 0 0 0;
+}
+
+/* .company-list .detail-head {
+  margin-bottom: 10px;
+} */
+</style>
+
+<script>
+var inputField = document.getElementById("inputField");
+if (inputField) {
+  console.log("事件监听");
+  inputField.addEventListener("input", function () {});
+}
+</script>

Datei-Diff unterdrückt, da er zu groß ist
+ 194 - 566
src/views/business/crm/order/form.vue


+ 19 - 9
src/views/business/deduction/index.vue

@@ -86,7 +86,7 @@
       </el-table-column>
       <el-table-column label="状态" width="100" align="center">
         <template #default="scope">
-          <span v-if="scope.row.status === 0">待审核</span>
+          <span v-if="scope.row.status === 0">待确认扣款</span>
           <span v-if="scope.row.status === 1">可扣款</span>
           <span v-if="scope.row.status === 2">已扣款</span>
           <el-tooltip v-if="scope.row.status === 4" :content="scope.row.failureType === 1 ? scope.row.failureResult : '余额不足'
@@ -98,13 +98,13 @@
       </el-table-column>
       <el-table-column label="操作" fixed="right" width="220" align="center">
         <template #default="scope">
-          <template v-if="scope.row.deductible === 1">
-            <template v-if="(scope.row.status === 0 || scope.row.status === 4) &&
+          <div v-if="scope.row.deductible === 1">
+            <div v-if="(scope.row.status === 0 || scope.row.status === 4) &&
               checkConfirm(scope.row)
               ">
               <el-button v-hasPermi="['business:deduction:confirm']" link type="primary" size="small"
                 @click="showConfirm(scope.row)">确认扣款</el-button>
-            </template>
+            </div>
             <div v-if="scope.row.sourceName === '公积金'">
               <template v-if="scope.row.status === 1">
                 <el-button link v-hasPermi="['business:deduction:declare']" style="margin-right: 5px" type="primary"
@@ -120,14 +120,19 @@
               </template>
             </div>
             <div v-else>
-              <template v-if="scope.row.status === 1">
+              <div v-if="scope.row.status === 1">
                 <el-button link v-hasPermi="['business:deduction:deduction']" style="margin-right: 5px" type="primary"
                   size="small" @click="openUpload(scope.row)">扣款成功</el-button>
                 <el-button link v-hasPermi="['business:deduction:deduction']" style="margin-left: 5px; " type="primary"
                   size="small" @click="showFeedbackDialog(scope.row)">扣款失败</el-button>
-              </template>
+              </div>
+             
             </div>
-          </template>
+          </div>
+          <div v-if="scope.row.status === 2">
+            <el-button link  style="margin-left: 5px; " type="primary"
+            size="small" @click="returnInit(scope.row)" v-hasPermi="['business:deduction:return']">退回</el-button>
+          </div>
         </template>
       </el-table-column>
     </el-table>
@@ -231,7 +236,7 @@
 import {
   listDeduction,
   exportDeposition,
-  saveDeduction,
+  saveDeduction
 } from "@/api/business/production/deduction";
 import MergeTaxViewDialog from "./MergeTaxViewDialog";
 import feedbackDialog from "./feedbackDialog";
@@ -336,7 +341,12 @@ function handleOneself() {
   }
   getList();
 }
-
+function returnInit(row){
+  row.status = 0;
+  saveDeduction(row).then(res=>{
+    getList();
+  })
+}
 function radioChangeHandler(arg) {
   const query = {
     pageNum: 1,

+ 5 - 3
src/views/business/entrust/statementAccount/form.vue

@@ -12,10 +12,12 @@
 
             <el-button v-if="editStatus" type="primary" size="small" icon="Finished" @click="submitForm">保存</el-button>
             <el-button v-else-if="form.entrustOrderStatus !== 2 && form.status !== 2" type="warning" size="small"
-              icon="Edit" @click="editStatus = true">修改</el-button>
-            <el-button v-if="form.id && editStatus" type="info" size="small" icon="Close"
+              icon="Edit" @click="editStatus = true"
+              v-hasPermi="['business:statement:update']"
+              >修改</el-button>
+            <el-button v-if="form.id && editStatus" type="info"   v-hasPermi="['business:statement:update']"  size="small" icon="Close"
               @click="editStatus = false">取消修改</el-button>
-            <el-button type="warning" size="small" icon="Download" @click="exportExcel">导出</el-button>
+            <el-button type="warning" size="small" icon="Download" @click="exportExcel" v-hasPermi="['business:statement:export']">导出</el-button>
             <el-button v-if="form.id" type="success" icon="refresh" size="small" @click="getForm">
               刷新</el-button>
 

+ 1 - 1
src/views/business/entrust/statementAccount/index.vue

@@ -92,7 +92,7 @@
             type="warning"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['business:deduct:edit']"
-            >修改</el-button
+            >查看</el-button
           >
           <el-button
             v-show="scope.row.status !== 2"

+ 42 - 40
src/views/business/entrust/workOrder/currentMonth/index.vue

@@ -6,8 +6,8 @@
         v-hasPermi="['business:entrust:workOrder:current:edit']">设置委托</el-button>
       <el-button type="danger" size="small" icon="delete" :disabled="cancel" @click="delEntrustHandle"
         v-hasPermi="['business:entrust:workOrder:current:edit']">取消委托</el-button>
-      <el-button type="success" size="small" icon="Refresh" @click="transEntrustHandler"
-        v-hasPermi="['business:entrust:workOrder:current:trans']">委托流转</el-button>
+      <!-- <el-button type="success" size="small" icon="Refresh" @click="transEntrustHandler"
+        v-hasPermi="['business:entrust:workOrder:current:trans']">委托流转11</el-button> -->
       <el-dropdown trigger="click">
         <el-button type="primary" size="small">
           其它<el-icon class="el-icon--right"><arrow-down /></el-icon>
@@ -26,14 +26,15 @@
     <el-form class="list-search-container" size="small" :model="queryParams" ref="queryRef" :inline="true"
       label-width="68px">
       <el-form-item label="当前月:">{{
-        currentMonth == null
-        ? "未设定本月"
-        : moment(currentMonth).format("YYYY年MM月")
+        moment().format("YYYY年MM月")
         }}</el-form-item>
       <el-form-item label="客户名称:" prop="companyName">
         <el-input v-model="queryParams.companyName" style="width: 150px" placeholder="请输入客户名称" clearable
           @keyup.enter="handleQuery" />
       </el-form-item>
+      <el-form-item label="执行人:" prop="toAccountName">
+        <el-input v-model="queryParams.toAccountName" placeholder="请输入客户名称" clearable @keyup.enter="handleQuery" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
         <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -125,7 +126,7 @@
     exportCurrentWorkOrder,
     delEntrust,
     transNext,
-    addEntrust,
+    addEntrust,exportStore
   } from "@/api/business/entrust/currentWorkOrder";
   import SetEntrustDialog from "../setEntrustDialog";
   import useUserStore from "@/store/modules/user";
@@ -257,11 +258,12 @@
 
   /** 导出按钮操作 */
   function handleExport() {
-    exportCurrentWorkOrder(queryParams.value);
+    exportStore(queryParams.value);
   }
 
   function setCurrentMonth(month) {
-    currentMonth.value = month;
+    // currentMonth.value = month;
+    currentMonth.value = proxy.moment().format("YYYY-MM")+"-01";
   }
 
   function setEntrustHandle() {
@@ -285,44 +287,44 @@
   }
 
   function transEntrustHandler() {
-    // proxy.$modal.confirm("确定流转到下一月?").then(() => {
-    //     transNext().then((res) => {
-    //       proxy.$modal.msgSuccess("流转成功");
-    //       checkCurrentMonthHandle();
-    //     });
-    //   });
-    let currentDate = new Date().getMonth() + 1;
-    let formattedMonth = currentDate.toString().padStart(2, '0');
-    let month = currentMonth.value.split('-')[1];
-    console.log(formattedMonth);
-    if (month < formattedMonth) {
-      proxy.$modal.confirm("确定流转到下一月?").then(() => {
+    proxy.$modal.confirm("确定流转到下一月?").then(() => {
         transNext().then((res) => {
           proxy.$modal.msgSuccess("流转成功");
           checkCurrentMonthHandle();
         });
       });
-    } else {
-      // //真实月 != 当前月 
-      if (month != formattedMonth) {
-        proxy.$modal.msgError("每月只可流转一次");
-      } else {
-        let currentDay = new Date().getDate()
-        let cutoffDay = 20;
-        //如果当前月时间小于20号
-        if (currentDay < cutoffDay) {
-          proxy.$modal.msgError("每月20号后才能流转");
-        } else {
-          proxy.$modal.confirm("确定流转到下一月?").then(() => {
-            transNext().then((res) => {
-              proxy.$modal.msgSuccess("流转成功");
-              checkCurrentMonthHandle();
-            });
-          });
-        }
+    // let currentDate = new Date().getMonth() + 1;
+    // let formattedMonth = currentDate.toString().padStart(2, '0');
+    // let month = currentMonth.value.split('-')[1];
+    // console.log(formattedMonth);
+    // if (month < formattedMonth) {
+    //   proxy.$modal.confirm("确定流转到下一月?").then(() => {
+    //     transNext().then((res) => {
+    //       proxy.$modal.msgSuccess("流转成功");
+    //       checkCurrentMonthHandle();
+    //     });
+    //   });
+    // } else {
+    //   // //真实月 != 当前月 
+    //   if (month != formattedMonth) {
+    //     proxy.$modal.msgError("每月只可流转一次");
+    //   } else {
+    //     let currentDay = new Date().getDate()
+    //     let cutoffDay = 20;
+    //     //如果当前月时间小于20号
+    //     if (currentDay < cutoffDay) {
+    //       proxy.$modal.msgError("每月20号后才能流转");
+    //     } else {
+    //       proxy.$modal.confirm("确定流转到下一月?").then(() => {
+    //         transNext().then((res) => {
+    //           proxy.$modal.msgSuccess("流转成功");
+    //           checkCurrentMonthHandle();
+    //         });
+    //       });
+    //     }
 
-      }
-    }
+    //   }
+    // }
 
   }
 

+ 352 - 0
src/views/business/entrust/workOrder/historyMonth/index.vue

@@ -0,0 +1,352 @@
+<template>
+    <div class="page-container list-container">
+        <!-- 功能按钮区 -->
+        <div class="list-btns-container">
+
+        </div>
+        <!-- 搜索区 -->
+        <el-form class="list-search-container" size="small" :model="queryParams" ref="queryRef" :inline="true"
+            label-width="68px">
+            <el-form-item label="工作月:">
+                <el-date-picker v-model="queryParams.date" 
+                    format="YYYY-MM" value-format="YYYY-MM-DD" type="month" placeholder="请选择工作月"
+                    style="width: 150px"  :disabled-date="disabledDate"/>
+  
+            </el-form-item>
+            <el-form-item label="客户名称:" prop="companyName">
+                <el-input v-model="queryParams.companyName" style="width: 150px" placeholder="请输入客户名称" clearable
+                    @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="执行人:" prop="toAccountName">
+                <el-input v-model="queryParams.toAccountName" placeholder="请输入客户名称" clearable
+                    @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item>
+                <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+                <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+            </el-form-item>
+        </el-form>
+
+        <!-- 列表区 -->
+        <el-table v-loading="loading" :data="list" size="small" border height="100%"
+            @selection-change="handleSelectionChange">
+            <el-table-column type="selection" width="55" align="center" />
+            <!-- <el-table-column label="工单号" align="center" prop="workOrderNo" width="200" /> -->
+            <el-table-column label="客户名称" align="center" min-width="250" prop="companyName" />
+            <el-table-column label="税号" align="center" prop="socialCreditCode" min-width="200" />
+            <el-table-column label="工单类型" align="center" prop="amount" min-width="80">
+                <template #default="scope">
+                    {{ scope.row.type === 1 ? "循环工单" : "代办工单" }}
+                </template>
+            </el-table-column>
+            <el-table-column label="项目" align="center" prop="taskTypeName" min-width="140">
+                <template #default="scope">
+                    {{ scope.row.taskTypeName }}
+                    {{
+                    scope.row.taskTypeDetailName
+                    ? `-${scope.row.taskTypeDetailName}`
+                    : ""
+                    }}
+                </template>
+            </el-table-column>
+            <el-table-column label="起始月" align="center" width="90" min-prop="startMonth">
+                <template #default="scope">
+                    {{
+                    scope.row.type === 1
+                    ? scope.row.startMonth !="0000-00-00"
+                    ? moment(scope.row.startMonth).format("YYYY年MM月")
+                    : ""
+                    : "-"
+                    }}
+                </template>
+            </el-table-column>
+            <el-table-column label="结束月" align="center" min-width="90" prop="endMonth">
+                <template #default="scope">
+                    {{
+                    scope.row.type === 1
+                    ? scope.row.endMonth !="0000-00-00"
+                    ? moment(scope.row.endMonth).format("YYYY年MM月")
+                    : ""
+                    : "-"
+                    }}
+                </template>
+            </el-table-column>
+            <el-table-column label="工单月数" align="center" min-width="80" prop="monthNum">
+                <template #default="scope">
+                    {{ scope.row.type === 1 ? scope.row.monthNum : "-" }}
+                </template>
+            </el-table-column>
+            <el-table-column label="工单执行人" align="center" min-width="100">
+                <template #default="scope">
+                    {{
+                    scope.row.toAccountName
+                    }}
+                </template>
+            </el-table-column>
+        </el-table>
+        <!-- <contract-form ref="contractRef" :get-list="getList" /> -->
+        <!-- 分页 -->
+        <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+            v-model:limit="queryParams.pageSize" @pagination="getList" />
+        <init-month-dialog ref="initMonthDialogRef" :get-list="checkCurrentMonthHandle"
+            :setCurrentMonth="setCurrentMonth" />
+
+        <set-entrust-dialog ref="setEntrustDialogRef" :get-list="getList" @submit="handleAddEntrust" />
+
+    </div>
+</template>
+
+<script setup name="Company">
+    import InitMonthDialog from "../initMonthDialog";
+    import { getToken, getTenant } from "@/utils/auth";
+    import {
+        listCurrentWorkOrder,
+        checkCurrent,
+        exportCurrentWorkOrder,
+        delEntrust,
+        transNext,
+        addEntrust, listHistory
+    } from "@/api/business/entrust/currentWorkOrder";
+    import SetEntrustDialog from "../setEntrustDialog";
+    import useUserStore from "@/store/modules/user";
+    // import { ca } from "element-plus/es/locale";
+    const { proxy } = getCurrentInstance();
+    const currentMonth = ref(null);
+    /** 字典数组区 */
+    /** 查询 对象 */
+
+    const list = ref([]);
+    const loading = ref(true);
+    const cancel = ref(true);
+    const multiple = ref(true);
+    const ids = ref([]);
+    const selections = ref([]);
+    const single = ref(false);
+    const total = ref(0);
+    const prev = ref([]);
+    const tenantId = ref(getTenant());
+    const permissions = useUserStore().permissions;
+    const all_permission = "*:*:*";
+
+    const initMonthDialogRef = ref(null);
+    const setEntrustDialogRef = ref(null);
+
+    const showInitMonth = ref(false);
+
+    const { contract_verify_status } = proxy.useDict("contract_verify_status");
+    const { contract_status } = proxy.useDict("contract_status");
+  /** 查询对象 */
+  const queryParams = ref({
+    pageNum: 1,
+    pageSize: 20,
+    companyName: "",
+    noContract: 0,
+    type: 1,
+  });
+
+    const editStatus = {
+        startMonth: false,
+    };
+    // function disabledDate(time) {
+    //     const currentMonth = new Date().getMonth();
+    //     const selectedMonth = time.getMonth();
+    //     const currentYear = new Date().getFullYear();
+    //     const selectedYear = time.getFullYear();
+
+    //     // 禁用当前年份之后的所有月份
+    //     if (selectedYear > currentYear) {
+    //         return true;
+    //     }
+
+    //     // 如果选择的是当前年份,只能选择当前月份之前的月份
+    //     return selectedYear === currentYear && selectedMonth >= currentMonth;
+    // }
+
+    function checkCurrentMonthHandle() {
+        checkCurrent().then((res) => {
+            if (res.data.checkResult === true) {
+                setCurrentMonth(res.data.currentMonth);
+                getList();
+            } else {
+                showInitMonthDialog();
+            }
+        });
+    }
+
+    function showInitMonthDialog() {
+        initMonthDialogRef.value.open();
+    }
+
+    /***********************  方法区  ****************************/
+    // 禁用当前月及之后的月份
+    const beforeCurrentMonth = (time) => {
+        const currentMonth = new Date().getMonth();
+        const selectedMonth = time.getMonth();
+        return selectedMonth >= currentMonth;
+    };
+    /** 查询company列表 */
+    function getList() {
+        loading.value = true;
+        console.log(queryParams.value);
+
+        queryParams.value.currentMonth = currentMonth.value;
+        listHistory(queryParams.value).then((response) => {
+            list.value = response.rows;
+            console.log(response);
+            total.value = response.total;
+        }).finally(() => {
+            loading.value = false;
+        });
+    }
+
+    /** 取消委托按钮操作 */
+    function cancelEntrust() {
+        if (selections.value.length === 0) {
+            proxy.$modal.msgError("请选择要取消委托的数据");
+            return;
+        }
+        proxy.$modal
+            .confirm("是否确认取消委托?")
+            .then(function () {
+
+            });
+    }
+
+    //判断是否有权限
+    function viewAdviser(quer) {
+        return permissions.includes(all_permission) || permissions.includes(quer);
+    }
+
+    /** 搜索按钮操作 */
+    function handleQuery() {
+        queryParams.value.pageNum = 1;
+        getList();
+    }
+
+    /** 重置按钮操作 */
+    function resetQuery() {
+        proxy.resetForm("queryRef");
+        handleQuery();
+    }
+    /** 新增导入操作 */
+    function exportZero() {
+        proxy.$refs.exportRef.open();
+    }
+    // 多选框选中数据
+    function handleSelectionChange(selection) {
+        ids.value = selection.map((item) => item.id);
+        selections.value = selection;
+
+        //取消委托计数
+        let cancelNum = 0;
+        //设置委托计数
+        let multipleNum = 0;
+        //判断是否有执行人
+        selections.value.forEach((item) => {
+            if (item.entrust) {
+                //有执行人
+                if (item.entrust.toAccountName) {
+                    cancelNum++;
+                }
+            }
+            //没有执行人
+            if (!item.entrust) {
+                multipleNum++;
+            }
+        });
+
+        //判断是否有选中数据
+        if (!selections.value.length > 0) {
+            multiple.value = true;
+            cancel.value = true;
+        } //判断是否设置执行人和设置委托选中
+        else if (cancelNum > 0 && multipleNum > 0) {
+            cancel.value = cancelNum > 0;
+            multiple.value = multipleNum > 0;
+        } else {
+            cancel.value = !cancelNum > 0;
+            multiple.value = !multipleNum > 0;
+        }
+    }
+
+    /** 导出按钮操作 */
+    function handleExport() {
+        exportCurrentWorkOrder(queryParams.value);
+    }
+
+    function setCurrentMonth(month) {
+        currentMonth.value = month;
+    }
+
+    function setEntrustHandle() {
+        setEntrustDialogRef.value.open({
+            selections: selections.value,
+            optionCurrentMonth: currentMonth.value,
+        });
+    }
+
+    function delEntrustHandle() {
+        const entrust = {
+            workMonth: currentMonth.value,
+            workOrderIds: ids.value,
+        };
+        proxy.$modal.confirm("是否确认取消委托?").then(() => {
+            delEntrust(entrust).then((res) => {
+                proxy.$modal.msgSuccess("取消成功");
+                getList();
+            });
+        });
+    }
+
+    function transEntrustHandler() {
+        // proxy.$modal.confirm("确定流转到下一月?").then(() => {
+        //     transNext().then((res) => {
+        //       proxy.$modal.msgSuccess("流转成功");
+        //       checkCurrentMonthHandle();
+        //     });
+        //   });
+        let currentDate = new Date().getMonth() + 1;
+        let formattedMonth = currentDate.toString().padStart(2, '0');
+        let month = currentMonth.value.split('-')[1];
+        console.log(formattedMonth);
+        if (month < formattedMonth) {
+            proxy.$modal.confirm("确定流转到下一月?").then(() => {
+                transNext().then((res) => {
+                    proxy.$modal.msgSuccess("流转成功");
+                    checkCurrentMonthHandle();
+                });
+            });
+        } else {
+            // //真实月 != 当前月 
+            if (month != formattedMonth) {
+                proxy.$modal.msgError("每月只可流转一次");
+            } else {
+                let currentDay = new Date().getDate()
+                let cutoffDay = 20;
+                //如果当前月时间小于20号
+                if (currentDay < cutoffDay) {
+                    proxy.$modal.msgError("每月20号后才能流转");
+                } else {
+                    proxy.$modal.confirm("确定流转到下一月?").then(() => {
+                        transNext().then((res) => {
+                            proxy.$modal.msgSuccess("流转成功");
+                            checkCurrentMonthHandle();
+                        });
+                    });
+                }
+
+            }
+        }
+
+    }
+
+    function handleAddEntrust(data) {
+        addEntrust(data).then((response) => {
+            proxy.$modal.msgSuccess("设置完成!");
+            setEntrustDialogRef.value.cancel();
+            getList();
+        });
+    }
+
+    checkCurrentMonthHandle();
+</script>

+ 353 - 0
src/views/business/entrust/workOrder/nextMonth/export.vue

@@ -0,0 +1,353 @@
+<template>
+    <!-- 添加或修改菜单对话框 -->
+    <el-dialog
+      title="客户添加"
+      v-model="visible"
+      width="680px"
+      append-to-body
+      draggable
+      :close-on-click-modal = "false"
+    >
+      <el-form
+        ref="companyRef"
+        :model="form"
+        size="small"
+        :rules="rules"
+        label-width="100px"
+      >
+        <el-row>
+          <el-col v:span="24">
+            <el-form-item label="上传">
+              <el-upload
+                ref="uploadRef"
+                :limit="1"
+                accept=".xlsx, .xls"
+                :headers="upload.headers"
+                :action="upload.url + '?updateSupport=' + upload.updateSupport"
+                :disabled="upload.isUploading"
+                :on-progress="handleFileUploadProgress"
+                :on-success="handleFileSuccess"
+                :auto-upload="false"
+                drag
+              >
+                <el-icon class="el-icon--upload">
+                  <upload-filled />
+                </el-icon>
+                <div class="el-upload__text">
+                  将文件拖到此处,或<em>点击上传</em>
+                </div>
+                <template #tip>
+                  <div class="el-upload__tip text-center">
+                    <div class="el-upload__tip">
+                      <!-- <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据 -->
+                    </div>
+                    <span>仅允许导入xls、xlsx格式文件。</span>
+                    <el-link
+                      type="primary"
+                      :underline="false"
+                      style="font-size: 12px; vertical-align: baseline"
+                      @click="importTemplate()"
+                      >下载模板</el-link
+                    >
+                  </div>
+                </template>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button
+            type="primary"
+            icon="Finished"
+            size="small"
+            @click="submitForm"
+            >确 定</el-button
+          >
+          <el-button @click="cancel" icon="close" size="small">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </template>
+  
+  
+  <script setup>
+  import { getToken, getTenant } from "@/utils/auth";
+  import CustomerFormCom from "@/components/CustomerFormCom";
+  import { listChannel } from "@/api/business/channel";
+  import useUserStore from "@/store/modules/user";
+  import { listUser } from "@/api/system/user";
+  import { listSource } from "@/api/settings/source";
+  import { deepClone } from "@/utils";
+  import { ref } from "vue";
+  import zTool from '@/utils/zTool'
+  // import { incomeDefault, taxTypes, confirmDefault } from "@/utils/default"
+  const { proxy } = getCurrentInstance();
+  /** 父组件传参 */
+  const props = defineProps({
+    getList: {
+      type: Function,
+      default: () => {},
+    },
+  });
+  const { getList } = toRefs(props);
+  /** 字典数组区 */
+  const { develop_type } = proxy.useDict("develop_type");
+  /** 表单抽屉 页变量 */
+  const title = ref("");
+  const loading = ref(false);
+  const multiple = ref(true);
+  const visible = ref(false);
+  
+  const editStatus = ref(false);
+  const sourceCategoryId = ref("");
+  const isFullscreen = ref(false);
+  const currentSource = ref({});
+  const addDetailNum = ref(1);
+  const currentMember = {};
+  const provinces = ref(proxy.region.getProvinces());
+  provinces.value.unshift({ code: "", name: "全部" });
+  const cities = ref([]);
+  const districts = ref([]);
+  
+  const sourceCategories = ref([]);
+  
+
+  
+  const webHost = import.meta.env.VITE_APP_BASE_API;
+  
+  const setHeaders = {
+    Authorization: getToken(),
+  };
+  const data = reactive({
+    form: {},
+    followData: {},
+    rules: {
+      name: [{ required: true, message: "客户名称不能为空", trigger: "blur" }],
+      sourceCategoryName: [
+        { validator: sourceValidator, trigger: "change" },
+        { required: true, message: "客户来源不能为空", trigger: "change" },
+      ],
+    },
+  });
+  const addComRef = ref(null);
+  
+  /*** 客户导入参数 */
+  const upload = reactive({
+    // 是否禁用上传
+    isUploading: false,
+    // 设置上传的请求头部
+    headers: { Authorization: "Bearer " + getToken(), tenantId: getTenant() },
+    // 上传的地址
+    url: "/ezhizao-yzbh-entrust/business/workOrderCurrent/importEntrustNext",
+  });
+  
+  function sourceValidator(rule, value, callback) {
+    console.log(form.value.reffererDataSource, form.value.sourceName);
+    if (form.value.sourceCategoryName === "") {
+      callback(new Error("来源类型不能为空"));
+      return;
+    }
+    if (
+      form.value.referrerDataSource !== "" &&
+      form.value.referrerDataSource != null &&
+      form.value.sourceName === ""
+    ) {
+      callback(new Error("来源不能为空"));
+      return;
+    }
+    return callback();
+  }
+  
+  //设置负责人
+  function handleSelectEmployee(item) {
+    form.value.leaderId = item.userId;
+    form.value.leaderName = item.nickName;
+  }
+  
+  //设置客服
+  function handleSelect(item) {
+    form.value.adviserId = item.userId;
+    form.value.adviserName = item.nickName;
+  }
+  
+  function handlerChangeCategory(value) {
+    form.value.sourceId = null;
+    form.value.sourceName = "";
+    handlerSelectCategory();
+  }
+  
+  function handlerSelectCategory() {
+    form.value.sourceCategoryId = sourceCategoryId.value;
+    // formData.value.referrerDataSource = currentSource.value.referrerDataSource
+    const index = sourceCategories.value.findIndex(
+      (l) => l.id === sourceCategoryId.value
+    );
+    currentSource.value = index >= 0 ? sourceCategories.value[index] : {};
+    var item = sourceCategories.value.find(
+      (emp) => emp.id === sourceCategoryId.value
+    );
+    if (item) {
+      form.value.sourceCategoryName = item.title;
+      form.value.referrerDataSource = item.referrerDataSource;
+    }
+  }
+  
+  /** 输入框输出建议 */
+  function querySearchAsync(queryString, cb) {
+    const query = { keyword: queryString };
+    listUser(query).then((res) => {
+      cb(res.rows);
+    });
+  }
+  
+  const contactorEmptyData = {
+    id: null,
+    name: "",
+    position: "",
+    gender: "男",
+    phone: "",
+    email: "",
+    isMain: "是",
+    remark: "",
+  };
+  
+  const companyEmptyData = {
+    id: null,
+    code: "",
+    name: "",
+    oldName: "",
+    shortName: "",
+    ownerId: "",
+    ownerName: "",
+    sourceCategoryId: "",
+    sourceCategoryName: "",
+    sourceId: "",
+    sourceName: "",
+    stageId: "",
+    stageName: "",
+    phone: "",
+    email: "",
+    contactAddress: "",
+    remark: "",
+    socialCreditCode: "",
+    mainBusinessId: "",
+    mainBusinessName: "",
+    typeId: "",
+    typeName: "",
+    legalRepresentative: "",
+    foundationDate: "",
+    licenceDate: "",
+    businessStartDate: "",
+    collectionMethod: "",
+    businessEndDate: "",
+    isPermanentlyEffective: "",
+    registerMoney: "",
+    registerMoneyUnitId: "",
+    registerMoneyUnitName: "",
+    provinceCode: "",
+    province: "",
+    cityCode: "",
+    city: "",
+    districtCode: "",
+    district: "",
+    address: "",
+    businessField: "",
+    taxTypeId: "",
+    taxTypeName: "",
+    taxDeclarationCategoryId: "",
+    taxDeclarationCategoryName: "",
+    isZero: "",
+    taxDishId: "",
+    taxDishName: "",
+    competentTaxAuthority: "",
+    annualIncome: "",
+    taxType: "",
+    taxCollectorName: "",
+    taxCollectorPhone: "",
+    taxMonth: "",
+    openingBank: "",
+    bankAccount: "",
+    companyTags: [],
+    companyTagIds: [],
+    contactors: [],
+    serviceTeams: [],
+    companyFiles: [],
+    stores: [],
+    creatorId: useUserStore().user.id,
+  };
+  
+  const followQuery = ref({});
+  const { form, rules, followData } = toRefs(data);
+  
+  /***********************  表单页方法 ****************************/
+  
+  /** 抽屉打开 */
+  function open() {
+    reset();
+    form.value.leaderName = useUserStore().user.nickName;
+    form.value.leaderId = useUserStore().user.userId;
+    visible.value = true;
+  }
+  
+  function init() {
+    listSource()
+      .then((res) => {
+        // console.log(res)
+        sourceCategories.value = res.rows;
+        // console.log(sourceCategories.value)
+      })
+      .catch((err) => {
+        console.log(err);
+      });
+  }
+  
+  function reset() {
+    form.value = deepClone(companyEmptyData);
+    // console.log(addComRef.value)
+    if (addComRef.value != null) addComRef.value.reset();
+  }
+  
+  function cancel() {
+    visible.value = false;
+  }
+  
+  function submitForm() {
+      submitFileForm();
+  }
+
+  function  importTemplate(){
+    zTool.zDownloadTemplate('委托导入模板.xlsx')
+  }
+  /**文件上传中处理 */
+  const handleFileUploadProgress = (event, file, fileList) => {
+    upload.isUploading = true;
+  };
+  /** 文件上传成功处理 */
+  const handleFileSuccess = (response, file, fileList) => {
+    upload.open = false;
+    upload.isUploading = false;
+    proxy.$refs["uploadRef"].handleRemove(file);
+    proxy.$alert(
+      "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
+        response.msg +
+        "</div>",
+      "导入结果",
+      { dangerouslyUseHTMLString: true }
+    );
+    getList.value();
+  };
+  /** 提交上传文件 */
+  function submitFileForm() {
+    proxy.$refs["uploadRef"].submit();
+  }
+  
+  // 暴露给父组件的方法
+  defineExpose({
+    open,
+  });
+  init();
+  </script>
+  
+  <style></style>

+ 20 - 6
src/views/business/entrust/workOrder/nextMonth/index.vue

@@ -36,6 +36,7 @@
           </el-dropdown-menu>
         </template>
       </el-dropdown>
+      <el-button style="margin-left: 5px;" type="primary" size="small" icon="Plus" @click="exportZero">导入委托</el-button>
     </div>
     <!-- 搜索区 -->
     <el-form
@@ -47,9 +48,7 @@
       label-width="68px"
     >
       <el-form-item label="当前月:">{{
-        currentMonth == null
-          ? "未设定本月"
-          : moment(currentMonth).format("YYYY年MM月")
+       moment().add(1, 'month').format("YYYY年MM月")
       }}</el-form-item>
       <el-form-item label="客户名称:" prop="companyName">
         <el-input
@@ -60,6 +59,14 @@
           @keyup.enter="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="执行人:" prop="toAccountName">
+        <el-input
+          v-model="queryParams.toAccountName"
+          placeholder="请输入客户名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery"
           >搜索</el-button
@@ -168,6 +175,7 @@
         </template>
       </el-table-column>
     </el-table>
+    <exports ref="exportRef" :get-list="getList"></exports>
     <!-- 分页 -->
     <pagination
       v-show="total > 0"
@@ -191,6 +199,7 @@
 
 <script setup name="Company">
 import InitMonthDialog from "../initMonthDialog";
+import exports from "./export.vue"
 import {
   listNextWorkORder,
   checkCurrent,
@@ -198,6 +207,7 @@ import {
   delEntrust,
   addEntrust,
 } from "@/api/business/entrust/nextWorkOrder";
+import{exportNextStore}   from "@/api/business/entrust/currentWorkOrder";
 import SetEntrustDialog from "../setEntrustDialog";
 import useUserStore from "@/store/modules/user";
 const { proxy } = getCurrentInstance();
@@ -253,7 +263,10 @@ function checkCurrentMonthHandle() {
 function viewAdviser(quer) {
   return permissions.includes(all_permission) || permissions.includes(quer);
 }
-
+  /** 新增导入操作 */
+  function exportZero() {
+    proxy.$refs.exportRef.open();
+  }
 function showInitMonthDialog() {
   initMonthDialogRef.value.open();
 }
@@ -322,11 +335,12 @@ function handleSelectionChange(selection) {
 
 /** 导出按钮操作 */
 function handleExport() {
-  exportNextWorkOrder(queryParams.value);
+  exportNextStore(queryParams.value);
 }
 
 function setCurrentMonth(month) {
-  currentMonth.value = month;
+  // currentMonth.value = month;
+  currentMonth.value = proxy.moment().add(1, 'month').format("YYYY-MM")+"-01";
 }
 
 function setEntrustHandle() {

+ 10 - 9
src/views/business/entrust/workOrderForFactory/currentMonth/index.vue

@@ -2,8 +2,8 @@
   <div class="page-container list-container">
     <!-- 功能按钮区 -->
     <div class="list-btns-container">
-      <el-button type="success" size="small" icon="Refresh" @click="transEntrustHandler"
-        v-hasPermi="['business:entrust:workOrder:current:trans']">委托流转</el-button>
+      <!-- <el-button type="success" size="small" icon="Refresh" @click="transEntrustHandler"
+        v-hasPermi="['business:entrust:workOrder:current:trans']">委托流转</el-button> -->
       <el-dropdown trigger="click">
         <el-button type="primary" size="small">
           其它<el-icon class="el-icon--right"><arrow-down /></el-icon>
@@ -21,13 +21,14 @@
     <el-form class="list-search-container" size="small" :model="queryParams" ref="queryRef" :inline="true"
       label-width="68px">
       <el-form-item label="当前月:">{{
-        currentMonth == null
-        ? "未设定本月"
-        : moment(currentMonth).format("YYYY年MM月")
+       moment().format("YYYY年MM月")
         }}</el-form-item>
       <el-form-item label="客户名称:" prop="companyName">
         <el-input v-model="queryParams.companyName" placeholder="请输入客户名称" clearable @keyup.enter="handleQuery" />
       </el-form-item>
+      <el-form-item label="来源:" prop="fromCompanyName">
+        <el-input v-model="queryParams.fromCompanyName" placeholder="请输入来源" clearable @keyup.enter="handleQuery" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
         <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -84,7 +85,7 @@
           {{ scope.row.type === 1 ? scope.row.monthNum : "-" }}
         </template>
       </el-table-column>
-      <el-table-column label="工单执行人" align="center" width="100">
+      <el-table-column label="工单执行人" align="center" width="150">
         <template #default="scope">
           {{
           scope.row.entrust != null
@@ -113,7 +114,7 @@
   } from "@/api/business/entrust/currentWorkOrder";
   import InitMonthDialog from "../initMonthDialog";
   import useUserStore from "@/store/modules/user";
-
+  import{exportFactory}   from "@/api/business/entrust/currentWorkOrder";
   const { proxy } = getCurrentInstance();
   const currentMonth = ref(null);
   /** 字典数组区 */
@@ -206,11 +207,11 @@
 
   /** 导出按钮操作 */
   function handleExport() {
-    exportCurrentWorkOrder(queryParams.value);
+    exportFactory(queryParams.value);
   }
 
   function setCurrentMonth(month) {
-    currentMonth.value = month;
+    currentMonth.value = proxy.moment().format("YYYY-MM")+"-01";
   }
 
   function setEntrustHandle() {

+ 348 - 0
src/views/business/entrust/workOrderForFactory/history/index.vue

@@ -0,0 +1,348 @@
+<template>
+  <div class="page-container list-container">
+      <!-- 功能按钮区 -->
+      <div class="list-btns-container">
+
+      </div>
+      <!-- 搜索区 -->
+      <el-form class="list-search-container" size="small" :model="queryParams" ref="queryRef" :inline="true"
+          label-width="68px">
+          <el-form-item label="工作月:">
+              <el-date-picker v-model="queryParams.date" format="YYYY-MM" value-format="YYYY-MM-DD" type="month"
+                  placeholder="请选择工作月" :disabled-date="disabledDate"></el-date-picker>
+          </el-form-item>
+          <el-form-item label="客户名称:" prop="companyName">
+              <el-input v-model="queryParams.companyName" style="width: 150px" placeholder="请输入客户名称" clearable
+                  @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="来源:" prop="fromCompanyName">
+            <el-input v-model="queryParams.fromCompanyName" placeholder="请输入来源" clearable @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item>
+              <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+              <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          </el-form-item>
+      </el-form>
+
+      <!-- 列表区 -->
+      <el-table v-loading="loading" :data="list" size="small" border height="100%"
+          @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" />
+          <!-- <el-table-column label="工单号" align="center" prop="workOrderNo" width="200" /> -->
+          <el-table-column label="客户名称" align="center" min-width="250" prop="companyName" />
+          <el-table-column label="税号" align="center" prop="socialCreditCode" min-width="200" />
+          <el-table-column label="来源" align="center" width="100" prop="fromCompanyName" />
+          <el-table-column label="工单类型" align="center" prop="amount" min-width="80">
+              <template #default="scope">
+                  {{ scope.row.type === 1 ? "循环工单" : "代办工单" }}
+              </template>
+          </el-table-column>
+          <el-table-column label="项目" align="center" prop="taskTypeName" min-width="140">
+              <template #default="scope">
+                  {{ scope.row.taskTypeName }}
+                  {{
+                  scope.row.taskTypeDetailName
+                  ? `-${scope.row.taskTypeDetailName}`
+                  : ""
+                  }}
+              </template>
+          </el-table-column>
+          <el-table-column label="起始月" align="center" width="90" min-prop="startMonth">
+              <template #default="scope">
+                  {{
+                  scope.row.type === 1
+                  ? scope.row.startMonth !="0000-00-00"
+                  ? moment(scope.row.startMonth).format("YYYY年MM月")
+                  : ""
+                  : "-"
+                  }}
+              </template>
+          </el-table-column>
+          <el-table-column label="结束月" align="center" min-width="90" prop="endMonth">
+              <template #default="scope">
+                  {{
+                  scope.row.type === 1
+                  ? scope.row.endMonth !="0000-00-00"
+                  ? moment(scope.row.endMonth).format("YYYY年MM月")
+                  : ""
+                  : "-"
+                  }}
+              </template>
+          </el-table-column>
+          <el-table-column label="工单月数" align="center" min-width="80" prop="monthNum">
+              <template #default="scope">
+                  {{ scope.row.type === 1 ? scope.row.monthNum : "-" }}
+              </template>
+          </el-table-column>
+          <el-table-column label="工单执行人" align="center" min-width="100">
+              <template #default="scope">
+                  {{
+                  scope.row.toAccountName
+                  }}
+              </template>
+          </el-table-column>
+      </el-table>
+      <!-- <contract-form ref="contractRef" :get-list="getList" /> -->
+      <!-- 分页 -->
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+          v-model:limit="queryParams.pageSize" @pagination="getList" />
+      <init-month-dialog ref="initMonthDialogRef" :get-list="checkCurrentMonthHandle"
+          :setCurrentMonth="setCurrentMonth" />
+
+      <set-entrust-dialog ref="setEntrustDialogRef" :get-list="getList" @submit="handleAddEntrust" />
+
+  </div>
+</template>
+
+<script setup name="Company">
+  import InitMonthDialog from "../initMonthDialog";
+  import { getToken, getTenant } from "@/utils/auth";
+  import {
+      listCurrentWorkOrder,
+      checkCurrent,
+      exportCurrentWorkOrder,
+      delEntrust,
+      transNext,
+      addEntrust, listHistory
+  } from "@/api/business/entrust/currentWorkOrder";
+  import SetEntrustDialog from "../setEntrustDialog";
+  import useUserStore from "@/store/modules/user";
+  // import { ca } from "element-plus/es/locale";
+  const { proxy } = getCurrentInstance();
+  const currentMonth = ref(null);
+  /** 字典数组区 */
+  /** 查询 对象 */
+
+  const list = ref([]);
+  const loading = ref(true);
+  const cancel = ref(true);
+  const multiple = ref(true);
+  const ids = ref([]);
+  const selections = ref([]);
+  const single = ref(false);
+  const total = ref(0);
+  const prev = ref([]);
+  const tenantId = ref(getTenant());
+  const permissions = useUserStore().permissions;
+  const all_permission = "*:*:*";
+
+  const initMonthDialogRef = ref(null);
+  const setEntrustDialogRef = ref(null);
+
+  const showInitMonth = ref(false);
+
+  const { contract_verify_status } = proxy.useDict("contract_verify_status");
+  const { contract_status } = proxy.useDict("contract_status");
+  /** 查询对象 */
+  const queryParams = ref({
+      pageNum: 1,
+      pageSize: 20,
+
+  });
+
+  const editStatus = {
+      startMonth: false,
+  };
+//   function disabledDate(time) {
+//       const currentMonth = new Date().getMonth();
+//       const selectedMonth = time.getMonth();
+//       const currentYear = new Date().getFullYear();
+//       const selectedYear = time.getFullYear();
+
+//       // 禁用当前年份之后的所有月份
+//       if (selectedYear > currentYear) {
+//           return true;
+//       }
+
+//       // 如果选择的是当前年份,只能选择当前月份之前的月份
+//       return selectedYear === currentYear && selectedMonth >= currentMonth;
+//   }
+
+  function checkCurrentMonthHandle() {
+      checkCurrent().then((res) => {
+          if (res.data.checkResult === true) {
+              setCurrentMonth(res.data.currentMonth);
+              getList();
+          } else {
+              showInitMonthDialog();
+          }
+      });
+  }
+
+  function showInitMonthDialog() {
+      initMonthDialogRef.value.open();
+  }
+
+  /***********************  方法区  ****************************/
+  // 禁用当前月及之后的月份
+  const beforeCurrentMonth = (time) => {
+      const currentMonth = new Date().getMonth();
+      const selectedMonth = time.getMonth();
+      return selectedMonth >= currentMonth;
+  };
+  /** 查询company列表 */
+  function getList() {
+      loading.value = true;
+      console.log(queryParams.value);
+
+      queryParams.value.currentMonth = currentMonth.value;
+      listHistory(queryParams.value).then((response) => {
+          list.value = response.rows;
+          console.log(response);
+          total.value = response.total;
+      }).finally(() => {
+          loading.value = false;
+      });
+  }
+
+  /** 取消委托按钮操作 */
+  function cancelEntrust() {
+      if (selections.value.length === 0) {
+          proxy.$modal.msgError("请选择要取消委托的数据");
+          return;
+      }
+      proxy.$modal
+          .confirm("是否确认取消委托?")
+          .then(function () {
+
+          });
+  }
+
+  //判断是否有权限
+  function viewAdviser(quer) {
+      return permissions.includes(all_permission) || permissions.includes(quer);
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+      queryParams.value.pageNum = 1;
+      getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+      proxy.resetForm("queryRef");
+      handleQuery();
+  }
+  /** 新增导入操作 */
+  function exportZero() {
+      proxy.$refs.exportRef.open();
+  }
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+      ids.value = selection.map((item) => item.id);
+      selections.value = selection;
+
+      //取消委托计数
+      let cancelNum = 0;
+      //设置委托计数
+      let multipleNum = 0;
+      //判断是否有执行人
+      selections.value.forEach((item) => {
+          if (item.entrust) {
+              //有执行人
+              if (item.entrust.toAccountName) {
+                  cancelNum++;
+              }
+          }
+          //没有执行人
+          if (!item.entrust) {
+              multipleNum++;
+          }
+      });
+
+      //判断是否有选中数据
+      if (!selections.value.length > 0) {
+          multiple.value = true;
+          cancel.value = true;
+      } //判断是否设置执行人和设置委托选中
+      else if (cancelNum > 0 && multipleNum > 0) {
+          cancel.value = cancelNum > 0;
+          multiple.value = multipleNum > 0;
+      } else {
+          cancel.value = !cancelNum > 0;
+          multiple.value = !multipleNum > 0;
+      }
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+      exportCurrentWorkOrder(queryParams.value);
+  }
+
+  function setCurrentMonth(month) {
+      currentMonth.value = month;
+  }
+
+  function setEntrustHandle() {
+      setEntrustDialogRef.value.open({
+          selections: selections.value,
+          optionCurrentMonth: currentMonth.value,
+      });
+  }
+
+  function delEntrustHandle() {
+      const entrust = {
+          workMonth: currentMonth.value,
+          workOrderIds: ids.value,
+      };
+      proxy.$modal.confirm("是否确认取消委托?").then(() => {
+          delEntrust(entrust).then((res) => {
+              proxy.$modal.msgSuccess("取消成功");
+              getList();
+          });
+      });
+  }
+
+  function transEntrustHandler() {
+      // proxy.$modal.confirm("确定流转到下一月?").then(() => {
+      //     transNext().then((res) => {
+      //       proxy.$modal.msgSuccess("流转成功");
+      //       checkCurrentMonthHandle();
+      //     });
+      //   });
+      let currentDate = new Date().getMonth() + 1;
+      let formattedMonth = currentDate.toString().padStart(2, '0');
+      let month = currentMonth.value.split('-')[1];
+      console.log(formattedMonth);
+      if (month < formattedMonth) {
+          proxy.$modal.confirm("确定流转到下一月?").then(() => {
+              transNext().then((res) => {
+                  proxy.$modal.msgSuccess("流转成功");
+                  checkCurrentMonthHandle();
+              });
+          });
+      } else {
+          // //真实月 != 当前月 
+          if (month != formattedMonth) {
+              proxy.$modal.msgError("每月只可流转一次");
+          } else {
+              let currentDay = new Date().getDate()
+              let cutoffDay = 20;
+              //如果当前月时间小于20号
+              if (currentDay < cutoffDay) {
+                  proxy.$modal.msgError("每月20号后才能流转");
+              } else {
+                  proxy.$modal.confirm("确定流转到下一月?").then(() => {
+                      transNext().then((res) => {
+                          proxy.$modal.msgSuccess("流转成功");
+                          checkCurrentMonthHandle();
+                      });
+                  });
+              }
+
+          }
+      }
+
+  }
+
+  function handleAddEntrust(data) {
+      addEntrust(data).then((response) => {
+          proxy.$modal.msgSuccess("设置完成!");
+          setEntrustDialogRef.value.cancel();
+          getList();
+      });
+  }
+
+  checkCurrentMonthHandle();
+</script>

+ 15 - 6
src/views/business/entrust/workOrderForFactory/nextMonth/index.vue

@@ -29,9 +29,7 @@
       label-width="68px"
     >
       <el-form-item label="当前月:">{{
-        currentMonth == null
-          ? "未设定本月"
-          : moment(currentMonth).format("YYYY年MM月")
+     moment().add(1, 'month').format("YYYY年MM月")
       }}</el-form-item>
       <el-form-item label="客户名称:" prop="companyName">
         <el-input
@@ -41,6 +39,9 @@
           @keyup.enter="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="来源:" prop="fromCompanyName">
+        <el-input v-model="queryParams.fromCompanyName" placeholder="请输入来源" clearable @keyup.enter="handleQuery" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="Search" @click="handleQuery"
           >搜索</el-button
@@ -130,7 +131,7 @@
           {{ scope.row.type === 1 ? scope.row.monthNum : "-" }}
         </template>
       </el-table-column>
-      <el-table-column label="工单执行人" align="center" width="100">
+      <el-table-column label="工单执行人" align="center" width="150">
         <template #default="scope">
           {{
             scope.row.entrust != null
@@ -140,6 +141,7 @@
         </template>
       </el-table-column>
     </el-table>
+    <exports ref="exportRef" :get-list="getList"></exports>
     <!-- 分页 -->
     <pagination
       v-show="total > 0"
@@ -154,6 +156,7 @@
 <script setup name="Company">
 import { getToken, getTenant } from "@/utils/auth";
 import useUserStore from "@/store/modules/user";
+
 import {
   listFactoryNextWorkOrder,
   checkCurrent,
@@ -161,7 +164,10 @@ import {
   delEntrust,
   addEntrust,
 } from "@/api/business/entrust/nextWorkOrder";
+
+import{exportNextFactory} from  "@/api/business/entrust/currentWorkOrder";
 const { proxy } = getCurrentInstance();
+
 const currentMonth = ref(null);
 /** 字典数组区 */
 /** 查询 对象 */
@@ -202,6 +208,7 @@ function checkCurrentMonthHandle() {
   checkCurrent().then((res) => {
     if (res.data.checkResult === true) {
       setCurrentMonth(res.data.currentMonth);
+      
       getList();
     } else {
       proxy.$modal.msgError("未设置当前月,请设置本月");
@@ -253,11 +260,13 @@ function handleSelectionChange(selection) {
 
 /** 导出按钮操作 */
 function handleExport() {
-  exportNextWorkOrder(queryParams.value);
+  exportNextFactory(queryParams.value);
 }
 
 function setCurrentMonth(month) {
-  currentMonth.value = month;
+
+  
+  currentMonth.value = proxy.moment().add(1, 'month').format("YYYY-MM")+"-01";
 }
 
 function setEntrustHandle() {

+ 12 - 3
src/views/business/financial/collection/form.vue

@@ -213,12 +213,12 @@
             </el-col>
             <el-col :span="6">
               <el-form-item label="客户名称:" prop="companyName">
-                <span>{{ form.companyName }}</span>
+                <el-link :underline="false" type="primary" @click="handleInfo(form)" >{{ form.companyName }}</el-link>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="合同编号:" prop="remark">
-                <span>{{ form.contractNo }}</span>
+                <el-link :underline="false" type="primary" @click="handleContract(form)" >{{ form.contractNo }}</el-link>
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -660,6 +660,8 @@
         </div>
       </template>
     </el-dialog>
+    <company-form ref="companyRef" :get-list="getList"></company-form>
+    <contract-form ref="contractRef" :get-list="getList" />
   </div>
 </template>
 <script setup>
@@ -686,6 +688,8 @@ import { listCompany } from "@/api/business/crm/company";
 import { listUser } from "@/api/system/user";
 import CustomerFormCom from "@/components/CustomerFormCom";
 import { formatDate } from "@/utils/index";
+import companyForm from "@/views/business/crm/company/formView.vue";
+import contractForm from "@/views/business/crm/order/form.vue";
 import { ref } from "vue";
 
 import useUserStore from "@/store/modules/user";
@@ -786,7 +790,12 @@ function cancel() {
   visible.value = false;
   reset();
 }
-
+function handleInfo(row) {
+    proxy.$refs.companyRef.open(row.companyId);
+}
+function handleContract(){
+    proxy.$refs.contractRef.open(form.value.contractId);
+}
 // 数字格式化
 function rowNum(num) {
   if (!num) {

+ 13 - 3
src/views/business/financial/contract/form.vue

@@ -121,12 +121,12 @@
             </el-col>
             <el-col :span="6">
               <el-form-item label="客户名称:" prop="companyName">
-                <span>{{ form.companyName }}</span>
+                <el-link :underline="false" type="primary" @click="handleInfo(form)" >{{ form.companyName }}</el-link>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="合同编号:" prop="remark">
-                <span>{{ form.contractNo }}</span>
+                <el-link  :underline="false" type="primary" @click="handleContract(form)" >{{ form.contractNo }}</el-link>
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -296,6 +296,8 @@
         </div>
       </template>
     </el-dialog>
+    <company-form ref="companyRef" :get-list="getList"></company-form>
+    <contract-form ref="contractRef" :get-list="getList" />
   </div>
 </template>
 <script setup>
@@ -310,12 +312,15 @@
     saveCollection,
     setCollectionStatus,
   } from "@/api/business/financial/collection";
+
   import { listSource } from "@/api/settings/source";
   import { listCompany } from "@/api/business/crm/company";
   import { listUser } from "@/api/system/user";
   import CustomerFormCom from "@/components/CustomerFormCom";
   import { formatDate } from "@/utils/index";
   import { ref } from "vue";
+  import companyForm from "@/views/business/crm/company/formView.vue";
+  import contractForm from "@/views/business/crm/order/form.vue";
   import match from "@/utils/match";
   import useUserStore from "@/store/modules/user";
   const { proxy } = getCurrentInstance();
@@ -504,7 +509,9 @@
       }
     });
   }
-
+  function handleInfo(row) {
+    proxy.$refs.companyRef.open(row.companyId);
+  }
   function detailValid() {
     // if (form.value.files.length === 0) {
     //   proxy.$modal.msgError("收款附件为空");
@@ -549,6 +556,9 @@
       proxy.$modal.msgError("请填写驳回原因");
       return;
     }
+  } 
+  function handleContract(){
+    proxy.$refs.contractRef.open(form.value.contractId);
   }
 
   function verifyUpload(status) {

+ 644 - 1006
src/views/business/financial/payment/form.vue

@@ -4,59 +4,25 @@
     <el-drawer :title="title" v-model="visible" direction="rtl" size="100%">
       <div class="page-container form-container">
         <div class="form-btns-container">
-          <span class="title-label"
-            ><el-icon>
+          <span class="title-label"><el-icon>
               <Document />
             </el-icon>
-            支出信息</span
-          >
-          <template
-            v-if="
+            支出信息</span>
+          <template v-if="
               checkPermission(['business:payment:edit', 'business:payment:add'])
-            "
-          >
-            <el-button
-              v-if="editStatus"
-              type="primary"
-              size="small"
-              icon="Finished"
-              @click="submitForm"
-              >保存</el-button
-            >
-            <el-button
-              v-else-if="form.verifyStatus === 0"
-              type="warning"
-              size="small"
-              icon="Edit"
-              @click="editStatus = true"
-              >修改</el-button
-            >
-            <el-button
-              v-if="form.id && editStatus"
-              size="small"
-              icon="Close"
-              @click="editStatus = false"
-              >取消修改</el-button
-            >
+            ">
+            <el-button v-if="editStatus" type="primary" size="small" icon="Finished" @click="submitForm">保存</el-button>
+            <el-button v-else-if="form.verifyStatus === 0" type="warning" size="small" icon="Edit"
+              @click="editStatus = true">修改</el-button>
+            <el-button v-if="form.id && editStatus" size="small" icon="Close"
+              @click="editStatus = false">取消修改</el-button>
           </template>
-          <el-button
-            v-show="form.id && !editStatus && form.verifyStatus === 0"
-            v-hasPermi="['business:payment:financialVerify']"
-            type="primary"
-            size="small"
-            icon="Check"
-            @click="verifyHandler"
-            >财务审核</el-button
-          >
-          <el-button
-            v-show="form.id && !editStatus && form.verifyStatus === 1"
-            v-hasPermi="['business:payment:cashierVerify']"
-            type="primary"
-            size="small"
-            icon="Check"
-            @click="cashierVerifyHandler"
-            >出纳审核</el-button
-          >
+          <el-button v-show="form.id && !editStatus && form.verifyStatus === 0"
+            v-hasPermi="['business:payment:financialVerify']" type="primary" size="small" icon="Check"
+            @click="verifyHandler">财务审核</el-button>
+          <el-button v-show="form.id && !editStatus && form.verifyStatus === 1"
+            v-hasPermi="['business:payment:cashierVerify']" type="primary" size="small" icon="Check"
+            @click="cashierVerifyHandler">出纳审核</el-button>
           <div class="screen-btn" @click="handleScreen">
             <template v-if="!isFullscreen">
               <i class="fa fa-window-maximize" aria-hidden="true" />
@@ -72,166 +38,85 @@
             <!-- <span>关闭</span> -->
           </div>
         </div>
-        <div
-          class="Y-scrollbar"
-          style="
+        <div class="Y-scrollbar" style="
             position: absolute;
             top: 32px;
             bottom: 0;
             width: 100%;
             overflow: auto;
-          "
-        ></div>
-        <el-form
-          ref="orderRef"
-          class="master-container"
-          size="small"
-          :model="form"
-          :rules="rules"
-          label-width="100px"
-        >
+          "></div>
+        <el-form ref="orderRef" class="master-container" size="small" :model="form" :rules="rules" label-width="100px">
           <el-row :gutter="30">
             <el-col :span="6">
               <el-form-item label="支出流水号:">
-                <el-input
-                  v-if="editStatus"
-                  style="width: 100%"
-                  v-model.trim="form.flowNo"
-                  readonly
-                  size="small"
-                  type="text"
-                  placeholder="支出流水号"
-                  :clearable="true"
-                />
+                <el-input v-if="editStatus" style="width: 100%" v-model.trim="form.flowNo" readonly size="small"
+                  type="text" placeholder="支出流水号" :clearable="true" />
                 <span v-else>{{ form.flowNo }}</span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="申请日期" prop="formDate" required>
-                <el-date-picker
-                  v-if="editStatus"
-                  style="width: 100%"
-                  v-model="form.formDate"
-                  size="small"
-                  :clearable="true"
-                  format="YYYY-MM-DD"
-                  value-format="YYYY-MM-DD"
-                  align="center"
-                  type="date"
-                  placeholder="申请日期"
-                />
+                <el-date-picker v-if="editStatus" style="width: 100%" v-model="form.formDate" size="small"
+                  :clearable="true" format="YYYY-MM-DD" value-format="YYYY-MM-DD" align="center" type="date"
+                  placeholder="申请日期" />
                 <span v-else>{{ form.formDate }}</span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="支出类目:">
-                <el-select
-                  v-if="editStatus"
-                  style="width: 100%"
-                  v-model.trim="form.paymentCauseId"
-                  placeholder="支出类目"
-                  size="small"
-                  :clearable="true"
-                  @change="paymentCauseChange"
-                >
-                  <el-option
-                    v-for="item in paymentTypes"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id"
-                  />
+                <el-select v-if="editStatus" style="width: 100%" v-model.trim="form.paymentCauseId" placeholder="支出类目"
+                  size="small" :clearable="true" @change="paymentCauseChange">
+                  <el-option v-for="item in paymentTypes" :key="item.id" :label="item.name" :value="item.id" />
                 </el-select>
                 <span v-else>{{ form.paymentCause }}</span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="支出科目:">
-                <el-select
-                  v-if="editStatus"
-                  style="width: 100%"
-                  v-model.trim="form.paymentSubjectId"
-                  placeholder="支出科目"
-                  size="small"
-                  :clearable="true"
-                  @change="paymentSubjectChange"
-                >
-                  <el-option
-                    v-for="item in paymentSubjects"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id"
-                  />
+                <el-select v-if="editStatus" style="width: 100%" v-model.trim="form.paymentSubjectId" placeholder="支出科目"
+                  size="small" :clearable="true" @change="paymentSubjectChange">
+                  <el-option v-for="item in paymentSubjects" :key="item.id" :label="item.name" :value="item.id" />
                 </el-select>
                 <span v-else>{{ form.paymentSubject }}</span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="收款账户名:">
-                <el-input
-                  v-if="editStatus"
-                  style="width: 100%"
-                  v-model.trim="form.acceptAccount"
-                  size="small"
-                  type="text"
-                  placeholder="收款账户名"
-                  :clearable="true"
-                />
+                <el-input v-if="editStatus" style="width: 100%" v-model.trim="form.acceptAccount" size="small"
+                  type="text" placeholder="收款账户名" :clearable="true" />
                 <span v-else>{{ form.acceptAccount }}</span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="收款账号:">
                 <template v-if="editStatus">
-                  <el-input
-                    v-model.trim="form.acceptAccountNo"
-                    size="small"
-                    type="text"
-                    style="width: 100%"
-                    placeholder="收款账号"
-                    :clearable="true"
-                  />
+                  <el-input v-model.trim="form.acceptAccountNo" size="small" type="text" style="width: 100%"
+                    placeholder="收款账号" :clearable="true" />
                 </template>
-                <span v-else
-                  >{{ form.acceptAccountType }} -
-                  {{ form.acceptAccountNo }}</span
-                >
+                <span v-else>{{ form.acceptAccountType }} -
+                  {{ form.acceptAccountNo }}</span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="收款账户开户银行:" label-width="120px">
                 <template v-if="editStatus">
-                  <el-input
-                    v-model.trim="form.bankNo"
-                    size="small"
-                    type="text"
-                    style="width: 100%"
-                    placeholder="收款账户开户银行"
-                    :clearable="true"
-                  />
+                  <el-input v-model.trim="form.bankNo" size="small" type="text" style="width: 100%"
+                    placeholder="收款账户开户银行" :clearable="true" />
                 </template>
                 <span v-else>{{ form.bankNo }}</span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="客户名称:" prop="companyName" required>
-                <el-autocomplete
-                  v-if="editStatus"
-                  style="width: 100%"
-                  :fetch-suggestions="querySearchCompanyAsync"
-                  :trigger-on-focus="true"
-                  v-model="form.companyName"
-                  placeholder="请输入客户名称"
-                  popper-class="my-autocomplete"
-                  @select="handleSelectCompany"
-                >
+                <el-autocomplete v-if="editStatus" style="width: 100%" :fetch-suggestions="querySearchCompanyAsync"
+                  :trigger-on-focus="true" v-model="form.companyName" placeholder="请输入客户名称"
+                  popper-class="my-autocomplete" @select="handleSelectCompany">
                   <template #default="{ item }">
-                    <div
-                      style="
+                    <div style="
                         display: flex;
                         flex-direction: row;
                         justify-content: space-between;
-                      "
-                    >
+                      ">
                       <div class="name" style="font-size: 12px">
                         {{ item.name }}
                       </div>
@@ -239,32 +124,21 @@
                     </div>
                   </template>
                 </el-autocomplete>
-                <span v-else>{{ form.companyName }}</span>
+                <span v-else> <el-link  :underline="false" type="primary" @click="handleInfo(form)">{{ form.companyName }}</el-link></span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
               <el-form-item label="合同编号:" required>
-                <el-input
-                  v-if="editStatus"
-                  style="width: 100%"
-                  v-model.trim="form.contractNo"
-                  size="small"
-                  type="text"
-                  placeholder="请选择"
-                  :clearable="true"
-                >
+                <el-input v-if="editStatus" style="width: 100%" v-model.trim="form.contractNo" size="small" type="text"
+                  placeholder="请选择" :clearable="true">
                   <template #append>
-                    <el-button
-                      icon="Search"
-                      @click="() => contractChoiceHandler()"
-                    />
+                    <el-button icon="Search" @click="() => contractChoiceHandler()" />
                   </template>
                 </el-input>
                 <span v-else style="width: 100%">
-                  <el-tooltip :content="form.contractNo">
                     <!-- <el-button class="text-overflow" type="primary" link @click="(showContractDialog(currentContract.contractId))">{{ currentContract.formNo }}</el-button> -->
-                    {{ form.contractNo }}
-                  </el-tooltip>
+                    <!-- {{ form.contractNo }} -->
+                    <el-link :underline="false" type="primary" @click="handleContract(form)" >{{ form.contractNo }}</el-link>
                 </span>
               </el-form-item>
             </el-col>
@@ -280,44 +154,25 @@
             </el-col>
             <el-col :span="6">
               <el-form-item label="支出金额:" required>
-                <el-input-number
-                  v-if="editStatus"
-                  v-model.trim="form.amount"
-                  size="small"
-                  readonly
-                  placeholder="支出金额"
-                  :clearable="true"
-                  :precision="2"
-                  controls-position="right"
-                  :controls="false"
-                  @change="amountChange"
-                />
+                <el-input-number v-if="editStatus" v-model.trim="form.amount" size="small" readonly placeholder="支出金额"
+                  :clearable="true" :precision="2" controls-position="right" :controls="false" @change="amountChange" />
                 <span v-else>{{ rowNum(form.amount) }}</span>
               </el-form-item>
             </el-col>
-            <el-col
-              v-if="form.verifyStatus === 2 || form.verifyStatus === 4"
-              :span="6"
-            >
+            <el-col v-if="form.verifyStatus === 2 || form.verifyStatus === 4" :span="6">
               <el-form-item label="驳回原因:" required>
                 <span>{{ form.verifyComment }}</span>
               </el-form-item>
             </el-col>
-                    
-        
+
+
             <el-col :span="12">
               <el-form-item label="备注:">
-                <el-input
-                  v-if="editStatus"
-                  v-model.trim="form.remark"
-                  size="small"
-                  type="text"
-                  placeholder="备注"
-                  :clearable="true"
-                />
+                <el-input v-if="editStatus" v-model.trim="form.remark" size="small" type="text" placeholder="备注"
+                  :clearable="true" />
                 <span v-else style="word-break: break-all">{{
                   form.remark
-                }}</span>
+                  }}</span>
               </el-form-item>
             </el-col>
           </el-row>
@@ -331,92 +186,43 @@
                 </div>
               </div>
               <div class="details-body">
-                <el-table
-                  ref="filesTable"
-                  :data="form.details"
-                  size="small"
-                  height="100%"
-                  border
-                  header-row-class-name="list-header-row"
-                  highlight-current-row
-                >
-                  <el-table-column
-                    type="index"
-                    label="序号"
-                    width="47"
-                    align="center"
-                  />
-                  <el-table-column
-                    label="任务名称"
-                    prop="taskTypeName"
-                    align="center"
-                    show-overflow-tooltip
-                  >
+                <el-table ref="filesTable" :data="form.details" size="small" height="100%" border
+                  header-row-class-name="list-header-row" highlight-current-row>
+                  <el-table-column type="index" label="序号" width="47" align="center" />
+                  <el-table-column label="任务名称" prop="taskTypeName" align="center" show-overflow-tooltip>
                   </el-table-column>
-                  <el-table-column
-                  label="说明"
-                  prop="explain"
-                  align="center"
-                  show-overflow-tooltip
-                >
-                </el-table-column>
-             
-                  <el-table-column
-                    label="任务金额"
-                    prop="amount"
-                    width="100"
-                    align="center"
-                  >
+                  <el-table-column label="说明" prop="explain" align="center" show-overflow-tooltip>
+                  </el-table-column>
+
+                  <el-table-column label="任务金额" prop="amount" width="100" align="center">
                     <template #default="scope">
                       <span>{{ rowNum(scope.row.amount) }}</span>
                     </template>
                   </el-table-column>
-                  <el-table-column
-                  label="已收款金额"
-                  prop="reallyAmount"
-                  width="100"
-                  align="center"
-                >
-                  <template #default="scope">
-                    <span>{{ rowNum(scope.row.reallyAmount) }}</span>
-                  </template>
-                </el-table-column>
-                  <el-table-column
-                    label="本次支出金额"
-                    prop="paymentAmount"
-                    width="100"
-                    align="center"
-                  >
+                  <el-table-column label="已收款金额" prop="reallyAmount" width="100" align="center">
+                    <template #default="scope">
+                      <span>{{ rowNum(scope.row.reallyAmount) }}</span>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="本次支出金额" prop="paymentAmount" width="100" align="center">
                     <template #default="scope">
                       <template v-if="editStatus">
-                        <el-input-number
-                          v-model="scope.row.paymentAmount"
-                          size="small"
-                          placeholder="本次支出金额"
-                          :precision="2"
-                          :controls="false"
-                          style="width: 100%"
-                          @change="
+                        <el-input-number v-model="scope.row.paymentAmount" size="small" placeholder="本次支出金额"
+                          :precision="2" :controls="false" style="width: 100%" @change="
                             (arg) =>
                               amountChangeHandler(
                                 arg,
                                 scope.row,
                                 'paymentAmount'
                               )
-                          "
-                        />
+                          " />
                       </template>
                       <template v-else>{{
                         rowNum(scope.row.paymentAmount)
-                      }}</template>
+                        }}</template>
                     </template>
                   </el-table-column>
-                  <el-table-column
-                    label="已支付金额"
-                    prop="payment"
-                    width="100"
-                    align="center"
-                  >
+                  <el-table-column label="已支付金额" prop="payment" width="100" align="center">
                     <template #default="scope">
                       <span>{{ rowNum(scope.row.payment) }}</span>
                     </template>
@@ -430,61 +236,26 @@
                   <i class="fa fa-th-list" aria-hidden="true" /> 附件
                   <i style="color: red">*</i>
                 </div>
-                <el-upload
-                  v-if="editStatus"
-                  action="#"
-                  :http-request="upload"
-                  :with-credentials="true"
-                  :show-file-list="false"
-                  multiple
-                >
-                  <el-button size="small" type="primary" icon="Upload"
-                    >点击上传</el-button
-                  >
+                <el-upload v-if="editStatus" action="#" :http-request="upload" :with-credentials="true"
+                  :show-file-list="false" multiple>
+                  <el-button size="small" type="primary" icon="Upload">点击上传</el-button>
                 </el-upload>
               </div>
               <div class="details-body">
-                <el-table
-                  ref="filesTable"
-                  :data="form.files"
-                  size="small"
-                  height="100%"
-                  border
-                  header-row-class-name="list-header-row"
-                  highlight-current-row
-                >
-                  <el-table-column
-                    type="index"
-                    label="序号"
-                    width="47"
-                    align="center"
-                  />
-                  <el-table-column
-                    label="文件名"
-                    prop="originalFileName"
-                    align="center"
-                    show-overflow-tooltip
-                  >
+                <el-table ref="filesTable" :data="form.files" size="small" height="100%" border
+                  header-row-class-name="list-header-row" highlight-current-row>
+                  <el-table-column type="index" label="序号" width="47" align="center" />
+                  <el-table-column label="文件名" prop="originalFileName" align="center" show-overflow-tooltip>
                     <template #default="scope">
-                      <el-button
-                        size="small"
-                        type="primary"
-                        link
-                        @click="openFile(scope.row)"
-                        >{{ scope.row.originalFileName }}</el-button
-                      >
+                      <el-button size="small" type="primary" link @click="openFile(scope.row)">{{
+                        scope.row.originalFileName }}</el-button>
                     </template>
                   </el-table-column>
                   <el-table-column label="操作" width="50" align="center">
                     <template #default="scope">
                       <div v-if="editStatus">
-                        <el-button
-                          size="small"
-                          link
-                          type="danger"
-                          @click="handlerDelAttach(scope.row, scope.$index)"
-                          >删除</el-button
-                        >
+                        <el-button size="small" link type="danger"
+                          @click="handlerDelAttach(scope.row, scope.$index)">删除</el-button>
                       </div>
                     </template>
                   </el-table-column>
@@ -495,99 +266,40 @@
         </div>
       </div>
     </el-drawer>
-    <el-dialog
-      title="财务审核详情"
-      v-model="rejectOpen"
-      width="500px"
-      append-to-body
-      draggable
-      :close-on-click-modal = "false"
-    >
+    <el-dialog title="财务审核详情" v-model="rejectOpen" width="500px" append-to-body draggable :close-on-click-modal="false">
       <el-form ref="dictRef" :model="rejectForm" label-width="100" size="small">
         <el-form-item label="审核状态">
-          <el-select
-            v-model.trim="rejectForm.verifyStatus"
-            placeholder="请选择"
-            size="small"
-          >
-            <el-option
-              v-for="i in verified"
-              :key="i.value"
-              :label="i.label"
-              :value="i.value"
-            />
+          <el-select v-model.trim="rejectForm.verifyStatus" placeholder="请选择" size="small">
+            <el-option v-for="i in verified" :key="i.value" :label="i.label" :value="i.value" />
           </el-select>
         </el-form-item>
 
-        <el-form-item
-          :label="rejectForm.verifyStatus == 2 ? '驳回原因' : '审核意见'"
-          :prop="verifyRemark"
-        >
-          <el-input
-            v-model.trim="rejectForm.verifyComment"
-            type="textarea"
-            maxlength="200"
-            show-word-limit
-            :rows="3"
-            placeholder="请输入审核意见"
-          />
+        <el-form-item :label="rejectForm.verifyStatus == 2 ? '驳回原因' : '审核意见'" :prop="verifyRemark">
+          <el-input v-model.trim="rejectForm.verifyComment" type="textarea" maxlength="200" show-word-limit :rows="3"
+            placeholder="请输入审核意见" />
         </el-form-item>
 
-        <el-form-item label="附件" >
-          <el-upload
-            action="#"
-            :http-request="upload2"
-            :with-credentials="true"
-            :show-file-list="false"
-            multiple
-            :limit="5"
-          >
-            <el-button size="small" type="primary" icon="Upload"
-              >点击上传</el-button
-            >
+        <el-form-item label="附件">
+          <el-upload action="#" :http-request="upload2" :with-credentials="true" :show-file-list="false" multiple
+            :limit="5">
+            <el-button size="small" type="primary" icon="Upload">点击上传</el-button>
           </el-upload>
-          <el-table
-            ref="dbTable"
-            :data="rejectForm.evidenceFiles"
-            size="small"
-            border
-            header-row-class-name="list-header-row"
-            row-class-name="list-row"
-          >
-            <el-table-column
-              label="文件名"
-              prop="originalFileName"
-              align="center"
-              show-overflow-tooltip
-            >
+          <el-table ref="dbTable" :data="rejectForm.evidenceFiles" size="small" border
+            header-row-class-name="list-header-row" row-class-name="list-row">
+            <el-table-column label="文件名" prop="originalFileName" align="center" show-overflow-tooltip>
               <template #default="scope">
-                <el-button
-                  size="small"
-                  type="text"
-                  @click="openFile(scope.row)"
-                  >{{
-                    scope.row.originalFileName == ""
-                      ? "打开文件"
-                      : scope.row.originalFileName
-                  }}</el-button
-                >
+                <el-button size="small" type="text" @click="openFile(scope.row)">{{
+                  scope.row.originalFileName == ""
+                  ? "打开文件"
+                  : scope.row.originalFileName
+                  }}</el-button>
               </template>
             </el-table-column>
 
-            <el-table-column
-              label="操作"
-              width="80"
-              prop="fileType"
-              align="center"
-            >
+            <el-table-column label="操作" width="80" prop="fileType" align="center">
               <template #default="scope">
-                <el-button
-                  size="small"
-                  link
-                  type="danger"
-                  @click="handlerEportFilesDel(scope.row, scope.$index)"
-                  >删除</el-button
-                >
+                <el-button size="small" link type="danger"
+                  @click="handlerEportFilesDel(scope.row, scope.$index)">删除</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -595,124 +307,51 @@
       </el-form>
       <template #footer>
         <div class="dialog-footer">
-          <el-button
-            type="primary"
-            icon="Finished"
-            size="small"
-            @click="verifyUpload()"
-            >确 定</el-button
-          >
-          <el-button icon="close" size="small" @click="rejectCancel"
-            >取 消</el-button
-          >
+          <el-button type="primary" icon="Finished" size="small" @click="verifyUpload()">确 定</el-button>
+          <el-button icon="close" size="small" @click="rejectCancel">取 消</el-button>
         </div>
       </template>
     </el-dialog>
-    <el-dialog
-      title="出纳审核详情"
-      v-model="cashierOpen"
-      width="500px"
-      append-to-body
-      draggable
-    >
+    <el-dialog title="出纳审核详情" v-model="cashierOpen" width="500px" append-to-body draggable>
       <el-form ref="dictRef" :model="form" label-width="100" size="small">
         <el-form-item label="审核状态">
-          <el-select
-            v-model.trim="cashierForm.verifyStatus"
-            placeholder="请选择"
-            size="small"
-          >
-            <el-option
-              v-for="i in cashierVerified"
-              :key="i.value"
-              :label="i.label"
-              :value="i.value"
-            />
+          <el-select v-model.trim="cashierForm.verifyStatus" placeholder="请选择" size="small">
+            <el-option v-for="i in cashierVerified" :key="i.value" :label="i.label" :value="i.value" />
           </el-select>
         </el-form-item>
         <el-form-item label="实际支出时间" required>
-          <el-date-picker
-            v-model.trim="cashierForm.actuallyDate"
-            size="small"
-            :clearable="true"
-            format="YYYY-MM-DD HH:mm:ss"
-            value-format="YYYY-MM-DD HH:mm:ss"
-            align="center"
-            type="datetime"
-            placeholder="实际付款时间"
-          />
+          <el-date-picker v-model.trim="cashierForm.actuallyDate" size="small" :clearable="true"
+            format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" align="center" type="datetime"
+            placeholder="实际付款时间" />
         </el-form-item>
 
         <!-- <el-form-item label="支出附件上传" required>
         </el-form-item> -->
-        <el-form-item
-          :label="cashierForm.verifyStatus == 4 ? '驳回原因' : '审核意见'"
-          :prop="verifyComment"
-        >
-          <el-input
-            v-model.trim="cashierForm.verifyComment"
-            type="textarea"
-            maxlength="200"
-            show-word-limit
-            :rows="3"
-            placeholder="请输入审核意见"
-          />
+        <el-form-item :label="cashierForm.verifyStatus == 4 ? '驳回原因' : '审核意见'" :prop="verifyComment">
+          <el-input v-model.trim="cashierForm.verifyComment" type="textarea" maxlength="200" show-word-limit :rows="3"
+            placeholder="请输入审核意见" />
         </el-form-item>
-        <el-form-item label="附件" >
-          <el-upload
-            action="#"
-            :http-request="upload3"
-            :with-credentials="true"
-            :show-file-list="false"
-            multiple
-            :limit="5"
-          >
-            <el-button size="small" type="primary" icon="Upload"
-              >点击上传</el-button
-            >
+        <el-form-item label="附件">
+          <el-upload action="#" :http-request="upload3" :with-credentials="true" :show-file-list="false" multiple
+            :limit="5">
+            <el-button size="small" type="primary" icon="Upload">点击上传</el-button>
           </el-upload>
-          <el-table
-            ref="dbTable"
-            :data="cashierForm.evidenceFiles"
-            size="small"
-            border
-            header-row-class-name="list-header-row"
-            row-class-name="list-row"
-          >
-            <el-table-column
-              label="文件名"
-              prop="originalFileName"
-              align="center"
-              show-overflow-tooltip
-            >
+          <el-table ref="dbTable" :data="cashierForm.evidenceFiles" size="small" border
+            header-row-class-name="list-header-row" row-class-name="list-row">
+            <el-table-column label="文件名" prop="originalFileName" align="center" show-overflow-tooltip>
               <template #default="scope">
-                <el-button
-                  size="small"
-                  type="text"
-                  @click="openFile(scope.row)"
-                  >{{
-                    scope.row.originalFileName == ""
-                      ? "打开文件"
-                      : scope.row.originalFileName
-                  }}</el-button
-                >
+                <el-button size="small" type="text" @click="openFile(scope.row)">{{
+                  scope.row.originalFileName == ""
+                  ? "打开文件"
+                  : scope.row.originalFileName
+                  }}</el-button>
               </template>
             </el-table-column>
 
-            <el-table-column
-              label="操作"
-              width="80"
-              prop="fileType"
-              align="center"
-            >
+            <el-table-column label="操作" width="80" prop="fileType" align="center">
               <template #default="scope">
-                <el-button
-                  size="small"
-                  link
-                  type="danger"
-                  @click="handlerEportFilesDel(scope.row, scope.$index)"
-                  >删除</el-button
-                >
+                <el-button size="small" link type="danger"
+                  @click="handlerEportFilesDel(scope.row, scope.$index)">删除</el-button>
               </template>
             </el-table-column>
           </el-table>
@@ -720,576 +359,575 @@
       </el-form>
       <template #footer>
         <div class="dialog-footer">
-          <el-button
-            type="primary"
-            icon="Finished"
-            size="small"
-            @click="cashierVerifyUpload()"
-            >确 定</el-button
-          >
-          <el-button icon="close" size="small" @click="cashierVerifyCancel"
-            >取 消</el-button
-          >
+          <el-button type="primary" icon="Finished" size="small" @click="cashierVerifyUpload()">确 定</el-button>
+          <el-button icon="close" size="small" @click="cashierVerifyCancel">取 消</el-button>
         </div>
       </template>
     </el-dialog>
-    <dialog-contract-choice
-      ref="contractChoiceRef"
-      @choice="contractChoiceHandle"
-    />
+    <dialog-contract-choice ref="contractChoiceRef" @choice="contractChoiceHandle" />
+    <company-form ref="companyRef" :get-list="getList"></company-form>
+    <contract-form ref="contractRef" :get-list="getList" />
   </div>
 </template>
 <script setup>
-import { uploadFile } from "@/api/tool/file";
-// import {
-//   getOrder,
-//   initTaskTypes,
-//   addOrder,
-//   updateOrder,
-//   verifyOrder,
-//   alterOrder,
-//   dissolutionOrder,
-// } from "@/api/business/crm/contract";
-import {
-  listCompany,
-  getPayment,
-  savePayment,
-  listTypes,
-  listContractDetail,
-  verifyPayment,
-} from "@/api/business/financial/payment";
-import { listSource } from "@/api/settings/source";
-import { listUser } from "@/api/system/user";
-import CustomerFormCom from "@/components/CustomerFormCom";
-import DialogContractChoice from "@/views/dialog/DialogContractChoice.vue";
-import { formatDate, rowNum } from "@/utils/index";
-import { ref } from "vue";
-import useUserStore from "@/store/modules/user";
-const { proxy } = getCurrentInstance();
-const baseUrl = import.meta.env.VITE_APP_BASE_API;
-
-/** 父组件传参 */
-const props = defineProps({
-  getList: {
-    type: Function,
-    default: () => {},
-  },
-});
-const { getList } = toRefs(props);
-/** 字典数组区 */
-const { virtual_address } = proxy.useDict("virtual_address");
-/** 表单抽屉 页变量 */
-const title = ref("");
-const loading = ref(false);
-const multiple = ref(true);
-const visible = ref(false);
-const editStatus = ref(false);
-const sourceCategories = ref([]);
-const type = ref("");
-
-const rejectOpen = ref(false);
-const rejectForm = ref({});
-
-const cashierForm = ref({});
-
-const detailEmpty = {
-  id: null,
-  taskTypeName: "",
-  taskTypeId: null,
-  serviceNum: undefined,
-  freeNum: undefined,
-  price: undefined,
-  amount: undefined,
-  addressStyle: undefined,
-  address: undefined,
-  fictionAddressId: undefined,
-  tenantId: undefined,
-  explain:undefined,
-  province: "",
-  city: "",
-  district: "",
-  addressStyle: 1,
-  provinceId: undefined,
-  processes: [],
-  defaultProcesses: [],
-};
-const provinces = ref(proxy.region.getProvinces());
-provinces.value.unshift({ code: "", name: "全部" });
-const cities = ref([]);
-const districts = ref([]);
-const paymentTypes = ref([]);
-const paymentSubjects = ref([]);
-
-const paymentEmpty = {
-  id: null,
-  flowNo: "",
-  paymentCauseId: null,
-  paymentSubjectId: null,
-  acceptAccountTypeId: null,
-  subsidiaryId: null,
-  subsidiary: null,
-  subsidiaryName: "",
-  subsidiaryBankAccount: "",
-  subsidiaryBankName: "",
-  explain:undefined,
-  companyId: null,
-  companyName: "",
-  amount: 0,
-  verifyStatus: 0,
-  acceptAccount: "",
-  accountBank: "",
-  applierId: useUserStore().user.userId,
-  applierName: "",
-  creatorName: useUserStore().user.nickName,
-  details: [],
-  files: [],
-};
-const isFullscreen = ref(false);
-const webHost = import.meta.env.VITE_APP_BASE_API;
-const data = reactive({
-  form: {},
-  rules: {
-    companyName: [
-      { required: true, message: "客户名称不能为空", trigger: "blur" },
-    ],
-    formDate: [
-      { required: true, message: "支出日期不能为空", trigger: "blur" },
-    ],
-  },
-  timeOptions: { start: "08:30", step: "00:15", end: "18:30" },
-  verified: [
-    {
-      value: 0,
-      label: "未审核",
+  import { uploadFile } from "@/api/tool/file";
+  // import {
+  //   getOrder,
+  //   initTaskTypes,
+  //   addOrder,
+  //   updateOrder,
+  //   verifyOrder,
+  //   alterOrder,
+  //   dissolutionOrder,
+  // } from "@/api/business/crm/contract";
+  import {
+    listCompany,
+    getPayment,
+    savePayment,
+    listTypes,
+    listContractDetail,
+    verifyPayment,
+  } from "@/api/business/financial/payment";
+  import { listSource } from "@/api/settings/source";
+  import { listUser } from "@/api/system/user";
+  import CustomerFormCom from "@/components/CustomerFormCom";
+  import DialogContractChoice from "@/views/dialog/DialogContractChoice.vue";
+  import { formatDate, rowNum } from "@/utils/index";
+  import { ref } from "vue";
+  import companyForm from "@/views/business/crm/company/formView.vue";
+  import contractForm from "@/views/business/crm/order/form.vue";
+  import useUserStore from "@/store/modules/user";
+  const { proxy } = getCurrentInstance();
+  const baseUrl = import.meta.env.VITE_APP_BASE_API;
+
+  /** 父组件传参 */
+  const props = defineProps({
+    getList: {
+      type: Function,
+      default: () => { },
     },
-    {
-      value: 1,
-      label: "通过",
-    },
-    {
-      value: 2,
-      label: "驳回",
-    },
-  ],
-  cashierVerified: [
-    {
-      value: 1,
-      label: "未审核",
-    },
-    {
-      value: 3,
-      label: "通过",
-    },
-    {
-      value: 4,
-      label: "驳回",
+  });
+  const { getList } = toRefs(props);
+  /** 字典数组区 */
+  const { virtual_address } = proxy.useDict("virtual_address");
+  /** 表单抽屉 页变量 */
+  const title = ref("");
+  const loading = ref(false);
+  const multiple = ref(true);
+  const visible = ref(false);
+  const editStatus = ref(false);
+  const sourceCategories = ref([]);
+  const type = ref("");
+
+  const rejectOpen = ref(false);
+  const rejectForm = ref({});
+
+  const cashierForm = ref({});
+
+  const detailEmpty = {
+    id: null,
+    taskTypeName: "",
+    taskTypeId: null,
+    serviceNum: undefined,
+    freeNum: undefined,
+    price: undefined,
+    amount: undefined,
+    addressStyle: undefined,
+    address: undefined,
+    fictionAddressId: undefined,
+    tenantId: undefined,
+    explain: undefined,
+    province: "",
+    city: "",
+    district: "",
+    addressStyle: 1,
+    provinceId: undefined,
+    processes: [],
+    defaultProcesses: [],
+  };
+  const provinces = ref(proxy.region.getProvinces());
+  provinces.value.unshift({ code: "", name: "全部" });
+  const cities = ref([]);
+  const districts = ref([]);
+  const paymentTypes = ref([]);
+  const paymentSubjects = ref([]);
+
+  const paymentEmpty = {
+    id: null,
+    flowNo: "",
+    paymentCauseId: null,
+    paymentSubjectId: null,
+    acceptAccountTypeId: null,
+    subsidiaryId: null,
+    subsidiary: null,
+    subsidiaryName: "",
+    subsidiaryBankAccount: "",
+    subsidiaryBankName: "",
+    explain: undefined,
+    companyId: null,
+    companyName: "",
+    amount: 0,
+    verifyStatus: 0,
+    acceptAccount: "",
+    accountBank: "",
+    applierId: useUserStore().user.userId,
+    applierName: "",
+    creatorName: useUserStore().user.nickName,
+    details: [],
+    files: [],
+  };
+  const isFullscreen = ref(false);
+  const webHost = import.meta.env.VITE_APP_BASE_API;
+  const data = reactive({
+    form: {},
+    rules: {
+      companyName: [
+        { required: true, message: "客户名称不能为空", trigger: "blur" },
+      ],
+      formDate: [
+        { required: true, message: "支出日期不能为空", trigger: "blur" },
+      ],
     },
-  ],
-  cashierOpen: false,
-});
-const { form, rules, timeOptions, verified, cashierVerified, cashierOpen } =
-  toRefs(data);
-/***********************  方法区  ****************************/
-/** 打开抽屉 */
-function open(id) {
-  reset();
-  visible.value = true;
-  editStatus.value = true;
-  if (id != null) {
-    getPayment(id).then((res) => {
-      form.value = res.data;
-      editStatus.value = false;
-      paymentCauseChange(form.value.paymentCauseId);
-      paymentSubjectChange(form.value.paymentSubjectId);
+    timeOptions: { start: "08:30", step: "00:15", end: "18:30" },
+    verified: [
+      {
+        value: 0,
+        label: "未审核",
+      },
+      {
+        value: 1,
+        label: "通过",
+      },
+      {
+        value: 2,
+        label: "驳回",
+      },
+    ],
+    cashierVerified: [
+      {
+        value: 1,
+        label: "未审核",
+      },
+      {
+        value: 3,
+        label: "通过",
+      },
+      {
+        value: 4,
+        label: "驳回",
+      },
+    ],
+    cashierOpen: false,
+  });
+  const { form, rules, timeOptions, verified, cashierVerified, cashierOpen } =
+    toRefs(data);
+  /***********************  方法区  ****************************/
+  /** 打开抽屉 */
+  function open(id) {
+    reset();
+    visible.value = true;
+    editStatus.value = true;
+    if (id != null) {
+      getPayment(id).then((res) => {
+        form.value = res.data;
+        editStatus.value = false;
+        paymentCauseChange(form.value.paymentCauseId);
+        paymentSubjectChange(form.value.paymentSubjectId);
+      });
+    }
+  }
+
+  function init() {
+    Promise.all([listTypes()]).then((res) => {
+      paymentTypes.value = res[0].rows;
     });
   }
-}
+  /** 取消按钮 */
+  function cancel() {
+    visible.value = false;
+    reset();
+  }
 
-function init() {
-  Promise.all([listTypes()]).then((res) => {
-    paymentTypes.value = res[0].rows;
-  });
-}
-/** 取消按钮 */
-function cancel() {
-  visible.value = false;
-  reset();
-}
+  /** 表单重置 */
+  function reset() {
+    form.value = JSON.parse(JSON.stringify(paymentEmpty));
+    paymentSubjects.value = [];
+  }
 
-/** 表单重置 */
-function reset() {
-  form.value = JSON.parse(JSON.stringify(paymentEmpty));
-  paymentSubjects.value = [];
-}
+  /** 全屏缩放 */
+  function handleScreen() {
+    const dom = document.querySelector(
+      ".list-container > .el-drawer__wrapper > .el-overlay"
+    );
+    isFullscreen.value = !isFullscreen.value;
+    dom.style.position = isFullscreen.value ? "fixed" : "absolute";
+  }
 
-/** 全屏缩放 */
-function handleScreen() {
-  const dom = document.querySelector(
-    ".list-container > .el-drawer__wrapper > .el-overlay"
-  );
-  isFullscreen.value = !isFullscreen.value;
-  dom.style.position = isFullscreen.value ? "fixed" : "absolute";
-}
+  /** 提交按钮 */
+  function submitForm() {
+    if (form.value.contractId === 0 || form.value.contractId == null) {
+      proxy.$modal.msgError("请输入合同");
+      return;
+    }
+    if (form.value.amount == null || form.value.amount === 0) {
+      proxy.$modal.msgError("请输入支出金额");
+      return;
+    }
+    if (form.value.amount > form.value.contractAmount - form.value.payedAmount) {
+      proxy.$modal.msgError("支出金额大于合同金额");
+      return;
+    }
+    proxy.$refs["orderRef"].validate((valid) => {
+      if (valid && detailValid()) {
+        const formValue = form.value;
+        savePayment(formValue).then((res) => {
+          open(res.data.id);
+          getList.value();
+        });
+      }
+    });
+  }
 
-/** 提交按钮 */
-function submitForm() {
-  if (form.value.contractId === 0 || form.value.contractId == null) {
-    proxy.$modal.msgError("请输入合同");
-    return;
+  function detailValid() {
+    if (form.value.files.length === 0) {
+      proxy.$modal.msgError("收款附件为空");
+      return false;
+    }
+    return true;
   }
-  if (form.value.amount == null || form.value.amount === 0) {
-    proxy.$modal.msgError("请输入支出金额");
-    return;
+
+  /** 查询表单信息  */
+  function getForm() {
+    loading.value = true;
+    getOrder(form.value.id).then((response) => {
+      loading.value = false;
+      form.value = response.data;
+    });
   }
-  if (form.value.amount > form.value.contractAmount - form.value.payedAmount) {
-    proxy.$modal.msgError("支出金额大于合同金额");
-    return;
+  function handleServiceTypeClick(tab) {
+    computedService();
   }
-  proxy.$refs["orderRef"].validate((valid) => {
-    if (valid && detailValid()) {
-      const formValue = form.value;
-      savePayment(formValue).then((res) => {
-        open(res.data.id);
-        getList.value();
-      });
-    }
-  });
-}
 
-function detailValid() {
-  if (form.value.files.length === 0) {
-    proxy.$modal.msgError("收款附件为空");
-    return false;
+  function verifyHandler() {
+    rejectHandler();
   }
-  return true;
-}
 
-/** 查询表单信息  */
-function getForm() {
-  loading.value = true;
-  getOrder(form.value.id).then((response) => {
-    loading.value = false;
-    form.value = response.data;
-  });
-}
-function handleServiceTypeClick(tab) {
-  computedService();
-}
-
-function verifyHandler() {
-  rejectHandler();
-}
-
-function cashierVerifyHandler() {
-  cashierOpen.value = true;
-  cashierForm.value = proxy.deepClone(form.value);
-}
+  function cashierVerifyHandler() {
+    cashierOpen.value = true;
+    cashierForm.value = proxy.deepClone(form.value);
+  }
 
-function rejectHandler() {
-  rejectOpen.value = true;
-  rejectForm.value = proxy.deepClone(form.value);
-}
+  function rejectHandler() {
+    rejectOpen.value = true;
+    rejectForm.value = proxy.deepClone(form.value);
+  }
 
-function rejectCancel() {
-  rejectOpen.value = false;
-  rejectForm.value = {};
-}
+  function rejectCancel() {
+    rejectOpen.value = false;
+    rejectForm.value = {};
+  }
 
-function cashierVerifyCancel() {
-  cashierOpen.value = false;
-  cashierForm.value = {};
-}
-function upload2(param) {
-  const formData = new FormData();
-  formData.append("file", param.file);
-  uploadFile(formData).then((res) => {
-    if (res.code === 200) {
-      const file = {};
-      file.fileName = res.newFileName;
-      file.url = res.url;
-      file.fileType =
-        res.newFileName.split(".")[res.newFileName.split(".").length - 1];
-      file.originalFileName = res.originalFilename;
-      file.fileUrl = res.fileName;
-      console.log(11212,file);
-      if(rejectForm.value.evidenceFiles == null){
-        rejectForm.value.evidenceFiles = [];
+  function cashierVerifyCancel() {
+    cashierOpen.value = false;
+    cashierForm.value = {};
+  }
+  function upload2(param) {
+    const formData = new FormData();
+    formData.append("file", param.file);
+    uploadFile(formData).then((res) => {
+      if (res.code === 200) {
+        const file = {};
+        file.fileName = res.newFileName;
+        file.url = res.url;
+        file.fileType =
+          res.newFileName.split(".")[res.newFileName.split(".").length - 1];
+        file.originalFileName = res.originalFilename;
+        file.fileUrl = res.fileName;
+        console.log(11212, file);
+        if (rejectForm.value.evidenceFiles == null) {
+          rejectForm.value.evidenceFiles = [];
+        }
+        rejectForm.value.evidenceFiles.push(file);
       }
-      rejectForm.value.evidenceFiles.push(file);
-    }
-  });
-}
-function upload3(param) {
-  const formData = new FormData();
-  formData.append("file", param.file);
-  uploadFile(formData).then((res) => {
-    if (res.code === 200) {
-      const file = {};
-      file.fileName = res.newFileName;
-      file.url = res.url;
-      file.fileType =
-        res.newFileName.split(".")[res.newFileName.split(".").length - 1];
-      file.originalFileName = res.originalFilename;
-      file.fileUrl = res.fileName;
-      console.log(11212,file);
-      if(cashierForm.value.evidenceFiles == null){
-        cashierForm.value.evidenceFiles = [];
+    });
+  }
+  function upload3(param) {
+    const formData = new FormData();
+    formData.append("file", param.file);
+    uploadFile(formData).then((res) => {
+      if (res.code === 200) {
+        const file = {};
+        file.fileName = res.newFileName;
+        file.url = res.url;
+        file.fileType =
+          res.newFileName.split(".")[res.newFileName.split(".").length - 1];
+        file.originalFileName = res.originalFilename;
+        file.fileUrl = res.fileName;
+        console.log(11212, file);
+        if (cashierForm.value.evidenceFiles == null) {
+          cashierForm.value.evidenceFiles = [];
+        }
+        cashierForm.value.evidenceFiles.push(file);
       }
-      cashierForm.value.evidenceFiles.push(file);
-    }
-  });
-}
-function handleDelFile2(index) {
-  rejectForm.value.files.splice(index, 1);
-}
-function rejectSubmitHandler() {
-  if (form.value.verifyRemark === "" || form.value.verifyRemark == null) {
-    proxy.$modal.msgError("请填写驳回原因");
-    return;
+    });
   }
-}
-
-function verifyUpload() {
-  if (rejectForm.value.verifyStatus === 0) {
-    proxy.$modal.msgError("请选择审核结果");
-    return;
+  function handleDelFile2(index) {
+    rejectForm.value.files.splice(index, 1);
   }
-  if (
-    rejectForm.value.verifyStatus === 2 &&
-    (rejectForm.value.verifyComment == null ||
-      rejectForm.value.verifyComment === "")
-  ) {
-    proxy.$modal.msgError("请输入审核意见");
-    return;
+  function rejectSubmitHandler() {
+    if (form.value.verifyRemark === "" || form.value.verifyRemark == null) {
+      proxy.$modal.msgError("请填写驳回原因");
+      return;
+    }
   }
 
+  function verifyUpload() {
+    if (rejectForm.value.verifyStatus === 0) {
+      proxy.$modal.msgError("请选择审核结果");
+      return;
+    }
+    if (
+      rejectForm.value.verifyStatus === 2 &&
+      (rejectForm.value.verifyComment == null ||
+        rejectForm.value.verifyComment === "")
+    ) {
+      proxy.$modal.msgError("请输入审核意见");
+      return;
+    }
 
-  // if (
-  //   rejectForm.value.evidenceFiles == null ||
-  //   rejectForm.value.evidenceFiles.length === 0 || rejectForm.value.evidenceFiles.length>5
-  // ) {
-  //   proxy.$modal.msgError("请上传附件并至多上传5个");
-  //   return;
-  // }
-  verifyPayment(rejectForm.value).then((res) => {
-    open(form.value.id);
-    getList.value();
-    rejectCancel();
-    proxy.$modal.msgSuccess("保存成功");
-  });
-}
 
-function cashierVerifyUpload() {
-  if (cashierForm.value.verifyStatus === 1) {
-    proxy.$modal.msgError("请选择审核结果");
-    return;
-  }
-  if (
-    cashierForm.value.actuallyDate == null ||
-    cashierForm.value.actuallyDate === ""
-  ) {
-    proxy.$modal.msgError("请选择支出时间");
-    return;
-  }
-  // if (
-  //   cashierForm.value.evidenceFiles == null ||
-  //   cashierForm.value.evidenceFiles.length === 0 || cashierForm.value.evidenceFiles.length>5
-  // ) {
-  //   proxy.$modal.msgError("请上传附件并至多上传5个");
-  //   return;
-  // }
-  if (
-    cashierForm.value.verifyStatus === 4 &&
-    (cashierForm.value.verifyComment == null ||
-      cashierForm.value.verifyComment === "")
-  ) {
-    proxy.$modal.msgError("请输入审核意见");
-    return;
+    // if (
+    //   rejectForm.value.evidenceFiles == null ||
+    //   rejectForm.value.evidenceFiles.length === 0 || rejectForm.value.evidenceFiles.length>5
+    // ) {
+    //   proxy.$modal.msgError("请上传附件并至多上传5个");
+    //   return;
+    // }
+    verifyPayment(rejectForm.value).then((res) => {
+      open(form.value.id);
+      getList.value();
+      rejectCancel();
+      proxy.$modal.msgSuccess("保存成功");
+    });
   }
-  cashierForm.value.paymentStatus =
-    cashierForm.value.verifyStatus === 3 ? 1 : 0;
-  verifyPayment(cashierForm.value).then((res) => {
-    open(cashierForm.value.id);
-    getList.value();
-    cashierVerifyCancel();
-    proxy.$modal.msgSuccess("保存成功");
-  });
-}
 
-/** 文件上传 */
-function upload(param) {
-  const fileForm = new FormData();
-  fileForm.append("file", param.file);
-  uploadFile(fileForm).then((res) => {
-    if (res.code === 200) {
-      const file = {};
-      file.fileName = res.newFileName;
-      file.url = res.url;
-      file.originalFileName = res.originalFilename;
-      file.fileUrl = res.fileName;
-      form.value.files.push(file);
+  function cashierVerifyUpload() {
+    if (cashierForm.value.verifyStatus === 1) {
+      proxy.$modal.msgError("请选择审核结果");
+      return;
     }
-  });
-}
+    if (
+      cashierForm.value.actuallyDate == null ||
+      cashierForm.value.actuallyDate === ""
+    ) {
+      proxy.$modal.msgError("请选择支出时间");
+      return;
+    }
+    // if (
+    //   cashierForm.value.evidenceFiles == null ||
+    //   cashierForm.value.evidenceFiles.length === 0 || cashierForm.value.evidenceFiles.length>5
+    // ) {
+    //   proxy.$modal.msgError("请上传附件并至多上传5个");
+    //   return;
+    // }
+    if (
+      cashierForm.value.verifyStatus === 4 &&
+      (cashierForm.value.verifyComment == null ||
+        cashierForm.value.verifyComment === "")
+    ) {
+      proxy.$modal.msgError("请输入审核意见");
+      return;
+    }
+    cashierForm.value.paymentStatus =
+      cashierForm.value.verifyStatus === 3 ? 1 : 0;
+    verifyPayment(cashierForm.value).then((res) => {
+      open(cashierForm.value.id);
+      getList.value();
+      cashierVerifyCancel();
+      proxy.$modal.msgSuccess("保存成功");
+    });
+  }
 
-function handleDelFile(index) {
-  form.value.files.splice(index, 1);
-}
+  /** 文件上传 */
+  function upload(param) {
+    const fileForm = new FormData();
+    fileForm.append("file", param.file);
+    uploadFile(fileForm).then((res) => {
+      if (res.code === 200) {
+        const file = {};
+        file.fileName = res.newFileName;
+        file.url = res.url;
+        file.originalFileName = res.originalFilename;
+        file.fileUrl = res.fileName;
+        form.value.files.push(file);
+      }
+    });
+  }
 
-function amountChangeHandler(arg, row, field) {
-  computeTotalAmount();
-}
+  function handleDelFile(index) {
+    form.value.files.splice(index, 1);
+  }
 
-function computeTotalAmount() {
-  let amount = 0;
-  for (let index = 0; index < form.value.details.length; index++) {
-    const element = form.value.details[index];
-    amount += element.paymentAmount == null ? 0 : element.paymentAmount;
+  function amountChangeHandler(arg, row, field) {
+    computeTotalAmount();
   }
-  form.value.amount = amount;
-}
-function handlerEportFilesDel(row, index) {
-  proxy.$modal
-    .confirm("确定删除吗?")
-    .then((_) => {
-      rejectForm.value.evidenceFiles.splice(index, 1);
-    })
-    .catch((_) => {
-      proxy.$modal.msg("已取消删除");
-    });
-}
-function handlerEportFilesDel2(row, index) {
-  proxy.$modal
-    .confirm("确定删除吗?")
-    .then((_) => {
-      cashierForm.value.evidenceFiles.splice(index, 1);
-    })
-    .catch((_) => {
-      proxy.$modal.msg("已取消删除");
-    });
-}
-function amountChange() {
-  let amount = 0;
-  if (form.value.details.length > 0) {
-    for (let i = 0; i < form.value.details.length; i++) {
-      amount = amount + form.value.details[i].paymentAmount;
+
+  function computeTotalAmount() {
+    let amount = 0;
+    for (let index = 0; index < form.value.details.length; index++) {
+      const element = form.value.details[index];
+      amount += element.paymentAmount == null ? 0 : element.paymentAmount;
     }
-    // 判断到款状态
     form.value.amount = amount;
-    if (form.value.payedAmount > 0)
-      form.value.arriveStatus =
-        form.value.payedAmount === form.value.amount ? 1 : 2;
-    else form.value.arriveStatus = 0;
   }
-}
+  function handlerEportFilesDel(row, index) {
+    proxy.$modal
+      .confirm("确定删除吗?")
+      .then((_) => {
+        rejectForm.value.evidenceFiles.splice(index, 1);
+      })
+      .catch((_) => {
+        proxy.$modal.msg("已取消删除");
+      });
+  }
+  function handlerEportFilesDel2(row, index) {
+    proxy.$modal
+      .confirm("确定删除吗?")
+      .then((_) => {
+        cashierForm.value.evidenceFiles.splice(index, 1);
+      })
+      .catch((_) => {
+        proxy.$modal.msg("已取消删除");
+      });
+  }
+  function amountChange() {
+    let amount = 0;
+    if (form.value.details.length > 0) {
+      for (let i = 0; i < form.value.details.length; i++) {
+        amount = amount + form.value.details[i].paymentAmount;
+      }
+      // 判断到款状态
+      form.value.amount = amount;
+      if (form.value.payedAmount > 0)
+        form.value.arriveStatus =
+          form.value.payedAmount === form.value.amount ? 1 : 2;
+      else form.value.arriveStatus = 0;
+    }
+  }
+  function handleInfo(row) {
+    proxy.$refs.companyRef.open(row.companyId);
+  }
+  function handleContract() {
+    proxy.$refs.contractRef.open(form.value.contractId);
+  }
 
-function openFile(row) {
-  window.open(`${baseUrl}${row.fileUrl}`);
-}
+  function openFile(row) {
+    window.open(`${baseUrl}${row.fileUrl}`);
+  }
 
-function querySearchCompanyAsync(queryString, cb) {
-  const query =
-    queryString.length > 0
-      ? {
+  function querySearchCompanyAsync(queryString, cb) {
+    const query =
+      queryString.length > 0
+        ? {
           keyword: queryString,
           pageSize: 50,
           pageNum: 1,
           orderByColumn: "create_time",
         }
-      : { pageSize: 50, pageNum: 1, orderByColumn: "create_time" };
-  listCompany(query).then((res) => {
-    cb(res.rows);
-  });
-}
+        : { pageSize: 50, pageNum: 1, orderByColumn: "create_time" };
+    listCompany(query).then((res) => {
+      cb(res.rows);
+    });
+  }
 
-function handleSelectCompany(item) {
-  form.value.companyName = item.name;
-  form.value.companyId = item.id;
-}
+  function handleSelectCompany(item) {
+    form.value.companyName = item.name;
+    form.value.companyId = item.id;
+  }
 
-function paymentCauseChange(arg) {
-  const index = paymentTypes.value.findIndex((v) => v.id === arg);
-  if (index >= 0) {
-    paymentSubjects.value = [{ id: "0", name: "请选择" }].concat(
-      paymentTypes.value[index].bizPaymentSubjectList
-    );
-    form.value.paymentCause = paymentTypes.value[index].name;
-    if (
-      paymentSubjects.value.findIndex(
-        (v) => v.id === form.value.paymentSubjectId
-      ) < 0
-    ) {
-      form.value.paymentSubjectId = null;
-      form.value.paymentSubject = "";
+  function paymentCauseChange(arg) {
+    const index = paymentTypes.value.findIndex((v) => v.id === arg);
+    if (index >= 0) {
+      paymentSubjects.value = [{ id: "0", name: "请选择" }].concat(
+        paymentTypes.value[index].bizPaymentSubjectList
+      );
+      form.value.paymentCause = paymentTypes.value[index].name;
+      if (
+        paymentSubjects.value.findIndex(
+          (v) => v.id === form.value.paymentSubjectId
+        ) < 0
+      ) {
+        form.value.paymentSubjectId = null;
+        form.value.paymentSubject = "";
+      }
     }
   }
-}
-function contractChoiceHandler() {
-  if (form.value.companyId == null || form.value.companyId === "") {
-    proxy.$modal.msgError("请选择客户");
-    return;
+  function contractChoiceHandler() {
+    if (form.value.companyId == null || form.value.companyId === "") {
+      proxy.$modal.msgError("请选择客户");
+      return;
+    }
+    proxy.$refs.contractChoiceRef.open({ companyId: form.value.companyId });
   }
-  proxy.$refs.contractChoiceRef.open({ companyId: form.value.companyId });
-}
 
-function contractChoiceHandle(info) {
-  form.value.details = []
-  form.value.contractId = info.id;
-  form.value.contractNo = info.contractNo;
-  form.value.contractAmount = info.trueAmount;
-  form.value.payedAmount = info.paidAmount;
-  listContractDetail({ contractId: info.id }).then((res) => {
-    const rows = res.rows;
-    rows.forEach((item) => {
-      const detail = {
-        contractId: item.contractId,
-        contractDetailId: item.id,
-        companyId: form.value.companyId,
-        taskTypeId: item.taskTypeId,
-        amount: item.amount,
-        taskTypeName: item.taskTypeName,
-        payment: item.payment,
-        reallyAmount:item.reallyAmount,
-        explain:item.explain
-      };
-      form.value.details.push(detail);
+  function contractChoiceHandle(info) {
+    form.value.details = []
+    form.value.contractId = info.id;
+    form.value.contractNo = info.contractNo;
+    form.value.contractAmount = info.trueAmount;
+    form.value.payedAmount = info.paidAmount;
+    listContractDetail({ contractId: info.id }).then((res) => {
+      const rows = res.rows;
+      rows.forEach((item) => {
+        const detail = {
+          contractId: item.contractId,
+          contractDetailId: item.id,
+          companyId: form.value.companyId,
+          taskTypeId: item.taskTypeId,
+          amount: item.amount,
+          taskTypeName: item.taskTypeName,
+          payment: item.payment,
+          reallyAmount: item.reallyAmount,
+          explain: item.explain
+        };
+        form.value.details.push(detail);
+      });
     });
-  });
-}
+  }
 
-function handlerDelAttach(row, index) {
-  proxy.$modal
-    .confirm("确认删除该项么?")
-    .then((_) => {
-      form.value.files.splice(index, 1);
-    })
-    .catch((err) => {
-      proxy.$modal.msgError("取消删除");
-    });
-}
+  function handlerDelAttach(row, index) {
+    proxy.$modal
+      .confirm("确认删除该项么?")
+      .then((_) => {
+        form.value.files.splice(index, 1);
+      })
+      .catch((err) => {
+        proxy.$modal.msgError("取消删除");
+      });
+  }
 
-function paymentSubjectChange(id) {
-  const index = paymentSubjects.value.findIndex((v) => v.id === id);
-  if (index >= 0) {
-    form.value.paymentSubjectId = paymentSubjects.value[index].id;
+  function paymentSubjectChange(id) {
+    const index = paymentSubjects.value.findIndex((v) => v.id === id);
+    if (index >= 0) {
+      form.value.paymentSubjectId = paymentSubjects.value[index].id;
+    }
   }
-}
 
-function checkPermission(templatePermission) {
-  const all_permission = "*:*:*";
-  const permissions = useUserStore().permissions;
-  const hasPermissions = permissions.some((permission) => {
-    return (
-      all_permission === permission || templatePermission.includes(permission)
-    );
-  });
-  return hasPermissions;
-}
+  function checkPermission(templatePermission) {
+    const all_permission = "*:*:*";
+    const permissions = useUserStore().permissions;
+    const hasPermissions = permissions.some((permission) => {
+      return (
+        all_permission === permission || templatePermission.includes(permission)
+      );
+    });
+    return hasPermissions;
+  }
 
-init();
+  init();
 
-/** 暴露给父组件的方法 */
-defineExpose({
-  open,
-});
-</script>
+  /** 暴露给父组件的方法 */
+  defineExpose({
+    open,
+  });
+</script>

+ 119 - 104
src/views/business/housingFund/declare/form.vue

@@ -2,95 +2,106 @@
   <el-dialog title="公积金申报信息" v-model="visible" :width="width" append-to-body draggable @close="close"
     :close-on-click-modal="false">
     <!-- 功能按钮 -->
-     <div v-loading="loading">
-    <div style="padding: 8px 24px 16px 24px">
-      <el-form size="small" label-width="120px" v-model="form">
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="客户名称">
-              <div>{{ form.companyName }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="所属月份">
-             <!-- <div>{{ form.year }}-{{ form.month }}</div> -->
-             <el-date-picker v-model="currentMonth" type="month" placeholder="请选择时间" format="YYYY-MM"
-             @change="changeMonthHandle" />
-            </el-form-item>
-          </el-col>
-          <el-col v-if="form.status === 4" :span="12">
-            <el-form-item label="驳回原因">
-              <div>{{ form.feedbackContent }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="窗口缴纳:" required class="edit-label">
-              <template #label>
-                <div>窗口缴纳</div>
-              </template>
-              <div>{{ form.isPayOnWindow === 1 ? "是" : "否" }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="公积金单位账号" required class="edit-label">
-              <template #label>
-                <div>公积金单位账号</div>
-              </template>
-              <div>{{ form.housingFundUnitAccount }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="公积金秘钥密码" required class="edit-label">
-              <template #label>
-                <div>公积金秘钥密码</div>
-              </template>
-              <div>{{ form.housingFundPassword }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="公积金划款密码" required class="edit-label">
-              <template #label>
-                <div>公积金划款密码</div>
-              </template>
-              <div>{{ form.housingFundDeductionPassword }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-divider />
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="单位缴纳:">
-              <el-input-number v-model="form.unitAmount" size="small" v-if="form.status !==3" placeholder="单位缴纳" :precision="2"
-                :controls="false" style="width: 100%" @change="amountChangeHandler" />
+    <div v-loading="loading">
+      <div style="padding: 8px 24px 16px 24px">
+        <el-form size="small" label-width="120px" v-model="form">
+          <el-row :gutter="30">
+            <el-col :span="12">
+              <el-form-item label="客户名称">
+                <div>{{ form.companyName }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="所属月份">
+                <!-- <div>{{ form.year }}-{{ form.month }}</div> -->
+                <el-date-picker v-model="currentMonth" type="month" placeholder="请选择时间" format="YYYY-MM"
+                  @change="changeMonthHandle" />
+              </el-form-item>
+            </el-col>
+            <el-col v-if="form.status === 4" :span="12">
+              <el-form-item label="驳回原因">
+                <div>{{ form.feedbackContent }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="窗口缴纳:" required class="edit-label">
+                <template #label>
+                  <div>窗口缴纳</div>
+                </template>
+                <div>{{ form.isPayOnWindow === 1 ? "是" : "否" }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="公积金单位账号" required class="edit-label">
+                <template #label>
+                  <div>公积金单位账号</div>
+                </template>
+                <div>{{ form.housingFundUnitAccount }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="公积金秘钥密码" required class="edit-label">
+                <template #label>
+                  <div>公积金秘钥密码</div>
+                </template>
+                <div>{{ form.housingFundPassword }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="公积金划款密码" required class="edit-label">
+                <template #label>
+                  <div>公积金划款密码</div>
+                </template>
+                <div>{{ form.housingFundDeductionPassword }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-divider />
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="单位缴纳:">
+                <el-input-number v-model="form.unitAmount" size="small" v-if="form.status !==3" placeholder="单位缴纳"
+                  :precision="2" :controls="false" style="width: 100%" @change="amountChangeHandler" />
                 <div v-else>{{ rowNum(form.unitAmount) }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="个人缴纳:">
-              <el-input-number v-model="form.individualAmount" v-if="form.status !==3" size="small" placeholder="个人缴纳" :precision="2"
-                :controls="false" style="width: 100%" @change="amountChangeHandler" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="个人缴纳:">
+                <el-input-number v-model="form.individualAmount" v-if="form.status !==3" size="small" placeholder="个人缴纳"
+                  :precision="2" :controls="false" style="width: 100%" @change="amountChangeHandler" />
                 <div v-else>{{ rowNum(form.individualAmount) }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="合计:">
-              <div v-if="form.amount != 0">{{ rowNum(form.amount) }}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-divider />
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="备注">
-              <el-input v-model.trim="form.content" v-if="form.status !==3"  type="textarea" rows="2" />
-              <div v-else>{{form.content}}</div>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="凭证" required>
-              <el-upload action="#" :http-request="upload" :with-credentials="true" :show-file-list="false" multiple>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="合计:">
+                <div v-if="form.amount != 0">{{ rowNum(form.amount) }}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-divider />
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="备注">
+                <el-input v-model.trim="form.content" v-if="form.status !==3" type="textarea" rows="2" />
+                <div v-else>{{form.content}}</div>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item label="凭证" required>
+                <dragUpload :accept="accept" style="width:100%" @file="upload"
+                  v-if="form.evidenceFiles == null || form.evidenceFiles == ''" />
+                <img v-else style="height: 148px; width: 148px" :src="`${baseUrl}/${form.evidenceFiles[0].fileUrl}`"
+                  class="avatar" @click="openEvidience('evidenceFiles[0]')" />
+                <div v-if="!isView|| emptyForm.status !== 3">
+                  <el-icon :size="20" v-if="form.evidenceFiles !== '' ||form.evidenceFiles == null "
+                    @click="form.evidenceFiles = []" class="delete-button">
+                    <Delete />
+                  </el-icon>
+                </div>
+                <!-- <el-upload action="#" :http-request="upload" :with-credentials="true" :show-file-list="false" multiple>
                 <el-button size="small" type="primary" icon="Upload"  v-if="form.status !==3" >点击上传</el-button>
-              </el-upload>
+              </el-upload> -->
+                <!-- <dragUpload :accept="accept" style="width:100%" @file="upload"/>
               <el-table style="margin-top: 15px;" ref="dbTable" :data="form.evidenceFiles" size="small" border
                 header-row-class-name="list-header-row" row-class-name="list-row">
                 <el-table-column label="文件名" prop="originalFileName" align="center" show-overflow-tooltip>
@@ -108,23 +119,24 @@
                       @click="handleDel(scope.row, scope.$index)"  v-if="form.status !==3" >删除</el-button>
                   </template>
                 </el-table-column>
-              </el-table>
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
-    </div>
-    <div class="form-btns-container" style="height: 40px">
-      <el-button size="small" icon="close" v-if="form.status !== 3" style="float: right; margin-left: 12px; margin-right: 12px"
-        @click="close">取消</el-button>
-      <el-button type="primary" style="float: right" size="small" v-if="form.status !== 3" icon="Finished" @click="handleSave">
-        保存</el-button>
-        <el-button v-hasPermi="['business:housingFundDeclare:verify']" v-if="!stopUseBack" style="float: right;" icon="back" size="small"
-        type="warning" :disabled="
+              </el-table> -->
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+      <div class="form-btns-container" style="height: 40px">
+        <el-button size="small" icon="close" v-if="form.status !== 3"
+          style="float: right; margin-left: 12px; margin-right: 12px" @click="close">取消</el-button>
+        <el-button type="primary" style="float: right" size="small" v-if="form.status !== 3" icon="Finished"
+          @click="handleSave">
+          保存</el-button>
+        <el-button v-hasPermi="['business:housingFundDeclare:verify']" v-if="!stopUseBack" style="float: right;"
+          icon="back" size="small" type="warning" :disabled="
     form == null || form.status !== 3
   " @click="turnBack(form)">退回</el-button>
+      </div>
     </div>
-  </div>
     <!-- <feedback-dialog ref="feedbackDialogView" :parent="this" />
     <print-dialog ref="printDialog" :parent="this" /> -->
   </el-dialog>
@@ -135,6 +147,7 @@
     saveDetail, turnBackDetail,
   } from "@/api/business/production/housingFundDeclare";
   import { uploadFile } from "@/api/tool/file";
+  import dragUpload from "@/components/dragUpload"
   import { rowNum } from "@/utils/index";
   import { ref } from "vue";
   const { proxy } = getCurrentInstance();
@@ -205,8 +218,8 @@
     loading.value = true;
     form.value.year = proxy.moment(currentMonth.value).format("YYYY");
     form.value.month = proxy.moment(currentMonth.value).format("MM");
-    const {year,month,housingFundDeclareId,companyId} = form.value
-    const clearForm = {year,month,housingFundDeclareId,companyId}
+    const { year, month, housingFundDeclareId, companyId } = form.value
+    const clearForm = { year, month, housingFundDeclareId, companyId }
     getDetail(clearForm).then((res) => {
       form.value = { ...proxy.deepClone(emptyForm), ...res.data };
       // if (form.value.status === 2 || form.value.status === 3) {
@@ -318,7 +331,7 @@
 
   function upload(param) {
     const formData = new FormData();
-    formData.append("file", param.file);
+    formData.append("file", param);
     uploadFile(formData).then((res) => {
       if (res.code === 200) {
         const file = {};
@@ -340,7 +353,9 @@
   function changeEdit() {
     editStatus.value = !editStatus.value;
   }
-
+  function openEvidience() {
+    window.open(`${baseUrl.value}${form.value.evidenceFiles[0].fileUrl}`);
+  }
   function amountChangeHandler() {
     let amount = 0;
     amount += form.value.unitAmount == null ? 0 : form.value.unitAmount;

+ 12 - 5
src/views/business/housingFund/declare/view.vue

@@ -82,7 +82,9 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="凭证" required>
-                <el-upload action="#" :http-request="upload" :with-credentials="true" :show-file-list="false" multiple>
+                <img  style="height: 148px; width: 148px" :src="`${baseUrl}/${form.evidenceFile}`"
+                class="avatar" @click="openEvidience()" />
+                <!-- <el-upload action="#" :http-request="upload" :with-credentials="true" :show-file-list="false" multiple>
                   <el-button size="small" type="primary" icon="Upload" v-if="form.status !==3">点击上传</el-button>
                 </el-upload>
                 <el-table style="margin-top: 15px;" ref="dbTable" :data="form.evidenceFiles" size="small" border
@@ -102,7 +104,7 @@
                         v-if="form.status !==3">删除</el-button>
                     </template>
                   </el-table-column>
-                </el-table>
+                </el-table> -->
               </el-form-item>
             </el-col>
           </el-row>
@@ -141,7 +143,7 @@
   const loading = ref(false);
   const stopUseBack = ref(false)
   const currentMonth = ref(
-    proxy.moment().format("YYYY-MM-01")
+    // proxy.moment().format("YYYY-MM-01")
   );
   const baseUrl = ref(import.meta.env.VITE_APP_BASE_API);
   const props = defineProps({
@@ -175,11 +177,15 @@
 
   function open(detail) {
     visible.value = true;
-    currentMonth.value = proxy.moment().format("YYYY-MM-01")
+     currentMonth.value = detail.year + "-" + detail.month + "-01"
+    // currentMonth.value = proxy.moment().format("YYYY-MM-01")
     form.value = detail;
     loadData();
   }
-
+  function openEvidience() {
+    
+    window.open(`${baseUrl.value}${form.value.evidenceFile}`);
+  }
   function loadData() {
     loading.value = true
     form.value.year = proxy.moment(currentMonth.value).format("YYYY");
@@ -188,6 +194,7 @@
     const clearForm = { year, month, socialSecurityDeclareId, companyId }
     getDetail(clearForm).then((res) => {
       form.value = { ...proxy.deepClone(emptyForm), ...res.data };
+      form.value.evidenceFile =  form.value.evidenceFiles[0].fileUrl;
       amountChangeHandler();
 
     }).finally(() => {

+ 11 - 3
src/views/business/housingFund/fileListDialog.vue

@@ -29,7 +29,9 @@
                 <i class="fa fa-th-list" aria-hidden="true" /> 文件信息
               </div>
             </div>
-            <div class="details-body">
+            <img  style="height: 148px; width: 148px" :src="`${baseUrl}/${form.evidenceFile}`"
+            class="avatar" @click="openEvidience()" />
+            <!-- <div class="details-body">
               <div>
                 <el-table
                   ref="sourceTable"
@@ -64,7 +66,7 @@
                   </el-table-column>
                 </el-table>
               </div>
-            </div>
+            </div> -->
           </el-col>
         </el-row>
       </el-form>
@@ -168,11 +170,14 @@ function open(detail) {
   visible.value = true;
   form.value = detail;
   loadData();
+  console.log(form.value);
+  
 }
 
 function loadData() {
   getDetail(form.value).then((res) => {
     form.value = { ...proxy.deepClone(emptyForm), ...res.data };
+    form.value.evidenceFile =  form.value.evidenceFiles[0].fileUrl;
   });
 }
 
@@ -269,7 +274,10 @@ function handleVerify(status) {
       });
   }
 }
-
+function openEvidience() {
+    
+    window.open(`${baseUrl.value}${form.value.evidenceFile}`);
+  }
 function verify(data) {
   verifyDetail(data).then((res) => {
     reset();

+ 103 - 101
src/views/business/production/IndividualIncomeTaxIs/FormDialog.vue

@@ -3,57 +3,58 @@
   <el-dialog title="个税信息" v-model="visible" width="800px" append-to-body draggable @close="close"
     :close-on-click-modal="false">
     <div v-loading="loading">
-      <div>
-        <div style="padding: 8px 24px 16px 24px">
-          <el-form size="small" label-width="110px">
-            <el-row :gutter="30">
-              <el-col :span="24">
-                <el-form-item label="客户名称">
-                  <div>{{ currentMember }}</div>
-                </el-form-item>
-                <el-form-item label="所属月份">
-                  <!-- <div>{{ year }}-{{ month }}</div> -->
-                  <el-date-picker v-model="currentMonth" type="month" placeholder="请选择时间" format="YYYY-MM"
-                    @change="changeMonthHandle" />
-                </el-form-item>
-              </el-col>
-              <el-col :span="24">
-                <el-divider />
-              </el-col>
-              <el-col :span="12">
-                <el-form-item label="个税金额">
-                  <el-input-number v-if="!isView" placeholder="个税金额" v-model="emptyForm.amount" :precision="2" style="
+      <div style="padding: 8px 24px 16px 24px">
+        <el-form size="small" label-width="110px">
+          <el-row :gutter="30">
+            <el-col :span="24">
+              <el-form-item label="客户名称">
+                <div>{{ currentMember }}</div>
+              </el-form-item>
+              <el-form-item label="所属月份">
+                <!-- <div>{{ year }}-{{ month }}</div> -->
+                <el-date-picker v-model="currentMonth" type="month" placeholder="请选择时间" format="YYYY-MM"
+                  @change="changeMonthHandle" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-divider />
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="个税金额">
+                <el-input-number v-if="!isView" placeholder="个税金额" v-model="emptyForm.amount" :precision="2" style="
+
                       display: flex;
                       align-items: center;
                       justify-content: center;
                     " :controls="false" @keypress.enter.prevent />
-                  <div v-else>{{ rowNum(emptyForm.amount) }}</div>
-                </el-form-item>
-              </el-col>
+                <div v-else>{{ rowNum(emptyForm.amount) }}</div>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="12">
+              <el-form-item label="备注:">
+                <el-input v-if="!isView" type="textarea" rows="2" maxlength="200" show-word-limit
+                  v-model="emptyForm.remark" />
+                <span v-else>{{ emptyForm.remark }}</span>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <div class="details-btns-container">
+                <el-form-item label="凭证文件" prop="evidenceFile" required>
+                  <dragUpload :accept="accept" style="width:100%" @file="upload"
+                    v-if="emptyForm.evidenceFile == null || emptyForm.evidenceFile == ''" />
+                  <img v-else style="height: 148px; width: 148px" :src="`${baseUrl}/${emptyForm.evidenceFile}`"
+                    class="avatar" @click="openEvidience('evidenceFile')" />
+                  <div v-if="!isView|| emptyForm.status !== 3">
+                    <el-icon :size="20" v-if="emptyForm.evidenceFile !== '' ||emptyForm.evidenceFile == null "
+                      @click="emptyForm.evidenceFile = ''" class="delete-button">
+                      <Delete />
+                    </el-icon>
+                  </div>
+                  <div v-else>
+                  </div>
+                  <!-- <el-upload
 
-              <el-col :span="12">
-                <el-form-item label="备注:">
-                  <el-input v-if="!isView" type="textarea" rows="2" maxlength="200" show-word-limit
-                    v-model="emptyForm.remark" />
-                  <span v-else>{{ emptyForm.remark }}</span>
-                </el-form-item>
-              </el-col>
-              <el-col :span="24">
-                <div class="details-btns-container">
-                  <el-form-item label="凭证文件" prop="evidenceFile" required>
-                    <dragUpload :accept="accept" style="width:100%" @file="upload"
-                      v-if="emptyForm.evidenceFile == null || emptyForm.evidenceFile == ''" />
-                    <img v-else style="height: 148px; width: 148px" :src="`${baseUrl}/${emptyForm.evidenceFile}`"
-                      class="avatar" @click="openEvidience('evidenceFile')" />
-                    <div v-if="!isView|| emptyForm.status !== 3">
-                      <el-icon :size="20" v-if="emptyForm.evidenceFile !== '' ||emptyForm.evidenceFile == null "
-                        @click="emptyForm.evidenceFile = ''" class="delete-button">
-                        <Delete />
-                      </el-icon>
-                    </div>
-                    <div v-else>
-                    </div>
-                    <!-- <el-upload
                       v-if="!isView"
                       action="#"
                       :http-request="upload"
@@ -73,7 +74,7 @@
                       />
                       <i v-else class="el-icon-plus avatar-uploader-icon" />
                     </el-upload> -->
-                    <!-- <img
+                  <!-- <img
                       v-else-if="
                         emptyForm.evidenceFile != null &&
                         emptyForm.evidenceFile !== ''
@@ -83,62 +84,64 @@
                       class="avatar"
                       @click="openEvidience('evidenceFile')"
                     /> -->
-                  </el-form-item>
-                  <!-- 删除按钮 -->
-
-                </div>
-              </el-col>
-              <el-col :span="24" style="padding: 15px 15px 16px 15px">
-                <div class="details-btns-container">
-                  <el-form-item label="报表文件" prop="reportFile" required>
-                    <el-upload v-if="!isView || emptyForm.status !== 3" action="#" :http-request="uploadextFile"
-                      :with-credentials="true" :show-file-list="false" multiple>
-                      <el-button size="small" type="primary" icon="Upload">点击上传</el-button>
-                    </el-upload>
-                  </el-form-item>
-                </div>
-                <div class="details-body" style="height: 100px">
-                  <el-table ref="filesTable" :data="reportFiles" size="small" height="100%" border
-                    header-row-class-name="list-header-row">
-                    <el-table-column label="文件名" prop="fileName" align="center">
-                      <template #default="scope">
-                        <el-button @click="openEvidenceFile(scope.row)" type="primary" link>
-                          {{ scope.row.fileName }}
-                        </el-button>
-                      </template>
-                    </el-table-column>
-                    <el-table-column v-if="!isView || emptyForm.status !== 3" label="操作" width="50" align="center">
-                      <template #default="scope">
-                        <el-button size="small" link type="danger" @click="handleDelFile(scope.$index)">删除</el-button>
-                      </template>
-                    </el-table-column>
-                  </el-table>
-                </div>
-              </el-col>
-            </el-row>
-          </el-form>
-        </div>
-      </div>
-      <div class="form-btns-container" style="height: 40px">
-        <el-button size="small" icon="close" v-if="!isView || emptyForm.status !== 3"
-          style="float: right; margin-left: 12px; margin-right: 12px" @click="close">
-          取消
-        </el-button>
-        <div v-if="!isView || emptyForm.status !== 3">
-          <el-button type="primary" size="small" icon="Finished"
-            v-hasPermi="['business:individualIncomeTaxDetail:saveDetail']" style="float: right" @click="handleSave">
-            保存
-          </el-button>
-        </div>
-        <div v-if="!stopUseBack">
-          <el-button v-if="!stopUseBack" icon="back" type="warning" size="small" style="float: right;"
-            :disabled="(emptyForm == null || emptyForm.status !== 3)  " @click="turnBack(emptyForm)"
-            v-hasPermi="['business:individualIncomeTaxDetail:deductionTurnBack']">
-            退回
+                </el-form-item>
+                <!-- 删除按钮 -->
+
+              </div>
+            </el-col>
+            <el-col :span="24" style="padding: 15px 15px 16px 15px">
+              <div class="details-btns-container">
+                <el-form-item label="报表文件" prop="reportFile" required>
+                  <el-upload v-if="!isView || emptyForm.status !== 3" action="#" :http-request="uploadextFile"
+                    :with-credentials="true" :show-file-list="false" multiple>
+                    <el-button size="small" type="primary" icon="Upload">点击上传</el-button>
+                  </el-upload>
+                </el-form-item>
+              </div>
+              <div class="details-body" style="height: 100px">
+                <el-table ref="filesTable" :data="reportFiles" size="small" height="100%" border
+                  header-row-class-name="list-header-row">
+                  <el-table-column label="文件名" prop="fileName" align="center">
+                    <template #default="scope">
+                      <el-button @click="openEvidenceFile(scope.row)" type="primary" link>
+                        {{ scope.row.fileName }}
+                      </el-button>
+                    </template>
+                  </el-table-column>
+                  <el-table-column v-if="!isView || emptyForm.status !== 3" label="操作" width="50" align="center">
+                    <template #default="scope">
+                      <el-button size="small" link type="danger" @click="handleDelFile(scope.$index)">删除</el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </div>
+            </el-col>
+          </el-row>
+        </el-form>
+
+
+        <div class="form-btns-container" style="height: 40px">
+          <el-button size="small" icon="close" v-if="!isView || emptyForm.status !== 3"
+            style="float: right; margin-left: 12px; margin-right: 12px" @click="close">
+            取消
           </el-button>
+          <div v-if="!isView || emptyForm.status !== 3">
+            <el-button type="primary" size="small" icon="Finished"
+              v-hasPermi="['business:individualIncomeTaxDetail:saveDetail']" style="float: right" @click="handleSave">
+              保存
+            </el-button>
+          </div>
+          <div v-if="!stopUseBack" >
+            <el-button v-hasPermi="['business:individualIncomeTaxDetail:deductionTurnBack']"  icon="back" type="warning" size="small"
+              style="float: right;" :disabled="(emptyForm == null || emptyForm.status !== 3)  "
+              @click="turnBack(emptyForm)">
+              退回
+            </el-button>
+          </div>
         </div>
-
       </div>
+
+
     </div>
   </el-dialog>
 </template>
@@ -452,7 +455,6 @@
 
   /** 关闭 */
   function close() {
-    visible.value = true;
     emptyForm.value = {};
     reportFiles.value = [];
     getList.value();

+ 2 - 1
src/views/business/production/onceWork/index.vue

@@ -9,12 +9,13 @@
         <template #dropdown>
           <el-dropdown-menu>
             <el-dropdown-item icon="Download" @click="handleExport"
-              v-hasPermi="['business:entrust:workOrder:current:export']">
+              v-hasPermi="['business:production:onceexport']">
               导出</el-dropdown-item>
           </el-dropdown-menu>
         </template>
       </el-dropdown>
     </div>
+    <!-- v-hasPermi="['business:entrust:workOrder:current:export']"> -->
     <!-- 搜索区 -->
     <el-form class="list-search-container" size="small" :model="queryParams" ref="queryRef" :inline="true"
       label-width="78px">

+ 21 - 11
src/views/business/socialSecurity/declare/form.vue

@@ -178,9 +178,20 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="凭证" required>
-                <el-upload action="#" :http-request="upload" :with-credentials="true" :show-file-list="false" multiple>
+                <dragUpload :accept="accept" style="width:100%" @file="upload"
+                v-if="form.evidenceFiles == null || form.evidenceFiles == ''" />
+              <img v-else style="height: 148px; width: 148px" :src="`${baseUrl}/${form.evidenceFiles[0].fileUrl}`"
+                class="avatar" @click="openEvidience('evidenceFiles[0]')" />
+              <div v-if="!isView|| emptyForm.status !== 3">
+                <el-icon :size="20" v-if="form.evidenceFiles !== '' ||form.evidenceFiles == null "
+                  @click="form.evidenceFiles = []" class="delete-button">
+                  <Delete />
+                </el-icon>
+              </div>
+              <!-- <el-upload action="#" :http-request="upload" :with-credentials="true" :show-file-list="false" multiple>
                   <el-button size="small" type="primary" icon="Upload" v-if="form.status !==3">点击上传</el-button>
-                </el-upload>
+                </el-upload>" -->
+                <!-- <dragUpload :accept="accept" style="width:100%" @file="upload"/>
                 <el-table ref="dbTable" :data="form.evidenceFiles" size="small" border
                   header-row-class-name="list-header-row" row-class-name="list-row">
                   <el-table-column label="文件名" prop="originalFileName" align="center" show-overflow-tooltip>
@@ -192,19 +203,13 @@
                         }}</el-button>
                     </template>
                   </el-table-column>
-                  <!-- <el-table-column
-                  label="文件类型"
-                  width="80"
-                  prop="fileType"
-                  align="center"
-                /> -->
                   <el-table-column label="操作" width="80" prop="fileType" align="center">
                     <template #default="scope">
                       <el-button size="small" link type="danger" v-if=" form.status !== 3"
                         @click="handlerEportFilesDel(scope.row, scope.$index)">删除</el-button>
                     </template>
                   </el-table-column>
-                </el-table>
+                </el-table> -->
               </el-form-item>
             </el-col>
             <el-col :span="24">
@@ -261,6 +266,7 @@
   } from "@/api/business/production/socialSecurityDeclare";
   import { uploadFile } from "@/api/tool/file";
   import { rowNum } from "@/utils/index";
+  import dragUpload from "@/components/dragUpload"
   import { ref } from "vue";
   const { proxy } = getCurrentInstance();
   const visible = ref(false);
@@ -464,7 +470,7 @@
 
   function upload(param) {
     const formData = new FormData();
-    formData.append("file", param.file);
+    formData.append("file", param);
     uploadFile(formData).then((res) => {
       if (res.code === 200) {
         const file = {};
@@ -475,10 +481,14 @@
         file.originalFileName = res.originalFilename;
         file.fileUrl = res.fileName;
         form.value.evidenceFiles.push(file);
+        
       }
     });
   }
-
+  function openEvidience() {
+    
+    window.open(`${baseUrl.value}${form.value.evidenceFiles[0].fileUrl}`);
+  }
   function uploadStatement(param) {
     const formData = new FormData();
     formData.append("file", param.file);

+ 16 - 9
src/views/business/socialSecurity/declare/view.vue

@@ -165,7 +165,9 @@
             </el-col>
             <el-col :span="24">
               <el-form-item label="凭证" required>
-                <el-upload action="#" :http-request="upload" :with-credentials="true" :show-file-list="false" multiple>
+                <img  style="height: 148px; width: 148px" :src="`${baseUrl}/${form.evidenceFile}`"
+                class="avatar" @click="openEvidience()" />
+                <!-- <el-upload action="#" :http-request="upload" :with-credentials="true" :show-file-list="false" multiple>
                   <el-button size="small" type="primary" icon="Upload" v-if="form.status !==3">点击上传</el-button>
                 </el-upload>
                 <el-table ref="dbTable" :data="form.evidenceFiles" size="small" border
@@ -179,19 +181,19 @@
                         }}</el-button>
                     </template>
                   </el-table-column>
-                  <!-- <el-table-column
+                  <el-table-column
                     label="文件类型"
                     width="80"
                     prop="fileType"
                     align="center"
-                  /> -->
-                  <el-table-column label="操作" width="80" prop="fileType" align="center">
+                  />
+                   <el-table-column label="操作" width="80" prop="fileType" align="center">
                     <template #default="scope">
                       <el-button size="small" link type="danger" v-if=" form.status !== 3"
                         @click="handlerEportFilesDel(scope.row, scope.$index)">删除</el-button>
                     </template>
-                  </el-table-column>
-                </el-table>
+                  </el-table-column> 
+                </el-table>  -->
               </el-form-item>
             </el-col>
             <el-col :span="24">
@@ -257,7 +259,7 @@
   const canSave = ref(false);
   const loading = ref(false);
   const currentMonth = ref(
-    proxy.moment().format("YYYY-MM-01")
+   
   );
   const baseUrl = ref(import.meta.env.VITE_APP_BASE_API);
   const props = defineProps({
@@ -291,7 +293,9 @@
 
   function open(detail) {
     visible.value = true;
-    currentMonth.value = proxy.moment().format("YYYY-MM-01")
+   console.log(12,detail.month);
+    // currentMonth.value = proxy.moment().format("YYYY-MM-01")
+    currentMonth.value = detail.year + "-" + detail.month + "-01"
     form.value = detail;
     loadData();
   }
@@ -304,6 +308,7 @@
     const clearForm = { year, month, socialSecurityDeclareId, companyId }
     getDetail(clearForm).then((res) => {
       form.value = { ...proxy.deepClone(emptyForm), ...res.data };
+      form.value.evidenceFile =  form.value.evidenceFiles[0].fileUrl;
       amountChangeHandler();
     }).finally(() => {
         loading.value = false;
@@ -478,7 +483,9 @@
   function changeEdit() {
     editStatus.value = !editStatus.value;
   }
-
+  function openEvidience() {
+    window.open(`${baseUrl.value}${form.value.evidenceFile}`);
+  }
   function amountChangeHandler() {
     let amount = 0;
     amount += form.value.unitInjury == null ? 0 : form.value.unitInjury;

+ 9 - 4
src/views/business/socialSecurity/fileListDialog.vue

@@ -29,7 +29,9 @@
                 <i class="fa fa-th-list" aria-hidden="true" /> 凭证
               </div>
             </div>
-            <div class="details-body">
+            <img  style="height: 148px; width: 148px" :src="`${baseUrl}/${form.evidenceFile}`"
+            class="avatar" @click="openEvidience()" />
+            <!-- <div class="details-body">
               <div>
                 <el-table
                   ref="sourceTable"
@@ -64,7 +66,7 @@
                   </el-table-column>
                 </el-table>
               </div>
-            </div>
+            </div> -->
           </el-col>
 
           <el-col :span="24" class="details-container">
@@ -209,7 +211,6 @@ const emptyForm = {
 };
 
 function open(detail) {
-  console.log(detail);
   visible.value = true;
   form.value = detail;
   loadData();
@@ -218,6 +219,7 @@ function open(detail) {
 function loadData() {
   getDetail(form.value).then((res) => {
     form.value = { ...proxy.deepClone(emptyForm), ...res.data };
+    form.value.evidenceFile =  form.value.evidenceFiles[0].fileUrl;
   });
 }
 
@@ -293,7 +295,10 @@ function getSummaries(param) {
   });
   return sums;
 }
-
+function openEvidience() {
+    
+    window.open(`${baseUrl.value}${form.value.evidenceFile}`);
+  }
 function openFile(row) {
   window.open(`${baseUrl.value}${row.fileUrl}`);
 }

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.