tangning 1 rok pred
rodič
commit
b8a1d38cc8

+ 12 - 0
src/api/account/index.ts

@@ -13,6 +13,7 @@ enum Api {
   unbindCamera = '/service/manage/user/unbindCamera',
   allList = '/service/manage/incrementType/allList',
   userShareList = '/service/manage/jy/userShare/list',
+  userShareDel = '/service/manage/jy/userShare/delete',
 }
 
 /**
@@ -41,6 +42,17 @@ export const userShareList = (params: PageParams) =>
     },
   });
 
+export const userShareDel = (params: PageParams) =>
+  defHttp.post<userList>({
+    url: Api.userShareDel,
+    params: params,
+    // data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
 //权益详情
 export const userDetail = (params: PageParams) =>
   defHttp.get<userList>({

+ 23 - 0
src/api/operate/index.ts

@@ -81,6 +81,8 @@ enum Api {
   //生成obj新的接口
   sceneDetail = '/service/manage/scene/sceneDetail',
   buildSceneObj = '/service/manage/scene/buildSceneObj',
+  userShareAdd = '/service/manage/jy/userShare/add',
+  sceneList = '/service/manage/jy/userShare/sceneList',
 }
 
 /**
@@ -534,6 +536,17 @@ export const addAuth = (params) =>
   });
 
 // 根据警员ID获取用户列表
+export const userShareAdd = (params) =>
+  defHttp.post<Result>({
+    url: Api.userShareAdd,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+// 根据警员ID获取用户列表
 export const setAuthType = (params) =>
   defHttp.post<Result>({
     url: Api.setAuthType,
@@ -575,6 +588,16 @@ export const sceneDetail = (params) =>
       ignoreCancelToken: true,
     },
   });
+export const sceneList = (params) =>
+  defHttp.post<Result>({
+    url: Api.sceneList,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
 // 根据警员ID获取用户列表
 export const buildSceneObj = (params) =>
   defHttp.post<Result>({

+ 2 - 2
src/views/account/user/index.vue

@@ -1,6 +1,6 @@
 <template>
   <BasicTable @register="registerTimeTable">
-    <template #action="{ record }">
+    <!-- <template #action="{ record }">
       <TableAction
         :actions="[
           {
@@ -9,7 +9,7 @@
           }
         ]"
       />
-    </template>
+    </template> -->
   </BasicTable>
 </template>
 <script lang="ts">

+ 5 - 2
src/views/productOperation/modal/PowersModal.vue

@@ -165,7 +165,6 @@
             onChange: (value) => {
               fileFlow.showList = value.target.value ? false : true;
               reload();
-              console.log('fileFlow.showList', value.target.value, fileFlow.showList);
             },
           },
           label: '授权方式',
@@ -211,7 +210,11 @@
         try {
           const params = await validate();
           console.log('res', params);
-          const res = await setAuthType({num:numRef.value,...params});
+          const res = await setAuthType({
+            num:numRef.value,
+            ...params,
+            lookAuth:params.authType
+          });
           console.log('res', res);
           closeModal();
           resetFields();

+ 3 - 1
src/views/productOperation/modal/detailModal.vue

@@ -42,6 +42,7 @@
       const editTime = ref('');
       const fileFlow = reactive({
         file: null,
+        qxType: null,
       });
       const { createMessage } = useMessage();
       const title = ref('新增客户');
@@ -358,6 +359,7 @@
         editTime.value = checkAuthOther.editEndTime;
         console.log('setData', setData);
         isEdit.value = true;
+        fileFlow.qxType = data.qxType;
         if (data) {
           title.value = data.id ? '编辑授权' : '新增授权';
           modelRef.value = data.id ? true : false;
@@ -468,10 +470,10 @@
       const handleSubmit = async () => {
         try {
           const params = await validate();
-          console.log('params', params);
           let canEditLook = params.isEmpower && params.isEmpower.some((item) => item == 1) ? 1 : 0;
           await addAuth({
             ...params,
+            lookAuth: fileFlow.qxType ? params.lookAuth : 1,
             lookEndTime:
               params.lookAuth == 2 ? dayjs(params.lookEndTime).format('YYYY-MM-DD HH:mm:ss') : '',
             editEndTime:

+ 144 - 0
src/views/sceneShare/addModal.vue

@@ -0,0 +1,144 @@
+<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 { getByRyId, 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',
+          required: false,
+        },
+        {
+          field: 'ryNo',
+          component: 'AutoComplete',
+          label: '人员编号',
+          required: true,
+          componentProps: {
+            filterOption: onFilterOption,
+            onSearch: onSearch,
+            onChange: (data) => {
+              const item = optionsName.value && optionsName.value.find((ele) => ele.ryNo == data);
+              setFieldsValue({ 
+                ryNickName: item && item.ryNickName ? item.ryNickName : '',
+                id: item && item.id ? item.id : ''
+               });
+            },
+          },
+          colProps: {
+            span: 20,
+          },
+        },
+        {
+          field: 'ryNickName',
+          component: 'Input',
+          label: '姓名',
+          required: true,
+          colProps: {
+            span: 20,
+          },
+          componentProps: {
+            disabled: true,
+          },
+        },
+      ];
+      const [registerForm, { validate, resetFields, setFieldsValue, 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) {
+        if (searchText.length < 7) return;
+        const list = await getByRyId({ ryNo: searchText });
+        optionsName.value =
+          list.map((ele) => {
+            return { ...ele, value: ele.ryNo };
+          }) || [];
+        // console.log('paramList', optionsList);
+        // optionsName.value = optionsList || [];
+        updateSchema({
+          field: 'ryNo',
+          componentProps: {
+            options: optionsName.value,
+          },
+        });
+      }
+      const handleSubmit = async () => {
+        try {
+          const params = await validate();
+          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>

+ 28 - 24
src/views/sceneShare/myScene/index.vue

@@ -1,36 +1,40 @@
 <template>
-  <BasicTable @register="registerTimeTable">
-    <template #action="{ record }">
-      <TableAction
-        :actions="[
-          {
-            label: '详情',
-            onClick: handleEdit.bind(null, record),
-          },
-        ]"
-      />
-    </template>
-  </BasicTable>
+  <div>
+    <BasicTable @register="registerTimeTable">
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              label: record.sceneCount || 0,
+              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 { userListSchema } from './data';
   import { useI18n } from '/@/hooks/web/useI18n';
-  import { useRouter } from 'vue-router';
-  import { otherInfoStore } from '/@/store/modules/other';
   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 { setOverviewInfo } = otherInfoStore();
-      const router = useRouter();
       const permissionStore = usePermissionStore();
+      const [register, { openModal }] = useModal();
       const { getCheckPerm } = permissionStore;
       const searchForm: Partial<FormProps> = {
         labelWidth: 100,
@@ -68,6 +72,7 @@
         formConfig: searchForm,
         showTableSetting: true,
         showIndexColumn: false,
+        searchInfo: { type: 1 },
         rowKey: 'id',
         fetchSetting: {
           pageField: 'pageNum',
@@ -83,25 +88,24 @@
         },
         canResize: true,
       });
+      function handleCreate(record) {
+        openModal(true, record);
+      }
       function tabChange(val: string) {
         console.log('tabChange', val);
         reload();
       }
-      function handleOpen(record: Recordable) {
+      function handleOpen(record) {
         console.log('点击了启用', record);
       }
-      function handleEdit(record: Recordable) {
-        console.log('record', record);
-        setOverviewInfo(record);
-        router.push({ path: 'details' });
-      }
       return {
         registerTimeTable,
         handleOpen,
         tabChange,
         reload,
-        handleEdit,
+        register,
         getCheckPerm,
+        handleCreate,
         t,
       };
     },

+ 137 - 0
src/views/sceneShare/index.vue

@@ -0,0 +1,137 @@
+<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 } = 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) {
+        console.log('record', record);
+        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>

+ 158 - 0
src/views/sceneShare/sceneListModal.vue

@@ -0,0 +1,158 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="场景列表"
+    :width="1200"
+    @ok="handleSubmit"
+  >
+    <div class="pt-3px pr-3px">
+      <div class="table_list">
+        <BasicTable @register="registerSubtable">
+          <template #href="{ record }">
+            <a 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',
+          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>