Browse Source

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

Min 1 year ago
parent
commit
179c487cc6

+ 24 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/api.ts

@@ -0,0 +1,24 @@
+export const MOD = 'contacts'
+
+export const GETSYSFILED = "/sys-dict/getListByCode";
+export const GETPERSONNEL = "/user/getSimpleActiveUserList";
+export const GETGENERATEFOEM = `sys-form/getListByCode${MOD}`
+
+export const actionButtons: any[] = [
+    { text: '批量转移' },
+    { text: '批量删除' },
+    { text: '导入' },
+    { text: '导出' },
+]
+
+export const tableColumns: TableColumn[] = [
+    { prop: 'name', label: '联系人', event: 'toDetali', width: '150' },
+    { prop: 'mobile', label: '客户名称', width: '150' },
+    { prop: 'email', label: '电话号码', width: '200' },
+    { prop: 'wechat', label: '邮箱', width: '200' },
+    { prop: 'position', label: '职务', width: '100' },
+    { prop: 'company', label: '性别', width: '100' },
+    { prop: 'companya', label: '负责人', width: '100' },
+    { prop: 'companyb', label: '创建人', width: '100' },
+    { prop: 'companyc', label: '创建时间', width: '200' },
+]

+ 66 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/component/attachment.vue

@@ -0,0 +1,66 @@
+<template>
+    <div class="attachment pl-4 pr-4 pt-3 pb-3 h-full flex flex-col">
+        <div class="flex justify-between">
+            <div class="title">附件</div>
+            <div>
+                <el-button type="primary">上传</el-button>
+            </div>
+        </div>
+        <div class="flex-1 overflow-auto pt-3">
+            <el-table :data="attachmenttable" border style="width: 100%;height: 200px;">
+                <el-table-column prop="fileName" label="附件名称" width="180" />
+                <el-table-column prop="fileSize" label="附件大小" width="120" />
+                <el-table-column prop="uploader" label="上传人" width="120" />
+                <el-table-column prop="uploadTime" label="上传时间" width="180" />
+                <el-table-column label="操作" width="180" fixed="right">
+                    <template #default="scope">
+                        <el-button link type="primary" size="large">下载</el-button>
+                        <el-button link type="primary" size="large">重命名</el-button>
+                        <el-button link type="danger" size="large">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+    </div>
+</template>
+<script lang="ts" setup>
+import { ref, reactive, onMounted, onUnmounted, defineExpose, inject, watchEffect } from 'vue'
+
+const attachmenttable = ref([{
+    fileName: '文件附件',
+    fileSize: '3.1MB',
+    uploader: '张三',
+    uploadTime: '2024-04-01',
+}, {
+    fileName: '文件附件',
+    fileSize: '3.1MB',
+    uploader: '张三',
+    uploadTime: '2024-04-01',
+}, {
+    fileName: '文件附件',
+    fileSize: '3.1MB',
+    uploader: '张三',
+    uploadTime: '2024-04-01',
+}, {
+    fileName: '文件附件',
+    fileSize: '3.1MB',
+    uploader: '张三',
+    uploadTime: '2024-04-01',
+}, {
+    fileName: '文件附件',
+    fileSize: '3.1MB',
+    uploader: '张三',
+    uploadTime: '2024-04-01',
+}, {
+    fileName: '文件附件',
+    fileSize: '3.1MB',
+    uploader: '张三',
+    uploadTime: '2024-04-01',
+}, {
+    fileName: '文件附件',
+    fileSize: '3.1MB',
+    uploader: '张三',
+    uploadTime: '2024-04-01',
+}])
+</script>
+<style scoped lang="scss"></style>

+ 92 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/component/information.vue

@@ -0,0 +1,92 @@
+<template>
+    <div class="information pl-4 pr-4 pt-3 pb-3">
+        <div class="flex justify-between">
+            <div class="title">基本信息</div>
+            <div>
+                <el-button type="primary">转移</el-button>
+                <el-button type="primary">编辑</el-button>
+            </div>
+        </div>
+        <div class="form flex flex-wrap justify-between">
+            <div v-for="item in formItems" :key="item.label" class="formItem flex pt-2 pb-1" :style="{ width: item.width }">
+                <div :class="item.labelClass">{{ item.label }}:</div>
+                <div class="flex-1 overflow-hidden text-ellipsis whitespace-nowrap ml-1">{{ item.value }}</div>
+            </div>
+        </div>
+    </div>
+</template>
+<script lang="ts" setup>
+import { ref, reactive, onMounted, onUnmounted, defineExpose, inject, watchEffect } from 'vue'
+
+const props = defineProps<{
+    data: any
+}>()
+
+const info: any = ref({})
+
+const formItems = reactive([
+    { label: '联系人', key: 'productCode', value: '', labelClass: 'w-20 text-right text-gray-500', width: '48%' },
+    { label: '客户', key: 'productName', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '电话号码', key: 'typeName', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '邮箱', key: 'unitName', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '职务', key: 'price', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '性别', key: 'unit', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '地址', key: 'status', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '负责人', key: 'inchargerName', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '创建人', key: 'creatorName', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '创建时间', key: 'createTime', value: '', labelClass: 'w-22 text-right text-gray-500', width: '48%' },
+    { label: '备注', key: 'descs', value: '', labelClass: 'w-22 text-right text-gray-500', width: '100%' },
+])
+
+watchEffect(() => {
+
+});
+
+// 生命周期钩子
+onMounted(async () => {
+    info.value = {
+        productCode: '联系的人',
+        productName: '客户名称',
+        typeName: '电话号码',
+        unitName: '邮箱地址',
+        price: '职务',
+        unit: '性别',
+        status: 1,
+        inchargerName: '负责人姓名',
+        creatorName: '创建人姓名',
+        createTime: '创建时间',
+        descs: '备注信息'
+    };
+
+    formItems.forEach(item => {
+        item.value = info.value[item.key];
+    });
+});
+</script>
+<style scoped lang="scss">
+.information {
+    .title {
+        font-size: 18px;
+        color: #000
+    }
+
+    .form {
+        .formItem {
+            .text {
+                display: -webkit-box;
+                /* Safari */
+                -webkit-line-clamp: 2;
+                /* number of lines to show */
+                -webkit-box-orient: vertical;
+                overflow: hidden;
+                line-height: 1.5;
+            }
+        }
+
+        .w-20,
+        .w-22 {
+            width: 80px;
+        }
+    }
+}
+</style>

+ 58 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/component/operationRecord.vue

@@ -0,0 +1,58 @@
+<template>
+    <div class="operationRecord pl-4 pr-4 pt-3 pb-3 h-full flex flex-col">
+        <div class="flex justify-between">
+            <div class="title">操作记录</div>
+        </div>
+        <div class="flex-1 overflow-auto pt-5">
+            <el-table :data="operationRecordtable" border style="width: 100%;height: 278px;">
+                <el-table-column prop="operatingTime" label="操作时间" width="140" />
+                <el-table-column prop="operator" label="操作人" width="120" />
+                <el-table-column prop="operationContent" label="操作内容" />
+            </el-table>
+        </div>
+    </div>
+</template>
+<script lang="ts" setup>
+import { ref, reactive, onMounted, onUnmounted, defineExpose, inject } from 'vue'
+
+const operationRecordtable = ref([{
+    operationContent: '转移线索',
+    operator: '张三',
+    operatingTime: '2024-04-01',
+}, {
+    operationContent: '转移线索',
+    operator: '张三',
+    operatingTime: '2024-04-01',
+}, {
+    operationContent: '转移线索',
+    operator: '张三',
+    operatingTime: '2024-04-01',
+}, {
+    operationContent: '转移线索',
+    operator: '张三',
+    operatingTime: '2024-04-01',
+}, {
+    operationContent: '转移线索',
+    operator: '张三',
+    operatingTime: '2024-04-01',
+}, {
+    operationContent: '转移线索',
+    operator: '张三',
+    operatingTime: '2024-04-01',
+}, {
+    operationContent: '转移线索',
+    operator: '张三',
+    operatingTime: '2024-04-01',
+},])
+// 生命周期钩子
+onMounted(() => {
+});
+</script>
+<style scoped lang="scss">
+.operationRecord {
+    .title {
+        font-size: 18px;
+        color: #000
+    }
+}
+</style>

+ 80 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/component/relatedBusiness.vue

@@ -0,0 +1,80 @@
+<template>
+    <div class="relatedTasks pl-4 pr-4 pt-3 pb-3 h-full flex flex-col">
+        <div class="flex justify-between">
+            <div class="title">相关商机</div>
+            <div>
+                <el-button type="primary">新建商机</el-button>
+            </div>
+        </div>
+        <div class="flex-1 overflow-auto pt-3">
+            <el-table :data="relatedTaskstable" border style="width: 100%;height: 100%;">
+                <el-table-column prop="taskName" label="商机名称">
+                    <template #default="scope">
+                        <el-button link type="primary" size="large">{{
+                            scope.row.taskName
+                        }}</el-button>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="priority" label="客户名称" width="130" />
+                <el-table-column prop="status" label="负责人" width="130" />
+                <el-table-column prop="executor" label="商机金额" width="130" />
+                <el-table-column prop="startTime" label="预计成交时间" width="130" />
+                <el-table-column prop="endTime" label="商机阶段" width="130" />
+                <el-table-column prop="endTime" label="创建人" width="130" />
+                <el-table-column prop="endTime" label="创建时间" width="130" />
+                <el-table-column prop="endTime" label="修改时间" width="130" />
+            </el-table>
+        </div>
+    </div>
+</template>
+<script lang="ts" setup>
+import { ref, reactive, onMounted, onUnmounted, defineExpose, inject } from 'vue'
+
+const relatedTaskstable = ref([{
+    taskName: '相关商机',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '相关商机',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '相关商机',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '相关商机',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '相关商机',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '相关商机',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}])
+// 生命周期钩子
+onMounted(() => {
+});
+</script>
+<style scoped lang="scss"></style>

+ 84 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/component/relatedTasks.vue

@@ -0,0 +1,84 @@
+<template>
+    <div class="relatedTasks pl-4 pr-4 pt-3 pb-3 h-full flex flex-col">
+        <div class="flex justify-between">
+            <div class="title">相关任务</div>
+            <div>
+                <el-button type="primary">新建任务</el-button>
+            </div>
+        </div>
+        <div class="flex-1 overflow-auto pt-3">
+            <el-table :data="relatedTaskstable" border style="width: 100%;height: 100%;">
+                <el-table-column prop="taskName" label="任务名称">
+                    <template #default="scope">
+                        <el-button link type="primary" size="large">{{
+                            scope.row.taskName
+                        }}</el-button>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="priority" label="优先级" width="130" />
+                <el-table-column prop="status" label="状态" width="130" />
+                <el-table-column prop="executor" label="执行人" width="130" />
+                <el-table-column prop="startTime" label="开始时间" width="130" />
+                <el-table-column prop="endTime" label="截至时间" width="130" />
+            </el-table>
+        </div>
+    </div>
+</template>
+<script lang="ts" setup>
+import { ref, reactive, onMounted, onUnmounted, defineExpose, inject } from 'vue'
+
+const relatedTaskstable = ref([{
+    taskName: '任务名称20240316-tempalsbls',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '任务名称20240316-tempalsbls',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '任务名称20240316-tempalsbls',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '任务名称20240316-tempalsbls',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '任务名称20240316-tempalsbls',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}, {
+    taskName: '任务名称20240316-tempalsbls',
+    priority: '中',
+    status: '进行中',
+    executor: '张三',
+    startTime: '2024-04-01',
+    endTime: '2024-04-01',
+}])
+// 生命周期钩子
+onMounted(() => {
+});
+</script>
+<style scoped lang="scss">
+.relatedTasks {
+    .title {
+        font-size: 18px;
+        color: #000
+    }
+}
+</style>

+ 71 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/detail/index.vue

@@ -0,0 +1,71 @@
+<template>
+    <div class="h-full flex p-3 flex-col businessDetail">
+        <div class="w-full bg-white p-2 mb-2 shadow-md rounded-md flex items-center">
+            <div class="icon mr-4">
+                <el-link :underline="false" @click="backPath()">
+                    <el-icon class="el-icon--right"><icon-view /></el-icon> 返回联系人列表
+                </el-link>
+            </div>
+            <div class="mr-8">
+                <el-select v-model="value" placeholder="请选择" style="width: 150px">
+                    <el-option v-for="item in options" :key="item.id" :label="item.productName" :value="item.id" />
+                </el-select>
+            </div>
+        </div>
+        <!-- 内容 -->
+        <div class="flex-1 flex flex-col overflow-y-auto overflow-x-hidden scroll-bar" v-loading="pageLoading">
+            <div class="w-full h-auto flex justify-between">
+                <div class="bg-white shadow-md rounded-md" style="width: 46%;">
+                    <Information :data="information" />
+                </div>
+                <div class="bg-white ml-2 shadow-md rounded-md flex-1">
+                    <Attachment :data="attachment" :information="information" />
+                </div>
+            </div>
+
+            <div class="w-full h-auto flex justify-between mt-2">
+                <div class="bg-white shadow-md rounded-md" style="width: 65%;">
+                    <RelatedTasks :data="relatedTasks" :information="information" />
+                </div>
+                <div class="bg-white ml-2 shadow-md rounded-md flex-1">
+                    <OperationRecord :data="operationRecord" />
+                </div>
+            </div>
+
+            <div class="w-full h-auto flex justify-between mt-2">
+                <div class="bg-white shadow-md rounded-md w-full">
+                    <RelatedBusiness :data="relatedBusiness" />
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+    
+<script lang="ts" setup>
+import { ref, reactive, onMounted, inject } from "vue";
+import { Edit, ArrowLeft as IconView } from '@element-plus/icons-vue'
+import { backPath } from '../../../utils/tools'
+
+import Information from '../component/information.vue'
+import Attachment from '../component/attachment.vue'
+import RelatedTasks from '../component/relatedTasks.vue'
+import OperationRecord from '../component/operationRecord.vue'
+import RelatedBusiness from '../component/relatedBusiness.vue'
+
+const information = ref({}) // 基本信息
+const attachment = ref([]) // 附件
+const relatedTasks = ref([]) // 相关任务
+const operationRecord = ref([]) // 操作记录
+const relatedBusiness = ref([]) // 相关商机
+
+const pageLoading = ref(false)
+
+const value = ref('')
+const options: any = ref([])
+
+onMounted(() => {
+    
+})
+</script>
+    
+<style lang="scss" scoped></style>

+ 140 - 2
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/index.vue

@@ -1,11 +1,149 @@
 <template>
 <template>
-  <div>
-    contacts
+  <div class="h-full flex">
+    <div class="p-5 w-80 pr-0">
+      <div class="bg-white w-full h-full shadow-md rounded-md flex flex-col">
+        <div class="flex-1 p-3 overflow-y-auto">
+          <!-- 筛选条件 -->
+          <el-form :model="filterForm" label-width="70px" style="max-width: 600px">
+            <el-form-item v-for="(item, index) in filterItems" :key="index" :label="item.label">
+              <el-input v-if="item.type === 'input'" v-model="filterForm[item.key as keyof FilterForm]" clearable placeholder="请输入"></el-input>
+              <el-select v-else v-model="filterForm[item.key as keyof FilterForm]" placeholder="请选择" clearable>
+                <el-option v-for="option in item.options" :key="option.id" :label="option.name" :value="option.id" />
+              </el-select>
+            </el-form-item>
+          </el-form>
+        </div>
+      </div>
+    </div>
+    <div class="flex-1 p-5 overflow-auto">
+      <div class="bg-white w-full h-full p-3 shadow-md rounded-md flex flex-col">
+        <div class="flex justify-end pb-3">
+          <!-- 操作按钮 -->
+          <el-button v-for="(button, index) in actionButtons" :key="index" type="primary">{{ button.text }}</el-button>
+        </div>
+        <div class="flex-1 w-full overflow-hidden">
+          <!-- 表格 -->
+          <el-table ref="clueTableRef" :data="formTable" border v-loading="allLoading.formTableLading"
+            style="width: 100%;height: 100%;">
+            <el-table-column v-for="(column, index) in tableColumns" :key="index" :prop="column.prop" :label="column.label" :width="column.width">
+              <template #default="scope">
+                <template v-if="column.event === 'toDetali'">
+                  <el-button link type="primary" size="large" @click="toDetali(scope.row)">{{ scope.row.name }}</el-button>
+                </template>
+              </template>
+            </el-table-column>
+            <el-table-column :label="'操作'" :width="'200px'" fixed="right">
+              <template #default="scope">
+                <el-button link type="primary" size="large">编辑</el-button>
+                <el-button link type="primary" size="large">新建任务</el-button>
+                <el-button link type="danger" size="large">删除</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div class="flex justify-end pt-3">
+          <!-- 分页 -->
+          <el-pagination layout="total, prev, pager, next, sizes" :total="formTablePaging.total"
+            :hide-on-single-page="true" />
+        </div>
+      </div>
+    </div>
   </div>
   </div>
 </template>
 </template>
 
 
 <script lang="ts" setup>
 <script lang="ts" setup>
+import { ref, reactive, onMounted, inject } from "vue";
+import { getAllListByCode, getFromValue, resetFromValue, getFirstDayOfMonth, getLastDayOfMonth, formatDate } from '@/utils/tools'
+import { post, get } from "@/utils/request";
+import { actionButtons, tableColumns, GETSYSFILED, GETPERSONNEL, GETGENERATEFOEM, MOD } from "./api";
+import { useRouter, useRoute } from "vue-router";
 
 
+const router = useRouter()
+
+const filterForm = reactive<FilterForm>({ // 筛选条件
+  contactPerson: "",
+  customerId: "",
+  phoneNumber: '',
+  responsibleId: '',
+  createId: '',
+  email: '',
+});
+const selectData = reactive({ // 下拉数据
+  Personnel: [] as personnelInterface[],
+  Customer: [] as any[],
+})
+const filterItems = ref<FilterItem[]>([
+    { label: '联系人', key: 'contactPerson', type: 'input' },
+    { label: '客户名称', key: 'customerId', type: 'select', options: selectData.Customer },
+    { label: '电话号码', key: 'phoneNumber', type: 'input' },
+    { label: '邮箱', key: 'email', type: 'input' },
+    { label: '负责人', key: 'responsibleId', type: 'select', options: selectData.Personnel },
+    { label: '创建人', key: 'createId', type: 'select', options: selectData.Personnel },
+])
+const formTablePaging = reactive({ // 分页条件
+  currentPage: 1,
+  pageSize: 10,
+  total: 0,
+})
+const generateFormData = ref([]) // 自定义表单数据
+
+const formTable = ref([
+  {name: '联系人', mobile: '13311112222', email: '123@qq.com', responsible: '张三', createId: '张三'}
+]) // 表格数据
+const allLoading = reactive({ // 按钮加载 Loading
+  formTableLading: false,
+})
+const dialogVisible = reactive({
+
+})
+
+function toDetali(row: any) {
+  router.push({
+    path: `${MOD}/detail`,
+    query: { id: row.name }
+  })
+}
+
+async function getSystemField() {
+  const systemField = getAllListByCode([])
+  for (let i in systemField) {
+    const { data } = await get(`${GETSYSFILED}?code=${systemField[i]}`)
+    for (let key of Object.keys(selectData)) {
+      if (systemField[i] == key) {
+        Object.assign(selectData, { [key]: data })
+      }
+    }
+  }
+
+  const { data } = await post(GETPERSONNEL, {})
+  selectData.Personnel = data.map((item: any) => {
+    const { id, name, phone, jobNumber } = item
+    return {
+      id, name, phone, jobNumber
+    }
+  })
+
+  // const res = await get(GETGENERATEFOEM)
+  // generateFormData.value = JSON.parse(res.data[0].config)
+
+  setFilterItems()
+}
+
+function setFilterItems() {
+  console.log(selectData)
+  filterItems.value = [
+    { label: '联系人', key: 'contactPerson', type: 'input' },
+    { label: '客户名称', key: 'customerId', type: 'select', options: selectData.Customer },
+    { label: '电话号码', key: 'phoneNumber', type: 'input' },
+    { label: '邮箱', key: 'email', type: 'input' },
+    { label: '负责人', key: 'responsibleId', type: 'select', options: selectData.Personnel },
+    { label: '创建人', key: 'createId', type: 'select', options: selectData.Personnel },
+  ]
+}
+
+onMounted(() => {
+  getSystemField()
+})
 </script>
 </script>
 
 
 <style lang="scss" scoped></style>
 <style lang="scss" scoped></style>

+ 22 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/contacts/type.d.ts

@@ -0,0 +1,22 @@
+interface FilterItem {
+    label: string;
+    key: string;
+    type: string;
+    options?: any[];
+}
+
+interface TableColumn {
+    prop: string;
+    label: string;
+    width: string;
+    event?: string;
+}
+
+interface FilterForm {
+    contactPerson: string;
+    customerId: string;
+    phoneNumber: string;
+    responsibleId: string;
+    createId: string;
+    email: string;
+}

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -500,7 +500,7 @@ public class DingDingServiceImpl implements DingDingService {
         if (oldD == null) {
         if (oldD == null) {
             //新开通的情况,给字段默认值
             //新开通的情况,给字段默认值
             dingding.setSyncContact(1);
             dingding.setSyncContact(1);
-            dingding.setContactNeedTranslate(1);//上架到钉钉应用市场,通讯录为加密模式,需要转译
+//            dingding.setContactNeedTranslate(1);//上架到钉钉应用市场,通讯录为加密模式,需要转译;暂时不上,待定
             //第一次,查询对方企业的accessToken
             //第一次,查询对方企业的accessToken
             SysConfig config = sysConfigMapper.selectOne(new QueryWrapper<SysConfig>().eq("param_key", "dingding_suite_ticket"));
             SysConfig config = sysConfigMapper.selectOne(new QueryWrapper<SysConfig>().eq("param_key", "dingding_suite_ticket"));
             String suiteTicket = config.getParamValue();
             String suiteTicket = config.getParamValue();

+ 4 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -163,6 +163,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 return httpRespMsg;
                 return httpRespMsg;
             }
             }
         }
         }
+        if (plan.getStatus() == 2) {
+            httpRespMsg.setError("该计划已经停止,无法报工");
+            return httpRespMsg;
+        }
 
 
         //检查当天该员工的该工序是否已经有报工
         //检查当天该员工的该工序是否已经有报工
         Report todayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).eq("create_date", targetDate));
         Report todayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).eq("create_date", targetDate));

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/components/select.vue

@@ -208,13 +208,13 @@ export default {
         // 日报点的索引, 真对填写的日报
         // 日报点的索引, 真对填写的日报
         idx: {
         idx: {
             handler(newValue, oldValue) {
             handler(newValue, oldValue) {
-                console.log(newValue, oldValue)
+                // console.log(newValue, oldValue)
                 this.dailyListIndex = newValue
                 this.dailyListIndex = newValue
             },
             },
         },
         },
         subjectId: {
         subjectId: {
             handler(newValue, oldValue) {
             handler(newValue, oldValue) {
-                console.log(newValue, oldValue)
+                // console.log(newValue, oldValue)
                 this.optionsOId = newValue
                 this.optionsOId = newValue
                 this.multiSelectList = []
                 this.multiSelectList = []
                 if(!this.multiSelect) {
                 if(!this.multiSelect) {

File diff suppressed because it is too large
+ 3 - 3
fhKeeper/formulahousekeeper/timesheet/src/components/taskComponent.vue


+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -216,7 +216,7 @@
                                                         ]</span> 
                                                         ]</span> 
                                                     <span style="margin-left:15px;color:#DAA520;" v-else-if="item2.state == -1">[ {{$t('other.importWaitingForReview')}} ]</span>
                                                     <span style="margin-left:15px;color:#DAA520;" v-else-if="item2.state == -1">[ {{$t('other.importWaitingForReview')}} ]</span>
                                                     <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ {{$t('state.alreadyPassed')}} ]
                                                     <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ {{$t('state.alreadyPassed')}} ]
-                                                        <span style="color:#c7e944" v-if="item2.reportAutoApprove == 1">{{$t('other.automaticReview')}}</span>
+                                                        <span style="color:#c7e944" v-if="item2.reportAutoApprove == 1 && user.companyId != '3511'">{{$t('other.automaticReview')}}</span>
                                                     </span>
                                                     </span>
                                                     
                                                     
                                                     <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ {{$t('state.rejected')}} ] {{$t('other.reason')}}:{{item2.rejectReason}}</span>
                                                     <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ {{$t('state.rejected')}} ] {{$t('other.reason')}}:{{item2.rejectReason}}</span>