瀏覽代碼

fix(bugs): 修改问题

tangning 3 年之前
父節點
當前提交
b881a43b04

+ 15 - 5
src/api/staff/list.ts

@@ -1,14 +1,15 @@
 import { defHttp } from '/@/utils/http/axios';
-import { PageParams, ListGetResultModel } from './model';
+import { PageParams, ListGetResultModel, DelParams } from './model';
 import { Result } from '/#/axios';
 
 enum Api {
   pageList = '/zfb-api/zfb/shop/sys/user/staffList',
-  del = '/zfb-api/zfb/shop/sys/user/preDeleteStaff',
+  preDel = '/zfb-api/zfb/shop/sys/user/preDeleteStaff',
   roleList = '/zfb-api/zfb/shop/sys/user/roleList',
-  staffSave = '/zfb-api/zfb/shop/sys/user/save',
+  staffSave = '/zfb-api/zfb/shop/sys/user/staffSave',
   update = '/zfb-api/zfb/shop/sys/user/update',
   checkUser = '/zfb-api/zfb/user/checkUserExists',
+  deleteStaff = '/zfb-api/zfb/shop/sys/user/deleteStaff',
 }
 
 /**
@@ -25,9 +26,18 @@ export const ListApi = (params: PageParams) =>
       ignoreCancelToken: true,
     },
   });
-export const delApi = (params: number) =>
+export const delApi = (params: DelParams) =>
   defHttp.post<Result>({
-    url: Api.del,
+    url: Api.deleteStaff,
+    params: { userId: params },
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const preDelApi = (params: number) =>
+  defHttp.post<Result>({
+    url: Api.preDel,
     params: { userId: params },
     headers: {
       // @ts-ignore

+ 4 - 0
src/api/staff/model.ts

@@ -4,6 +4,10 @@ import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel';
  */
 export type PageParams = BasicPageParams;
 
+export interface DelParams {
+  userId: number;
+  toUser: number;
+}
 export interface StaffListItem {
   id: number;
 

+ 4 - 0
src/views/devices/AddModal.vue

@@ -79,6 +79,7 @@
         {
           field: 'wifiName',
           component: 'Input',
+          required: true,
           label: t('routes.devices.wifiName'),
           colProps: {
             span: 24,
@@ -86,6 +87,7 @@
         },
         {
           field: 'address',
+          required: true,
           component: 'Input',
           label: t('routes.devices.address'),
           colProps: {
@@ -112,6 +114,7 @@
         {
           field: 'balance',
           component: 'Input',
+          required: true,
           label: t('routes.devices.balance'),
           colProps: {
             span: 24,
@@ -130,6 +133,7 @@
           field: 'companyId',
           component: 'ApiSelect',
           label: t('routes.devices.companyId'),
+          required: true,
           componentProps: {
             api: allCompanyApi,
             numberToString: true,

+ 1 - 1
src/views/devices/EditModal.vue

@@ -127,7 +127,7 @@
           required: true,
           label: t('routes.devices.address'),
           componentProps: {
-            disabled: true,
+            // disabled: true,
           },
           colProps: {
             span: 24,

+ 17 - 12
src/views/devices/list.vue

@@ -10,19 +10,14 @@
       <template #cameraType="{ record }">
         <Tag color="green">{{ rendercameraTypeLabel(record.cameraType) }} </Tag></template
       >
+      <template #Time="{ record }">
+        <Time v-if="record.activatedTime" :value="record.activatedTime" mode="datetime" />
+      </template>
       <template #own="{ record }">
         {{ renderOwnTypeLabel(record.own) }}
       </template>
 
-      <template #action="{ record }">
-        <TableAction
-          :actions="[
-            {
-              icon: 'clarity:note-edit-line',
-              label: t('common.edit'),
-              onClick: handleEditScenes.bind(null, record),
-            },
-            {
+      <!-- {
               icon: 'ant-design:delete-outlined',
               color: 'error',
               label: t('common.delText'),
@@ -32,6 +27,14 @@
                   createMessage.info(t('common.notConnect'));
                 },
               },
+            }, -->
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              icon: 'clarity:note-edit-line',
+              label: t('common.edit'),
+              onClick: handleEditScenes.bind(null, record),
             },
             {
               icon: 'clarity:unlink-line',
@@ -53,17 +56,18 @@
   import { defineComponent } from 'vue';
   import { BasicTable, useTable, BasicColumn, FormProps, TableAction } from '/@/components/Table';
   import { useMessage } from '/@/hooks/web/useMessage';
+  import { Time } from '/@/components/Time';
   import { Tag } from 'ant-design-vue';
   import { useModal } from '/@/components/Modal';
   import { ListApi, unDeviceApi } from '/@/api/device/list';
   import AddModal from './AddModal.vue';
   import EditModal from './EditModal.vue';
   import { useI18n } from '/@/hooks/web/useI18n';
-  import { RoleEnum } from '/@/enums/roleEnum';
+  // import { RoleEnum } from '/@/enums/roleEnum';
 
   // param type 0
   export default defineComponent({
-    components: { BasicTable, TableAction, Tag, AddModal, EditModal },
+    components: { BasicTable, TableAction, Tag, AddModal, EditModal, Time },
     setup() {
       const { createMessage } = useMessage();
       const [registerAddModal, { openModal: openAddModal }] = useModal();
@@ -105,6 +109,7 @@
         {
           title: t('routes.devices.activationTime'),
           dataIndex: 'activatedTime',
+          slots: { customRender: 'Time' },
           width: 150,
         },
         {
@@ -117,7 +122,7 @@
           title: t('common.operating'),
           dataIndex: 'action',
           slots: { customRender: 'action' },
-          auth: [RoleEnum.SUPER, RoleEnum.PLAT_ADMIN],
+          // auth: [RoleEnum.SUPER, RoleEnum.PLAT_ADMIN],
           width: 140,
         },
       ];

+ 12 - 5
src/views/product/addModal.vue

@@ -9,6 +9,8 @@
   import { defineComponent, ref } from 'vue';
   import { saveItemApi } from '/@/api/product/category';
   import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useI18n } from '/@/hooks/web/useI18n';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   const schemas: FormSchema[] = [
     {
@@ -38,13 +40,17 @@
     props: {
       userData: { type: Object },
     },
-    setup(props, context) {
+    emits: ['saveadd'],
+    setup(_, context) {
       const modelRef = ref({});
+      const { createMessage } = useMessage();
+      const { t } = useI18n();
       const [
         registerForm,
         {
           // setFieldsValue,
-          getFieldsValue,
+          validate,
+          // getFieldsValue,
         },
       ] = useForm({
         labelWidth: 120,
@@ -76,13 +82,14 @@
       }
 
       async function handleOk() {
-        let data = getFieldsValue();
+        let data = await validate();
         let res = await saveItemApi(data);
-        context && context.emit('ok', res);
+        context && context.emit('saveadd', res);
+        createMessage.success(t('common.optSuccess'));
         closeModal();
       }
 
-      return { register, schemas, registerForm, model: modelRef, handleOk };
+      return { register, schemas, registerForm, model: modelRef, handleOk, t };
     },
   });
 </script>

+ 1 - 1
src/views/product/ref.vue

@@ -8,7 +8,7 @@
         <TableAction :actions="createActions(record, column)" />
       </template>
     </BasicTable>
-    <addModal @register="registerModal" @ok="handleSaveAdd" />
+    <addModal @register="registerModal" @saveadd="handleSaveAdd" />
   </div>
 </template>
 

+ 7 - 8
src/views/scenes/liveDrawer.vue

@@ -105,7 +105,7 @@
       let map;
       // Lat(120.262337, 30.178285),
       const myData = reactive({
-        sceneNum: '',
+        sceneUrl: '',
         id: '',
         introduceVideoCover: '',
       });
@@ -136,7 +136,7 @@
             api: brandTypeListApi,
             resultField: 'list',
             labelField: 'name',
-            valueField: 'id',
+            valueField: 'brandType',
             params: {
               page: 1,
               limit: 1000,
@@ -177,7 +177,7 @@
           required: true,
         },
         {
-          field: 'sceneUrl',
+          field: 'sceneNum',
           label: t('routes.scenes.sceneUrl'),
           component: 'ApiSelect',
           // required: true,
@@ -192,9 +192,9 @@
             immediate: true,
             resultField: 'list',
             labelField: 'sceneName',
-            valueField: 'webSite',
+            valueField: 'sceneNum',
             onChange: function (_, item) {
-              myData.sceneNum = item.num;
+              myData.sceneUrl = item.webSite || item.sceneUrl || item.liveRoomUrl;
             },
             params: {
               page: 1,
@@ -382,12 +382,11 @@
               setDAta.introduceVideo = [res.introduceVideo];
             } catch (error) {}
             myData.introduceVideoCover = res.introduceVideoCover;
-            myData.sceneNum = res.sceneNum;
+            myData.sceneUrl = res.sceneUrl;
             await setFieldsValue({
               ...res,
               ...setDAta,
             });
-            myData.sceneNum = res.sceneNum;
             myData.introduceVideoCover = res.introduceVideoCover;
           } catch (error) {
             console.error(error);
@@ -536,7 +535,7 @@
             picList: picList && picList.join('#$#'),
             appListPicUrl: appListPicUrl[0],
             introduceVideo: introduceVideo[0],
-            sceneNum: myData.sceneNum,
+            sceneUrl: myData.sceneUrl,
             introduceVideoCover: myData.introduceVideoCover,
           };
           if (myData.id) {

+ 126 - 0
src/views/staff/delListModal.vue

@@ -0,0 +1,126 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @cancel="resetFields"
+    @register="register"
+    title="新 增"
+    @ok="handleOk"
+  >
+    <div class="pt-3px pr-3px">
+      <BasicForm @register="registerForm" :model="model" />
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, computed } from 'vue';
+  import { saveApi, updateApi } from '/@/api/staff/list';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { useUserStore } from '/@/store/modules/user';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  const { t } = useI18n();
+
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    setup(_, context) {
+      const modelRef = ref({});
+      const userStore = useUserStore();
+      const options = ref([
+        {
+          label: '是',
+          value: 1,
+          key: '1',
+        },
+        { label: '否', value: 0, key: '0' },
+      ]);
+      const userinfo = computed(() => userStore.getUserInfo);
+      const { createMessage } = useMessage();
+      const schemas: FormSchema[] = [
+        {
+          field: 'userId',
+          component: 'Input',
+          label: '手机号',
+          show: false,
+        },
+        {
+          field: 'toUser',
+          component: 'Select',
+          label: '角色',
+          required: true,
+          itemProps: {
+            validateTrigger: 'blur',
+          },
+          colProps: {
+            span: 22,
+          },
+          componentProps: {
+            options: options.value,
+            // labelField: 'roleName',
+            // valueField: 'roleId',
+          },
+        },
+      ];
+      const [registerForm, { setFieldsValue, validate, resetFields, updateSchema }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      function onDataReceive(data) {
+        console.log('onDataReceive', data);
+        // 方式1;
+        setFieldsValue({
+          ...data,
+        });
+        if (data.option) {
+          options.value = data.option;
+          updateSchema({
+            field: 'toUser',
+            component: 'Select',
+            label: '角色',
+            required: true,
+            itemProps: {
+              validateTrigger: 'blur',
+            },
+            colProps: {
+              span: 22,
+            },
+            componentProps: {
+              options: options.value,
+            },
+          });
+        }
+      }
+
+      async function handleOk() {
+        let data = await validate();
+        const { companyId } = userinfo.value;
+        const requestApi = data.id ? updateApi : saveApi;
+        let res = await requestApi({
+          userName: data.phone,
+          phone: data.phone,
+          nickName: data.nickName,
+          roleId: data.roleId,
+          companyId,
+        });
+        console.log('res', res);
+        context && context.emit('ok', res);
+        createMessage.success(t('common.optSuccess'));
+        closeModal();
+        resetFields();
+      }
+
+      return { options, register, schemas, registerForm, model: modelRef, handleOk, resetFields };
+    },
+  });
+</script>

+ 19 - 4
src/views/staff/list.vue

@@ -37,6 +37,7 @@
     </BasicTable>
     <DetailsModal @register="registerDetail" />
     <SetpaswordModal @register="register" />
+    <DelListModal @register="registerDelList" />
   </div>
 </template>
 <script lang="ts">
@@ -47,18 +48,20 @@
   import { uploadApi } from '/@/api/sys/upload';
   import SetpaswordModal from './setpaswordModal.vue';
   import DetailsModal from './detailsModal.vue';
+  import DelListModal from './delListModal.vue';
   // import { Switch } from 'ant-design-vue';
   // import { h } from 'vue';
-  import { ListApi, delApi } from '/@/api/staff/list';
+  import { ListApi, delApi, preDelApi } from '/@/api/staff/list';
   import { useI18n } from '/@/hooks/web/useI18n';
   // import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
   import { useGo } from '/@/hooks/web/usePage';
   import { Time } from '/@/components/Time';
   export default defineComponent({
-    components: { BasicTable, TableAction, Time, SetpaswordModal, DetailsModal },
+    components: { BasicTable, TableAction, Time, SetpaswordModal, DetailsModal, DelListModal },
     setup() {
       const [register, { openModal }] = useModal();
       const [registerDetail, { openModal: openDetaileModal }] = useModal();
+      const [registerDelList, { openModal: openDelListeModal }] = useModal();
       const { createConfirm, createMessage } = useMessage();
       const go = useGo();
       const { t } = useI18n();
@@ -178,8 +181,17 @@
       function handleEdit(record: Recordable) {
         openDetaileModal(true, record);
       }
-      function handleDelete(record) {
-        console.log('handleDelete', record);
+      async function handleDelete(record) {
+        let check = await preDelApi(record.id);
+        if (Array.isArray(check)) {
+          return openDelListeModal(true, {
+            ...record,
+            option: [{ label: '否杀杀杀', value: 2, key: '2' }],
+          });
+        }
+        handDelconfirm(record);
+      }
+      function handDelconfirm(record) {
         createConfirm({
           iconType: 'warning',
           title: '警告',
@@ -193,7 +205,10 @@
       return {
         registerTable,
         registerDetail,
+        registerDelList,
+        openDelListeModal,
         createMessage,
+        handDelconfirm,
         t,
         go,
         renderRoleType,