tangning 2 veckor sedan
förälder
incheckning
e320b48539

+ 2 - 1
.env.development

@@ -6,7 +6,8 @@ VITE_PUBLIC_PATH = ./
 
 # Cross-domain proxy, you can configure multiple
 # Please note that no line breaks
-VITE_PROXY = [["/service","https://survey.4dkankan.com"], ["/fusion","https://survey.4dkankan.com"]]
+# VITE_PROXY = [["/service","http://192.168.9.27:1804"], ["/fusion","http://192.168.9.27:1804"]]
+VITE_PROXY = [["/service","http://192.168.0.43:8808"], ["/fusion","http://192.168.0.43:8808"]]
 # VITE_PROXY=[["/api","https://vvbin.cn/test"]]
 
 # Delete console

+ 45 - 0
src/api/operate/case.ts

@@ -14,6 +14,10 @@ enum Api {
   caseTabulationCopy = '/service/manage/caseTabulation/copy',
   caseTabulationRename = '/service/manage/caseTabulation/rename',
   caseTabulationDel = '/service/manage/caseTabulation/del',
+  caseFusionList = '/service/manage/caseFusion/list',
+  caseFusionMove = '/service/manage/caseFusion/move',
+  caseFusionDel = '/service/manage/caseFusion/del',
+  getNotAuthScene = '/service/manage/case/getNotAuthScene',
 }
 
 /**
@@ -105,3 +109,44 @@ export const caseTabulationDel = (params) =>
       ignoreCancelToken: true,
     },
   });
+export const caseFusionList = (params: PageParams) =>
+  defHttp.post<Result>({
+    url: Api.caseFusionList,
+    params: params,
+    // data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const caseFusionMove = (params) =>
+  defHttp.post<Result>({
+    url: Api.caseFusionMove,
+    params: params,
+    // data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+export const caseFusionDel = (params) =>
+  defHttp.post<Result>({
+    url: Api.caseFusionDel,
+    params: params,
+    // data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const getNotAuthScene = (params) =>
+  defHttp.post<Result>({
+    url: Api.getNotAuthScene,
+    params: params,
+    // data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });

+ 20 - 9
src/views/case/addResultModal.vue

@@ -3,7 +3,7 @@
     <BasicModal
       v-bind="$attrs"
       @register="register"
-      title="设置权限"
+      title="查询权限"
       okText="查询"
       @cancel="resetFields"
       min-height="220px"
@@ -38,6 +38,7 @@
   import { getinnerByRyId, userShareAdd } from '/@/api/operate';
   import resultListModal from './resultListModal.vue';
   import { useModal } from '/@/components/Modal';
+  import { getNotAuthScene } from '/@/api/operate/case';
 
   const { t } = useI18n();
   export default defineComponent({
@@ -64,6 +65,12 @@
           required: false,
         },
         {
+          field: 'ryId',
+          component: 'Input',
+          show: false,
+          label: 'id',
+        },
+        {
           field: 'ryNo',
           component: 'Input',
           label: '人员编号',
@@ -88,6 +95,7 @@
                   setFieldsValue({
                     ryNickName: res && res.data ? res.data.ryNickName : '',
                     id: res && res.data ? res.data.id : '',
+                    ryId: res && res.data ? res.data.ryId : '',
                   });
                 }
               },
@@ -160,7 +168,7 @@
       onMounted(() => {});
       let addListFunc = () => {};
       const [register, { closeModal }] = useModalInner(async (data) => {
-        console.log('option', data);
+        console.log('useModalInner', data);
       });
       function onFilterOption(inputText: string, option) {
         console.log('option', inputText, option.value);
@@ -184,13 +192,16 @@
       const handleSubmit = async () => {
         const params = await validate();
         try {
-          console.log('params', params);
-          // await userShareAdd(params);
-          // closeModal();
-          // resetFields();
-          // emit('ok');
-          openModal(true, {});
-          createMessage.success('操作成功');
+          let res = await getNotAuthScene({ ...params, caseId: params.id, authType: 0 });
+          console.log('params', params, res);
+          if (!res) {
+            closeModal();
+            resetFields();
+            emit('ok');
+            createMessage.success('此用户拥有所有场景查看、编辑权限');
+          } else {
+            openModal(true, {...params, name: params.ryNickName});
+          }
         } catch (error) {
           console.log('not passing', error);
         }

+ 18 - 14
src/views/case/resultListModal.vue

@@ -5,7 +5,6 @@
     :title="fileFlow.name + '查询结果'"
     okText="我知道了"
     @visible-change="handleVisibleChange"
-    @cancel="resetFields"
     :confirmLoading="loading"
     min-height="50"
     @ok="handleSubmit"
@@ -23,11 +22,11 @@
       <BasicTable @register="registerTable">
         <template #href="{ record }">
           <a
-            v-if="record.caseTitle"
+            v-if="record.title"
             target="_blank"
-            :title="record.caseTitle"
-            :href="`/code/index.html?caseId=${record.caseId}#/show`"
-            >{{ record.caseTitle }}</a
+            :title="record.title"
+            :href="record.webSite"
+            >{{ record.title }}</a
           >
           <span v-else>-</span>
         </template>
@@ -46,6 +45,7 @@
   import { uploadApi } from '/@/api/product/index';
   import { ResultEnum } from '/@/enums/httpEnum';
   import { caseListApi } from '/@/api/operate';
+  import { getNotAuthScene } from '/@/api/operate/case';
   const { t } = useI18n();
   export default defineComponent({
     components: { BasicModal, BasicTable, [Tabs.name]: Tabs },
@@ -59,30 +59,31 @@
         name: '',
         type: 2, //2-普通发票,3-专用发票
       });
+      const caseId = ref<number>(0); //0查看 、1编辑
+      const ryId = ref<string>(''); //0查看 、1编辑
       const tableType = ref<number>(0); //0查看 、1编辑
       const columns = [
         {
-          title: '标题',
+          title: '场景标题',
           dataIndex: 'sceneName',
           ellipsis: true,
           slots: { customRender: 'href' },
           resizable: true,
           minWidth: 150,
-          width: 300,
+          width: 250,
         },
         {
           title: '姓名',
-          dataIndex: 'userName',
+          dataIndex: 'ryNickName',
           ellipsis: true,
-          width: 100,
         },
       ];
       const [registerTable, { reload }] = useTable({
-        api: caseListApi,
+        api: getNotAuthScene,
         title: ``,
         // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
         columns: columns,
-        searchInfo: { isShare: tableType },
+        searchInfo: { authType: tableType, caseId: caseId, ryId: ryId },
         useSearchForm: false,
         showIndexColumn: false,
         showTableSetting: true,
@@ -113,8 +114,9 @@
         data && onDataReceive(data);
       });
       function onDataReceive(data) {
-        resetFields();
-        setFieldsValue(data);
+        caseId.value = data.id;
+        ryId.value = data.ryId;
+        reload();
       }
       const handleSubmit = async () => {
         loading.value = true;
@@ -124,7 +126,6 @@
           console.log('res', apiData, params);
           await InvoiceRegister(apiData);
           closeModal();
-          resetFields();
           createMessage.success(t('common.optSuccess'));
           emit('update');
           loading.value = false;
@@ -133,6 +134,9 @@
           console.log('not passing', error);
         }
       };
+      function changeTable () {
+        reload();
+      }
       function handleVisibleChange(v) {
         v && props.userData && nextTick(() => onDataReceive(props.userData));
       }

+ 147 - 0
src/views/diversity/MoveModal.vue

@@ -0,0 +1,147 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="迁移场景"
+    @visible-change="handleVisibleChange"
+    @cancel="resetFields"
+    @ok="handleSubmit"
+    :min-height="0"
+  >
+    <div class="pt-2px pr-3px">
+      <BasicForm @register="registerForm" :model="model">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm>
+      <span>注意:迁移后权限配置将被清空,如需保留,请复制后再做迁移</span>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, nextTick, onMounted, reactive } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { caseFusionMove } from '/@/api/operate/case';
+  import { useI18n } from '/@/hooks/web/useI18n';
+
+  const { t } = useI18n();
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['update', 'register'],
+    setup(props, { emit }) {
+      const modelRef = ref({});
+      const fileFlow = reactive({
+        file: null,
+      });
+      const { createMessage } = useMessage();
+      const schemas: FormSchema[] = [
+        {
+          field: 'fusionId',
+          component: 'Input',
+          show: false,
+          label: 'id',
+          required: false,
+        },
+        {
+          field: 'fusionTitle',
+          component: 'Input',
+          // defaultValue: '场景标题',
+          label: '标题',
+          slot: 'text',
+          colProps: {
+            span: 24,
+          },
+          // required: true,
+        },
+        {
+          field: 'ryId',
+          component: 'Input',
+          label: '迁移至',
+
+          required: true,
+          colProps: {
+            span: 16,
+          },
+          rules: [
+            {
+              required: true,
+              // @ts-ignore
+              validator: async (rule, value) => {
+                if (!value) {
+                  return Promise.reject('请输入人员编号');
+                }
+                // if (/.*[\u4e00-\u9fa5]+.*$/.test(value)) {
+                //   /* eslint-disable-next-line */
+                //   return Promise.reject('不支持中文字符');
+                // }
+                return Promise.resolve();
+              },
+              trigger: 'change',
+            },
+          ],
+          componentProps: {
+            placeholder: '请输入人员编号',
+            maxLength: 15,
+            onChange: (data) => {
+              console.log('data', data);
+            },
+          },
+        },
+      ];
+      const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        console.log(data);
+        data && onDataReceive({...data, ryId: ''});
+      });
+
+      function onDataReceive(data) {
+        modelRef.value = data;
+        resetFields();
+        setFieldsValue(data);
+      }
+      const handleSubmit = async () => {
+        try {
+          const params = await validate();
+          const res = await caseFusionMove(params);
+          console.log('res', res);
+          closeModal();
+          resetFields();
+          createMessage.success('迁移成功。');
+          emit('update');
+        } catch (error) {
+          console.log('not passing', error);
+        }
+      };
+      function handleVisibleChange(v) {
+        // console.log(v);
+        // v && props.userData && nextTick(() => onDataReceive(props.userData));
+      }
+      return {
+        register,
+        schemas,
+        registerForm,
+        model: modelRef,
+        fileFlow,
+        handleVisibleChange,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        t,
+      };
+    },
+  });
+</script>

+ 38 - 32
src/views/diversity/list.vue

@@ -15,6 +15,16 @@
 
           <template #href="{ record }">
             <a
+              v-if="record.fusionTitle"
+              target="_blank"
+              :title="record.fusionTitle"
+              :href="`/code/index.html?caseId=${record.caseId}#/show`"
+              >{{ record.fusionTitle }}</a
+            >
+            <span v-else>-</span>
+          </template>
+          <template #caseTitle="{ record }">
+            <a
               v-if="record.caseTitle"
               target="_blank"
               :title="record.caseTitle"
@@ -28,8 +38,12 @@
               stopButtonPropagation
               :actions="[
                 {
+                  label: '迁移',
+                  ifShow: getTypeCheckPerm('case-edit'),
+                  onClick: handleMove.bind(null, record),
+                },
+                {
                   label: '编辑',
-                  disabled: tableType == 1 && !record.isEdit,
                   ifShow: getTypeCheckPerm('case-edit'),
                   onClick: handlegotoEdit.bind(null, record),
                 },
@@ -76,7 +90,7 @@
         @cancelDownload="cancelDownload"
         :okButtonProps="{ disabled: canDownload }"
       />
-      <MoveModal @register="registerMoveModal" />
+      <MoveModal @register="registerMoveModal" @update="reload" />
       <AddModal @register="registerAddModal"  @update="reload"/>
       <PowersModal @register="registerPowersModal" />
     </PageWrapper>
@@ -98,7 +112,7 @@
   import { PageWrapper } from '/@/components/Page';
   import AddModal from './addCaseModal.vue'
   import DownLoadModal from './DownLoadModal.vue';
-  import MoveModal from '/@/views/productOperation/modal/MoveModal.vue';
+  import MoveModal from './MoveModal.vue';
   import PowersModal from '/@/views/productOperation/modal/PowersModal.vue';
   import { Time } from '/@/components/Time';
   import { Descriptions, Tabs, Progress } from 'ant-design-vue';
@@ -106,23 +120,10 @@
   import { useMessage } from '/@/hooks/web/useMessage';
   import { useModal } from '/@/components/Modal';
   import {
-    operateSceneList,
-    sceneMove,
-    sceneDelete,
-    sceneReset,
-    sceneDownload,
-    caseCheckDown,
-    downloadProcess,
-    sceneCopy,
-    rebuildScene,
-    buildSceneObj,
-    sceneDetail,
-    sceneCount,
-    caseDelApi,
-    caseListApi,
-    caseProcess,
-    caseDown,
-  } from '/@/api/operate';
+    caseFusionList,
+    caseFusionMove,
+    caseFusionDel,
+  } from '/@/api/operate/case';
   import { message } from 'ant-design-vue';
   import { usePermissionStore } from '/@/store/modules/permission';
   import { useUserStore } from '/@/store/modules/user';
@@ -163,21 +164,28 @@
           width: 300,
         },
         {
+          title: '所属案件',
+          dataIndex: 'caseTitle',
+          slots: { customRender: 'caseTitle' },
+          ellipsis: true,
+          width: 140,
+        },
+        {
           title: '人员编号',
-          dataIndex: 'userName',
+          dataIndex: 'ryId',
           ellipsis: true,
-          width: 100,
+          width: 140,
         },
         {
           title: '姓名',
-          dataIndex: 'nickName',
+          dataIndex: 'ryNickName',
           ellipsis: true,
-          width: 100,
+          width: 140,
         },
         {
           title: '创建时间',
           dataIndex: 'createTime',
-          width: 230,
+          width: 150,
           customRender: ({ record }) => {
             return (
               record.createTime &&
@@ -287,7 +295,7 @@
           ifShow: true,
           fixed: 'right',
           flag: 'ACTION',
-          width: 200,
+          width: 230,
         },
       ];
       const searchForm: Partial<FormProps> = {
@@ -316,8 +324,8 @@
       const [registerDownModal, { openModal: openDownModal }] = useModal();
       const [registerMoveModal, { openModal: openMoveModal }] = useModal();
       const [registerPowersModal, { openModal: openPowersModal }] = useModal();
-      const [registerTable, { reload, setColumns }] = useTable({
-        api: caseListApi,
+      const [registerTable, { reload }] = useTable({
+        api: caseFusionList,
         title: ``,
         // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
         columns: columns,
@@ -370,7 +378,7 @@
           title: '删除',
           content: '确定要删除吗?',
           onOk: async () => {
-          caseDelApi({ caseId: record.caseId }).then(() => {
+          caseFusionDel({ fusionId: record.fusionId }).then(() => {
           message.success({
             content: '删除成功',
           });
@@ -381,9 +389,7 @@
         });
       }
       async function handleMove(record: Recordable) {
-        openMoveModal(true, {
-          ...record,
-        });
+        openMoveModal(true, record);
         // sceneMove({ snCode: record.snCode, num: record.num })
         //   .then(() => {
         //     message.success({

+ 10 - 4
src/views/draw/list.vue

@@ -3,8 +3,8 @@
     <PageWrapper contentBackground>
       <template #footer>
         <a-tabs v-model:activeKey="tableType" @change="changeTable">
-          <Tabs.TabPane :key="0" tab="户型图" :disabled="loading" />
-          <Tabs.TabPane :key="1" tab="方位图" :disabled="loading" /> </a-tabs
+          <Tabs.TabPane :key="0" tab="方位图" :disabled="loading" />
+          <Tabs.TabPane :key="1" tab="户型图" :disabled="loading" /> </a-tabs
       ></template>
       <div class="desc-wrap-BasicTable">
         <BasicTable v-show="tableType" @register="registerTable">
@@ -314,7 +314,7 @@
       function handlegoRename(record) {
         openRenameModal(
           true,
-          tableType.value ? { overviewId: record.id } : { tabulationId: record.id },
+          tableType.value ? { overviewId: record.id, newTitle: record.title } : { tabulationId: record.id, newTitle: record.title },
         );
 
         // createPrompt({
@@ -361,11 +361,17 @@
       }
       async function handleDelete(record: Recordable) {
         let url = tableType.value == 1 ? caseOverviewDel : caseTabulationDel;
+        let param =
+          tableType.value == 1
+            ? { overviewId: record.id }
+            : {
+                tabulationId: record.id,
+              };
         createConfirm({
           title: '删除',
           content: '确定要删除吗?',
           onOk: async () => {
-            url({ tabulationId: record.id, overviewId: record.id }).then(() => {
+            url(param).then(() => {
               message.success({
                 content: '删除成功',
               });

+ 5 - 0
src/views/mediaLibrary/list.vue

@@ -137,6 +137,11 @@
           width: 180,
         },
         {
+          title: '勘验号',
+          dataIndex: 'dictNames',
+          width: 80,
+        },
+        {
           title: '上传时间',
           dataIndex: 'createTime',
           width: 180,

+ 209 - 0
src/views/staffShare/addModal.vue

@@ -0,0 +1,209 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="新增人员"
+    @cancel="resetFields"
+    @ok="handleSubmit"
+  >
+    <div class="pt-2px pr-3px">
+      <BasicForm @register="registerForm">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, onMounted, reactive } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { getinnerByRyId, userShareAdd } from '/@/api/operate';
+
+  const { t } = useI18n();
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['ok'],
+    setup(_, { emit }) {
+      const modelRef = ref(false);
+      const fileFlow = reactive({
+        file: null,
+      });
+      const { createMessage } = useMessage();
+      const optionsName = ref([]);
+      const schemas: FormSchema[] = [
+        {
+          field: 'id',
+          component: 'Input',
+          show: false,
+          label: 'id',
+          defaultValue: '111',
+          required: false,
+        },
+        {
+          field: 'ryNo',
+          component: 'Input',
+          label: '人员编号',
+          required: true,
+          rules: [
+            {
+              required: true,
+              // @ts-ignore
+              validator: async (rule, value) => {
+                let myData = await getFieldsValue();
+                if (!value) {
+                  return Promise.reject('请输入人员编号');
+                }
+                let res = await getinnerByRyId({ ryNo: value });
+                console.log('value', value, res);
+                if (res && !res.data) {
+                  return Promise.reject('人员编号不存在');
+                }
+                Promise.resolve();
+                let ryNickName = res && res.data && res.data.ryNickName;
+                if(myData.ryNickName != ryNickName || !myData.ryNickName){
+                  setFieldsValue({
+                    ryNickName: res && res.data ? res.data.ryNickName : '',
+                    id: res && res.data ? res.data.id : '',
+                  });
+                }
+              },
+              trigger: 'blur',
+            },
+          ],
+          colProps: {
+            span: 20,
+          },
+        },
+        // {
+        //   field: 'ryNo',
+        //   component: 'AutoComplete',
+        //   label: '人员编号',
+        //   required: true,
+        //   componentProps: {
+        //     filterOption: onFilterOption,
+        //     onSearch: onSearch,
+        //     onChange: (data) => {
+        //       setTimeout(() => {
+        //         const item = optionsName.value && optionsName.value.find((ele) => ele.ryNo == data);
+        //         setFieldsValue({
+        //           ryNickName: item && item.ryNickName ? item.ryNickName : '',
+        //           id: item && item.id ? item.id : '',
+        //         });
+        //       }, 100);
+        //     },
+        //   },
+        //   colProps: {
+        //     span: 20,
+        //   },
+        // },
+        {
+          field: 'ryNickName',
+          component: 'Input',
+          label: '姓名',
+          // rules: [
+          //   {
+          //     required: true,
+          //     // @ts-ignore
+          //     validator: async (rule, value) => {
+          //       if (!value) {
+          //         return Promise.reject('请输入正确的人员编号');
+          //       }
+          //       return Promise.resolve();
+          //     },
+          //     trigger: 'change',
+          //   },
+          // ],
+          colProps: {
+            span: 20,
+          },
+          componentProps: {
+            disabled: true,
+          },
+        },
+        {
+          field: 'isTop',
+          component: 'CheckboxGroup',
+          label: '共享内容',
+          required: true,
+          componentProps: {
+            options: [
+              { label: '场景', value: 1 },
+              { label: '案件', value: 2 },
+            ],
+          },
+          colProps: {
+            span: 20,
+          },
+        },
+      ];
+      const [
+        registerForm,
+        { validate, resetFields, setFieldsValue, getFieldsValue, updateSchema },
+      ] = useForm({
+        labelWidth: 110,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner(async (data) => {
+        console.log('option', data);
+      });
+      function onFilterOption(inputText: string, option) {
+        console.log('option', inputText, option.value);
+        if (option.value) {
+          return option.value.indexOf(inputText) >= 0;
+        }
+        // return option.value.indexOf(inputText.toUpperCase()) >= 0;
+      }
+      async function onSearch(searchText) {
+        const res = await getinnerByRyId({ ryNo: searchText });
+        console.log('res', res.data);
+        if (!res.data) return;
+        optionsName.value = res.data || {};
+        updateSchema({
+          field: 'ryNo',
+          componentProps: {
+            options: [optionsName.value],
+          },
+        });
+      }
+      const handleSubmit = async () => {
+        const params = await validate();
+        try {
+          console.log('params', params);
+          await userShareAdd(params);
+          closeModal();
+          resetFields();
+          emit('ok');
+          createMessage.success('操作成功');
+        } catch (error) {
+          console.log('not passing', error);
+        }
+      };
+
+      return {
+        register,
+        schemas,
+        registerForm,
+        modelRef,
+        fileFlow,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        t,
+      };
+    },
+  });
+</script>

+ 29 - 0
src/views/staffShare/data.ts

@@ -0,0 +1,29 @@
+// import { FormSchema } from '/@/components/Form/index';
+import { BasicColumn } from '/@/components/Table/src/types/table';
+
+export const userListSchema: BasicColumn[] = [
+  {
+    title: '姓名',
+    width: 200,
+    dataIndex: 'ryNickName',
+    fixed: 'left',
+  },
+  {
+    title: '人员编号',
+    width: 200,
+    dataIndex: 'ryNo',
+  },
+  {
+    title: '共享内容',
+    width: 200,
+    dataIndex: 'isTop',
+  },
+  {
+    title: '状态',
+    width: 200,
+    dataIndex: 'state',
+    customRender: ({ record }) => {
+      return record.status == 1 ? '正常' : '冻结';
+    },
+  },
+];

+ 121 - 0
src/views/staffShare/giveList.vue

@@ -0,0 +1,121 @@
+<template>
+  <div>
+    <BasicTable @register="registerTimeTable">
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              label: record.sceneCount || '-',
+              onClick: handleCreate.bind(null, record),
+            },
+          ]"
+        />
+      </template>
+    </BasicTable>
+    <sceneListModal @register="register" />
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent } from 'vue';
+  import { BasicTable, useTable, FormProps, TableAction } from '/@/components/Table';
+  import { userShareList } from '/@/api/account';
+  import { userListSchema } from './data';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { usePermissionStore } from '/@/store/modules/permission';
+  import sceneListModal from './sceneListModal.vue';
+  import { useModal } from '/@/components/Modal';
+
+  export default defineComponent({
+    components: {
+      BasicTable,
+      sceneListModal,
+      TableAction,
+    },
+    setup() {
+      const { t } = useI18n();
+      const permissionStore = usePermissionStore();
+      const [register, { openModal }] = useModal();
+      const { getCheckPerm } = permissionStore;
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        schemas: [
+          {
+            field: 'ryNickName',
+            label: '姓名',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 6,
+              xxl: 6,
+            },
+          },
+          {
+            field: 'ryNo',
+            label: '人员编号',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 8,
+              xxl: 8,
+            },
+          },
+        ],
+      };
+      const [registerTimeTable, { reload }] = useTable({
+        api: userShareList,
+        columns: userListSchema,
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        showIndexColumn: false,
+        searchInfo: { type: 1 },
+        rowKey: 'id',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+        actionColumn: {
+          width: 100,
+          title: '场景',
+          dataIndex: 'action',
+          slots: { customRender: 'action' },
+        },
+        canResize: true,
+      });
+      function handleCreate(record) {
+        openModal(true, record);
+      }
+      function tabChange(val: string) {
+        console.log('tabChange', val);
+        reload();
+      }
+      function handleOpen(record) {
+        console.log('点击了启用', record);
+      }
+      return {
+        registerTimeTable,
+        handleOpen,
+        tabChange,
+        reload,
+        register,
+        getCheckPerm,
+        handleCreate,
+        t,
+      };
+    },
+  });
+</script>
+<style lang="less" scoped>
+  .desc-wrap-BasicTable {
+    background-color: #f0f2f5;
+    .vben-basic-table-form-container {
+      padding: 0;
+    }
+  }
+</style>

+ 142 - 0
src/views/staffShare/index.vue

@@ -0,0 +1,142 @@
+<template>
+  <div>
+    <BasicTable @register="registerTimeTable">
+      <template #toolbar>
+        <a-button type="primary" @click="handleCreate" v-if="getCheckPerm('sceneShare-add')">
+          新增</a-button
+        >
+      </template>
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              label: '删除',
+              color: 'error',
+              ifShow: getCheckPerm('sceneShare-del'),
+              onClick: handleDlet.bind(null, record),
+            },
+          ]"
+        />
+      </template>
+    </BasicTable>
+    <addModal @register="registerAdd" @ok="reload" />
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent } from 'vue';
+  import { BasicTable, useTable, FormProps, TableAction } from '/@/components/Table';
+  import { userShareList, userShareDel } from '/@/api/account';
+  import { userListSchema } from './data';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { useModal } from '/@/components/Modal';
+  import { usePermissionStore } from '/@/store/modules/permission';
+  import addModal from './addModal.vue';
+  import { useMessage } from '/@/hooks/web/useMessage';
+
+  export default defineComponent({
+    components: {
+      BasicTable,
+      TableAction,
+      addModal,
+    },
+    setup() {
+      const { t } = useI18n();
+      const { createMessage, createConfirm } = useMessage();
+      const permissionStore = usePermissionStore();
+      const [registerAdd, { openModal: openAddModal }] = useModal();
+      const { getCheckPerm } = permissionStore;
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        schemas: [
+          {
+            field: 'ryNickName',
+            label: '姓名',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 6,
+              xxl: 6,
+            },
+          },
+          {
+            field: 'ryNo',
+            label: '人员编号',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 8,
+              xxl: 8,
+            },
+          },
+        ],
+      };
+      const [registerTimeTable, { reload }] = useTable({
+        api: userShareList,
+        columns: userListSchema,
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        showIndexColumn: false,
+        searchInfo: { type: 0 },
+        rowKey: 'id',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+        actionColumn: {
+          width: 100,
+          title: '操作',
+          dataIndex: 'action',
+          slots: { customRender: 'action' },
+        },
+        canResize: true,
+      });
+      function handleCreate() {
+        openAddModal(true, {});
+      }
+      function tabChange(val: string) {
+        console.log('tabChange', val);
+        reload();
+      }
+      function handleOpen(record) {
+        console.log('点击了启用', record);
+      }
+      async function handleDlet(record) {
+        createConfirm({
+          title: '删除',
+          content: `确定要删除 ${record.ryNo} 吗?`,
+          onOk: async () => {
+            await userShareDel({id: record.id });
+            createMessage.success('操作成功');
+            reload();
+          },
+        });
+      }
+      return {
+        registerTimeTable,
+        registerAdd,
+        handleOpen,
+        tabChange,
+        reload,
+        handleDlet,
+        getCheckPerm,
+        handleCreate,
+        t,
+      };
+    },
+  });
+</script>
+<style lang="less" scoped>
+  .desc-wrap-BasicTable {
+    background-color: #f0f2f5;
+    .vben-basic-table-form-container {
+      padding: 0;
+    }
+  }
+</style>

+ 166 - 0
src/views/staffShare/sceneListModal.vue

@@ -0,0 +1,166 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="场景列表"
+    :width="1200"
+    :showOkBtn="false"
+    @ok="handleSubmit"
+  >
+    <div class="pt-3px pr-3px">
+      <div class="table_list">
+        <BasicTable @register="registerSubtable">
+          <template #href="{ record }">
+            <a
+              :title="record.sceneName"
+              v-if="record.webSite"
+              target="_blank"
+              :href="record.webSite"
+              >{{ record.title }}</a
+            >
+            <span v-else-if="record.sceneName">{{ record.sceneName }}</span>
+            <span v-else>-</span>
+          </template>
+        </BasicTable>
+      </div>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, onMounted, ref, h } from 'vue';
+  import { BasicTable, useTable, BasicColumn } from '/@/components/Table';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { Time } from '/@/components/Time';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { sceneList } from '/@/api/operate';
+
+  const { t } = useI18n();
+  export default defineComponent({
+    components: { BasicModal, BasicTable },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['update'],
+    setup(props, { emit }) {
+      const id = ref(null);
+      const columns: BasicColumn[] = [
+        {
+          title: '场景标题',
+          dataIndex: 'sceneName',
+          ellipsis: true,
+          slots: { customRender: 'href' },
+          width: 150,
+        },
+        {
+          title: '场景码',
+          dataIndex: 'num',
+          ellipsis: true,
+          width: 180,
+        },
+        {
+          title: '拍摄时间',
+          dataIndex: 'createTime',
+          width: 180,
+          customRender: ({ record }) => {
+            return (
+              record.createTime &&
+              h(Time, {
+                value: record.createTime,
+                mode: 'datetime',
+              })
+            );
+          },
+        },
+        {
+          title: '计算完成时间',
+          dataIndex: 'amount',
+          width: 180,
+          customRender: ({ record }) => {
+            return (
+              (record.algorithmTime &&
+                h(Time, {
+                  value: record.algorithmTime,
+                  mode: 'datetime',
+                })) ||
+              '-'
+            );
+          },
+        },
+        {
+          title: '人员编号',
+          dataIndex: 'ryNo',
+          width: 100,
+        },
+        {
+          title: t('routes.staff.userName'),
+          dataIndex: 'ryNickName',
+          width: 100,
+          customRender: ({ record }) => {
+            return record.ryNickName || '-';
+          },
+        },
+        {
+          title: '状态',
+          dataIndex: 'status',
+          width: 80,
+          customRender: ({ record }) => {
+            let str;
+            switch (record.status - 0) {
+              case 0:
+                str = '计算中';
+                break;
+              case 1:
+                str = '计算成功';
+                break;
+              case -2:
+                str = '计算成功';
+                break;
+              case -1:
+                str = '计算失败';
+                break;
+            }
+            return record.payStatus == -2 ? '封存' : str;
+          },
+        },
+      ];
+      const [registerSubtable, { reload }] = useTable({
+        api: sceneList,
+        showIndexColumn: true,
+        columns: columns,
+        searchInfo: { jyUserId: id },
+        rowKey: 'id',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+        canResize: true,
+        bordered: true,
+      });
+
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      function onDataReceive(data) {
+        console.log('onDataReceive', data);
+        id.value = data.userId;
+        reload();
+      }
+      const handleSubmit = async () => {
+        closeModal();
+        emit('update');
+      };
+      return {
+        register,
+        handleSubmit,
+        addListFunc,
+        registerSubtable,
+        reload,
+        t,
+      };
+    },
+  });
+</script>

+ 3 - 3
src/views/statistics/scene/index.vue

@@ -1,12 +1,12 @@
 <template>
   <div class="p-4">
     <GrowCard :loading="loading" :list="growCardList" class="enter-y" />
-    <sceneEchart
+    <!-- <sceneEchart
       title="场景趋势分析"
       class="!my-4 enter-y"
       @change="Search"
       :echartData="echartData"
-    />
+    /> -->
   </div>
 </template>
 <script lang="ts" setup>
@@ -35,7 +35,7 @@
   });
   onMounted(() => {
     getData();
-    getList();
+    // getList();
   });
   async function getList() {
     let downlist = [],