x1ongzhu пре 2 година
родитељ
комит
48fe4611ba
2 измењених фајлова са 199 додато и 49 уклоњено
  1. 2 1
      src/App.vue
  2. 197 48
      src/views/page/PaperGen.vue

+ 2 - 1
src/App.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { NConfigProvider, NGlobalStyle } from 'naive-ui'
+import { NConfigProvider, NGlobalStyle, dateZhCN } from 'naive-ui'
 import { NaiveProvider } from '@/components/common'
 import { useTheme } from '@/hooks/useTheme'
 import { useLanguage } from '@/hooks/useLanguage'
@@ -67,6 +67,7 @@ watch(
         :theme-overrides="themeOverrides"
         :locale="language"
         inline-theme-disabled
+        :date-locale="dateZhCN"
     >
         <NGlobalStyle />
         <NaiveProvider>

+ 197 - 48
src/views/page/PaperGen.vue

@@ -25,7 +25,7 @@
         >
             <NSpace class="pb-4">
                 <n-input-group @keyup.enter="getData">
-                    <n-input clearable v-model:value="search"/>
+                    <n-input clearable v-model:value="search" />
                     <n-button type="primary" ghost @click="getData(true)"> 搜索 </n-button>
                 </n-input-group>
                 <NButton type="primary" @click="onCreate">创建</NButton>
@@ -65,45 +65,72 @@
             role="dialog"
             aria-modal="true"
         >
-            <NForm ref="form" :model="model" :rules="rules">
-                <div class="flex">
-                    <div class="flex-1">
-                        <NFormItem label="专业" path="major">
-                            <NInput v-model:value="model.major" />
-                        </NFormItem>
-                        <NFormItem label="标题" path="title">
-                            <NInput v-model:value="model.title" />
-                        </NFormItem>
-                        <NFormItem label="描述" path="description">
-                            <NInput type="textarea" v-model:value="model.description" :resizable="false" :rows="10" />
-                        </NFormItem>
-                        <NFormItem label="备注" path="remark">
-                            <NInput v-model:value="model.remark" />
-                        </NFormItem>
-                    </div>
-                    <div class="flex-1 ml-4">
-                        <NFormItem label="大纲" path="chapters">
-                            <div class="w-full">
-                                <OutlineEditor v-model="model.chapters" />
-                                <div class="flex mt-1 items-center">
-                                    <NButton
-                                        size="small"
-                                        quaternary
-                                        type="primary"
-                                        :loading="genChaptering"
-                                        @click="genChapters"
-                                        >生成大纲</NButton
-                                    >
-                                    <div class="flex-1 text-sm text-right">Tab / Shift + Tab 切换级别</div>
-                                </div>
-                            </div>
-                        </NFormItem>
-                    </div>
-                </div>
+            <NForm class="edit-form" ref="form" :model="model" :rules="rules" inline>
+                <!-- 订单号	总价	定金	定金交付	尾款	尾款交付	交稿状态	接单渠道	学历	专业	题目	字数(k)	查重要求	截稿日期	稿费结款方式	是否结稿费	备注 -->
+
+                <NFormItem label="订单号" path="orderNumber">
+                    <NInput v-model:value="model.orderNumber" />
+                </NFormItem>
+                <NFormItem label="总价" path="totalPrice">
+                    <NInput v-model:value="model.totalPrice" />
+                </NFormItem>
+                <NFormItem label="定金" path="deposit">
+                    <NInput v-model:value="model.deposit" />
+                </NFormItem>
+                <NFormItem label="定金交付" path="depositPaid">
+                    <NCheckbox v-model:checked="model.depositPaid">已交</NCheckbox>
+                </NFormItem>
+                <NFormItem label="尾款" path="finalPayment">
+                    <NInput v-model:value="model.finalPayment" />
+                </NFormItem>
+                <NFormItem label="尾款交付" path="finalPaymentPaid">
+                    <NCheckbox v-model:checked="model.finalPaymentPaid">已交</NCheckbox>
+                </NFormItem>
+                <NFormItem label="交稿状态" path="deliveryStatus">
+                    <NSelect v-model:value="model.deliveryStatus" :options="deliveryStatusOptions" filterable />
+                </NFormItem>
+                <NFormItem label="接单渠道" path="orderChannel">
+                    <NInput v-model:value="model.orderChannel" />
+                </NFormItem>
+                <NFormItem label="学历" path="education">
+                    <NSelect v-model:value="model.education" :options="educationOptions" filterable />
+                </NFormItem>
+                <NFormItem label="专业" path="major">
+                    <NInput v-model:value="model.major" />
+                </NFormItem>
+                <NFormItem label="标题" path="title">
+                    <NInput v-model:value="model.title" />
+                </NFormItem>
+                <NFormItem label="字数" path="wordCount">
+                    <NInput v-model:value="model.wordCount" />
+                </NFormItem>
+                <NFormItem label="查重要求" path="plagiarismCheck">
+                    <NInput v-model:value="model.plagiarismCheck" />
+                </NFormItem>
+                <NFormItem label="截稿日期" path="deadline">
+                    <NDatePicker
+                        v-model:formatted-value="model.deadline"
+                        value-format="yyyy-MM-dd"
+                        type="date"
+                        clearable
+                    />
+                </NFormItem>
+                <NFormItem label="稿费结款方式" path="paymentMethod">
+                    <NInput v-model:value="model.paymentMethod" />
+                </NFormItem>
+                <NFormItem label="是否结稿费" path="paymentStatus">
+                    <NInput v-model:value="model.paymentStatus" />
+                </NFormItem>
+                <div class="w-3/4"></div>
+                <NFormItem style="width: calc(100% - 18px)" label="备注" path="remark">
+                    <NInput type="textarea" :resizable="false" :rows="3" v-model:value="model.remark" />
+                </NFormItem>
             </NForm>
             <NSpace class="text-right" justify="end">
                 <NButton @click="() => (showForm = false)">取消</NButton>
-                <NButton type="primary" @click="submit" :loading="loading">{{ orderId ? '保存' : '创建' }}</NButton>
+                <NButton type="primary" @click="submit(false)" :loading="loading">{{
+                    orderId ? '保存' : '创建'
+                }}</NButton>
             </NSpace>
         </n-card>
     </n-modal>
@@ -123,6 +150,37 @@
             </div>
         </n-drawer-content>
     </n-drawer>
+
+    <n-modal v-model:show="showGenDialog">
+        <n-card style="width: 800px" title="生成" :bordered="false" size="huge" role="dialog" aria-modal="true">
+            <NForm ref="genForm" :model="model" :rules="rules">
+                <NFormItem label="描述" path="description">
+                    <NInput type="textarea" v-model:value="model.description" :resizable="false" :rows="3" />
+                </NFormItem>
+                <NFormItem label="大纲" path="chapters">
+                    <div class="w-full">
+                        <OutlineEditor v-model="model.chapters" />
+                        <div class="flex mt-1 items-center">
+                            <NButton
+                                size="small"
+                                quaternary
+                                type="primary"
+                                :loading="genChaptering"
+                                @click="genChapters"
+                            >
+                                生成大纲
+                            </NButton>
+                            <div class="flex-1 text-sm text-right">Tab / Shift + Tab 切换级别</div>
+                        </div>
+                    </div>
+                </NFormItem>
+            </NForm>
+            <NSpace class="text-right" justify="end">
+                <NButton @click="() => (showGenDialog = false)">取消</NButton>
+                <NButton type="primary" @click="gen" :loading="loading">确认生成</NButton>
+            </NSpace>
+        </n-card>
+    </n-modal>
 </template>
 <script lang="ts" setup>
 import { h, defineComponent, ref, reactive, onMounted, Ref, computed } from 'vue'
@@ -149,7 +207,11 @@ import {
     NDropdown,
     NDrawer,
     NDrawerContent,
-    NInputGroup
+    NInputGroup,
+    NSelect,
+    NCheckbox,
+    NRadio,
+    NDatePicker
 } from 'naive-ui'
 import {
     fetchPaperOrders,
@@ -186,6 +248,70 @@ const isLogin = computed(() => {
 const roles = computed(() => {
     return userInfo.value?.roles || []
 })
+const deliveryStatusOptions = [
+    {
+        label: '已交开题',
+        value: '已交开题'
+    },
+    {
+        label: '修改开题中',
+        value: '修改开题中'
+    },
+    {
+        label: '开题定稿',
+        value: '开题定稿'
+    },
+    {
+        label: '已交任务书',
+        value: '已交任务书'
+    },
+    {
+        label: '修改任务书中',
+        value: '修改任务书中'
+    },
+    {
+        label: '任务书定稿',
+        value: '任务书定稿'
+    },
+    {
+        label: '已交初稿',
+        value: '已交初稿'
+    },
+    {
+        label: '改稿中',
+        value: '改稿中'
+    },
+    {
+        label: '定稿',
+        value: '定稿'
+    }
+]
+const educationOptions = [
+    {
+        label: '专科',
+        value: '专科'
+    },
+    {
+        label: '本科',
+        value: '本科'
+    },
+    {
+        label: '专升本',
+        value: '专升本'
+    },
+    {
+        label: '成人本科',
+        value: '成人本科'
+    },
+    {
+        label: '硕士',
+        value: '硕士'
+    },
+    {
+        label: '在职硕士',
+        value: '在职硕士'
+    }
+]
 onMounted(() => {
     getData()
     if (!isLogin.value) {
@@ -272,7 +398,17 @@ const columns: DataTableColumn[] = [
                           {
                               type: 'primary',
                               size: 'small',
-                              onClick: () => gen(row)
+                              onClick: () => {
+                                  model.value = {
+                                      major: row.major,
+                                      title: row.title,
+                                      description: row.description,
+                                      remark: row.remark,
+                                      chapters: row.chapters || []
+                                  }
+                                  orderId.value = row.id
+                                  showGenDialog.value = true
+                              }
                           },
                           () => '生成'
                       )
@@ -345,17 +481,20 @@ async function getData(reset = false) {
     }
 }
 
-async function gen(row: any) {
+async function gen() {
+    await genForm.value?.validate()
     const d = dialog.success({
         title: '生成',
         content: '确认开始生成吗?',
         positiveText: '确认',
         negativeText: '取消',
-        onPositiveClick: () => {
+        onPositiveClick: async () => {
             d.loading = true
-            return fetchGenPaper(row.id)
+            await submit(true)
+            return fetchGenPaper(orderId.value)
                 .then(() => {
                     message.success('已开始生成')
+                    showGenDialog.value = false
                     getData()
                 })
                 .catch((e: any) => {
@@ -477,9 +616,10 @@ const resultColumns: DataTableColumn[] = [
     }
 ]
 
-const showForm = ref(false)
+const showForm = ref(true)
+const genForm: Ref<FormInst | null> = ref(null)
 const form: Ref<FormInst | null> = ref(null)
-const model = ref({
+const model: Ref<any> = ref({
     major: '',
     title: '',
     description: '',
@@ -491,6 +631,7 @@ const rules = {
     title: [{ required: true, message: '请输入标题' }],
     description: [{ required: true, message: '请输入描述' }]
 }
+const showGenDialog = ref(false)
 const loading = ref(false)
 function onCreate() {
     if (roles.value.includes('paperGen') || roles.value.includes('paperOrder')) {
@@ -516,11 +657,11 @@ function onCreate() {
         })
     }
 }
-async function submit() {
-    try {
+async function submit(gen = false) {
+    if (gen) {
+        await genForm.value?.validate()
+    } else {
         await form.value?.validate()
-    } catch (e: any) {
-        return
     }
     try {
         loading.value = true
@@ -693,3 +834,11 @@ async function genChapters() {
     genChaptering.value = false
 }
 </script>
+<style lang="less" scoped>
+:deep(.edit-form) {
+    flex-wrap: wrap;
+    .n-form-item {
+        width: calc(33.33% - 18px);
+    }
+}
+</style>