Ver Fonte

Revert "feat: 修改英文版本"

This reverts commit 62e91c9ea5aac730dec96c37ad76136e592b3b9a.
HOME\tianlin01 há 11 meses atrás
pai
commit
234dafde98

+ 36 - 42
src/views/ad/applet/history/index.vue

@@ -12,7 +12,7 @@
     />
     <table-dialog
       ref="adDialog"
-      title="Broadcast  content"
+      title="上播内容"
       :schema="adSchema"
     />
     <preview-dialog ref="previewDialog" />
@@ -37,48 +37,42 @@ export default {
         list: getOrders,
         transform: this.transformOrder,
         filters: [
-          {
-            key: 'status', type: 'select', placeholder: 'Order Status', options: [
-              { value: 1, label: 'Pending Review' },
-              { value: 2, label: 'Passed' },
-              { value: 3, label: 'Rejected' },
-              { value: 4, label: 'Pending' },
-              { value: 5, label: 'Expired' }
-            ]
-          }
+          { key: 'status', type: 'select', placeholder: '订单状态', options: [
+            { value: 1, label: '待审核' },
+            { value: 2, label: '通过' },
+            { value: 3, label: '驳回' },
+            { value: 4, label: '待支付' },
+            { value: 5, label: '已过期' }
+          ] }
         ],
         cols: [
           { prop: 'statusTag', type: 'tag' },
-          { label: 'Type', render: ({ type }) => ['', 'Package', 'Immediate', 'Insert'][type], width: 80, align: 'center' },
-          { prop: 'startDate', label: 'Date of publication', width: 100 },
-          { prop: 'range', label: 'Time Period', width: 140 },
-          { prop: 'deviceName', label: 'Device' },
-          { prop: 'freq', label: 'Frequency', 'min-width': 100 },
-          { prop: 'price', label: 'Total Price', width: 100, align: 'right' },
-          { prop: 'phoneNumber', label: 'phone number', width: 120, align: 'right' },
-          { prop: 'createTime', label: 'Submit Time', width: 160, align: 'right' },
-          { prop: 'auditTime', label: 'Review Time', width: 160, align: 'right' },
-          {
-            type: 'invoke', render: [
-              { label: 'Broadcast  content', on: this.onView }
-            ]
-          }
+          { label: '类型', render: ({ type }) => ['', '套餐', '即刻', '插入'][type], width: 80, align: 'center' },
+          { prop: 'startDate', label: '上刊日期', width: 100 },
+          { prop: 'range', label: '时段', width: 140 },
+          { prop: 'deviceName', label: '设备' },
+          { prop: 'freq', label: '频率', 'min-width': 100 },
+          { prop: 'price', label: '总价(元)', width: 100, align: 'right' },
+          { prop: 'phoneNumber', label: '提交人电话', width: 120, align: 'right' },
+          { prop: 'createTime', label: '提交时间', width: 160, align: 'right' },
+          { prop: 'auditTime', label: '审核时间', width: 160, align: 'right' },
+          { type: 'invoke', render: [
+            { label: '上播内容', on: this.onView }
+          ] }
         ]
       },
       adSchema: {
         nonPagination: true,
         list: this.getAssets,
         cols: [
-          { prop: 'typeInfo', label: 'Resources', width: 72, align: 'center' },
+          { prop: 'typeInfo', label: '资源', width: 72, align: 'center' },
           { prop: 'file', label: '', type: 'asset', on: this.onViewAsset },
-          { prop: 'adDuration', label: 'Broadcast Duration', align: 'center' },
-          { prop: 'ratio', label: 'Resolution', align: 'right' },
+          { prop: 'adDuration', label: '上播时长', align: 'center' },
+          { prop: 'ratio', label: '分辨率', align: 'right' },
           { prop: 'statusTag', type: 'tag' },
-          {
-            type: 'invoke', render: [
-              { label: 'View', allow: ({ file }) => !!file, on: this.onViewAsset }
-            ]
-          }
+          { type: 'invoke', render: [
+            { label: '查看', allow: ({ file }) => !!file, on: this.onViewAsset }
+          ] }
         ]
       }
     }
@@ -90,12 +84,12 @@ export default {
         case AppletOrderType.PACKAGE:
           return {
             startDate,
-            range: startTime === SCREEN_TIME_KEY && endTime === SCREEN_TIME_KEY ? 'Startup period' : `${startTime}-${endTime}`,
-            freq: `${day}day x ${duration}second x ${count}times`
+            range: startTime === SCREEN_TIME_KEY && endTime === SCREEN_TIME_KEY ? '开机期间' : `${startTime}-${endTime}`,
+            freq: `${day}天 x ${duration}秒 x ${count}次`
           }
         case AppletOrderType.SOON:
           return {
-            freq: `${assets.reduce((total, { adDuration }) => total + adDuration, 0)}second`
+            freq: `${assets.reduce((total, { adDuration }) => total + adDuration, 0)}`
           }
         default:
           return null
@@ -110,7 +104,7 @@ export default {
           id,
           type,
           statusTag: this.getOrderTag(status, expand),
-          startDate: 'Exception data',
+          startDate: '异常数据',
           price: (price / 100).toFixed(2),
           phoneNumber,
           createTime,
@@ -135,28 +129,28 @@ export default {
         case 1:
           return {
             type: 'primay',
-            label: 'Pending Review'
+            label: '待审核'
           }
         case 2:
           return {
             type: 'success',
-            label: 'Passed'
+            label: '通过'
           }
         case 3:
           return {
             type: 'danger',
-            label: 'Rejected',
+            label: '驳回',
             msg: expand
           }
         case 4:
           return {
             type: 'warning',
-            label: 'Pending Payment'
+            label: '待支付'
           }
         case 5:
           return {
             type: 'danger',
-            label: 'Expired'
+            label: '已过期'
           }
         default:
           return null
@@ -179,7 +173,7 @@ export default {
         data.ratio = width && height ? `${width}x${height}` : '-'
         data.statusTag = {
           type: ['', 'primay', 'success', 'danger'][status],
-          label: ['-', 'Pending Review', 'Passed', 'Rejected'][status],
+          label: ['-', '待审核', '通过', '驳回'][status],
           msg: reason
         }
       }

+ 19 - 25
src/views/ad/applet/review-asset/index.vue

@@ -11,16 +11,14 @@
     />
     <confirm-dialog
       ref="rejectDialog"
-      title="Reason of rejection"
+      title="拒绝原因"
       @confirm="onConfirmReject"
     >
       <div class="c-grid-form u-align-self--center">
-        <span class="c-grid-form__label">
-          Reason of rejection
-        </span>
+        <span class="c-grid-form__label">拒绝原因</span>
         <el-select
           v-model="review.type"
-          placeholder="Please select"
+          placeholder="请选择"
         >
           <el-option
             v-for="option in reviewOptions"
@@ -30,13 +28,11 @@
           />
         </el-select>
         <template v-if="review.type === 'reject'">
-          <span class="c-grid-form__label u-required">
-            Description
-          </span>
+          <span class="c-grid-form__label u-required">描述</span>
           <el-input
             v-model.trim="review.reason"
             type="textarea"
-            placeholder="Please fill in the reason for rejection"
+            placeholder="请填写拒绝原因"
             maxlength="50"
             :rows="3"
             resize="none"
@@ -72,23 +68,21 @@ export default {
         condition: { status: State.SUBMITTED },
         cols: [
           { prop: 'typeInfo', type: 'refresh', width: 72, align: 'center' },
-          { prop: 'file', label: 'Resources', type: 'asset', on: this.onViewAsset },
-          { prop: 'size', label: 'File Size', align: 'right' },
-          { prop: 'ratio', label: 'Resolution', align: 'right' },
-          { prop: 'diff', label: 'Other', align: 'right' },
-          { prop: 'createTime', label: 'Submission Time', width: 160, align: 'right' },
-          {
-            type: 'invoke', width: 160, render: [
-              { label: 'View', on: this.onViewAsset },
-              { label: 'Pass', on: this.onResolve },
-              { label: 'Reject', on: this.onReject }
-            ]
-          }
+          { prop: 'file', label: '资源', type: 'asset', on: this.onViewAsset },
+          { prop: 'size', label: '文件大小', align: 'right' },
+          { prop: 'ratio', label: '分辨率', align: 'right' },
+          { prop: 'diff', label: '其他', align: 'right' },
+          { prop: 'createTime', label: '提交时间', width: 160, align: 'right' },
+          { type: 'invoke', width: 160, render: [
+            { label: '查看', on: this.onViewAsset },
+            { label: '通过', on: this.onResolve },
+            { label: '拒绝', on: this.onReject }
+          ] }
         ]
       },
       reviewOptions: [
-        { value: 'reject', label: 'Customize' },
-        { value: 'Content non-compliance' }
+        { value: 'reject', label: '自定义' },
+        { value: '内容不合规' }
       ],
       review: {
         type: '',
@@ -104,7 +98,7 @@ export default {
         data.ratio = width && height ? `${width}x${height}` : '-'
         data.statusTag = {
           type: ['', 'primay', 'success', 'danger'][status],
-          label: ['-', 'Pending Review', 'Passed', 'Rejected'][status],
+          label: ['-', '待审核', '通过', '驳回'][status],
           msg: reason
         }
         data.size = parseByte(size)
@@ -132,7 +126,7 @@ export default {
       if (!reason) {
         this.$message({
           type: 'warning',
-          message: 'Please select or fill in the reason for rejection'
+          message: '请选择或填写驳回原因'
         })
         return
       }

+ 36 - 44
src/views/ad/applet/review-order/index.vue

@@ -11,16 +11,14 @@
     />
     <confirm-dialog
       ref="rejectDialog"
-      title="Reason of rejection"
+      title="拒绝原因"
       @confirm="onConfirmReject"
     >
       <div class="c-grid-form u-align-self--center">
-        <span class="c-grid-form__label">
-          Reason of rejection
-        </span>
+        <span class="c-grid-form__label">拒绝原因</span>
         <el-select
           v-model="review.type"
-          placeholder="Please select"
+          placeholder="请选择"
         >
           <el-option
             v-for="option in reviewOptions"
@@ -30,13 +28,11 @@
           />
         </el-select>
         <template v-if="review.type === 'reject'">
-          <span class="c-grid-form__label u-required">
-            Description
-          </span>
+          <span class="c-grid-form__label u-required">描述</span>
           <el-input
             v-model.trim="review.reason"
             type="textarea"
-            placeholder="Please fill in the reason for rejection"
+            placeholder="请填写拒绝原因"
             maxlength="50"
             :rows="3"
             resize="none"
@@ -47,7 +43,7 @@
     </confirm-dialog>
     <table-dialog
       ref="adDialog"
-      title="Broadcast content"
+      title="上播内容"
       :schema="adSchema"
     />
     <preview-dialog ref="previewDialog" />
@@ -79,27 +75,25 @@ export default {
         condition: { status: State.SUBMITTED },
         cols: [
           { type: 'refresh' },
-          { label: 'Type', render: ({ type }) => ['', 'Package', 'Immediate', 'Insert'][type], width: 80, align: 'center' },
-          { prop: 'startDate', label: 'Date of publication', width: 100 },
-          { prop: 'range', label: 'Time Period', width: 140 },
-          { prop: 'deviceName', label: 'Device' },
-          { prop: 'freq', label: 'Frequency' },
-          { prop: 'price', label: 'Total Price', width: 100, align: 'right' },
-          { prop: 'phoneNumber', label: 'Phone number', width: 120, align: 'right' },
-          { prop: 'createTime', label: 'Submit Time', width: 160, align: 'right' },
-          {
-            type: 'invoke', width: 180, render: [
-              { label: 'Broadcast content', on: this.onView },
-              { label: 'Pass'/* , allow: ({ invalid }) => !invalid */, on: this.onResolve },
-              { label: 'Reject', on: this.onReject }
-            ]
-          }
+          { label: '类型', render: ({ type }) => ['', '套餐', '即刻', '插入'][type], width: 80, align: 'center' },
+          { prop: 'startDate', label: '上刊日期', width: 100 },
+          { prop: 'range', label: '时段', width: 140 },
+          { prop: 'deviceName', label: '设备' },
+          { prop: 'freq', label: '频率' },
+          { prop: 'price', label: '总价(元)', width: 100, align: 'right' },
+          { prop: 'phoneNumber', label: '提交人电话', width: 120, align: 'right' },
+          { prop: 'createTime', label: '提交时间', width: 160, align: 'right' },
+          { type: 'invoke', width: 180, render: [
+            { label: '上播内容', on: this.onView },
+            { label: '通过'/* , allow: ({ invalid }) => !invalid */, on: this.onResolve },
+            { label: '拒绝', on: this.onReject }
+          ] }
         ]
       },
       reviewOptions: [
-        { value: 'reject', label: 'Customize' },
-        { value: 'Broadcasting time slots have been taken' },
-        { value: 'Content non-compliance' }
+        { value: 'reject', label: '自定义' },
+        { value: '播放时段已被占用' },
+        { value: '内容不合规' }
       ],
       review: {
         type: '',
@@ -109,16 +103,14 @@ export default {
         nonPagination: true,
         list: this.getAssets,
         cols: [
-          { prop: 'typeInfo', label: 'Resources', width: 72, align: 'center' },
+          { prop: 'typeInfo', label: '资源', width: 72, align: 'center' },
           { prop: 'file', label: '', type: 'asset', on: this.onViewAsset },
-          { prop: 'adDuration', label: 'Broadcast Duration', align: 'center' },
-          { prop: 'ratio', label: 'Resolution', align: 'right' },
+          { prop: 'adDuration', label: '上播时长', align: 'center' },
+          { prop: 'ratio', label: '分辨率', align: 'right' },
           { prop: 'statusTag', type: 'tag' },
-          {
-            type: 'invoke', render: [
-              { label: 'View', allow: ({ file }) => !!file, on: this.onViewAsset }
-            ]
-          }
+          { type: 'invoke', render: [
+            { label: '查看', allow: ({ file }) => !!file, on: this.onViewAsset }
+          ] }
         ]
       }
     }
@@ -130,13 +122,13 @@ export default {
         case AppletOrderType.PACKAGE:
           return {
             startDate,
-            range: startTime === SCREEN_TIME_KEY && endTime === SCREEN_TIME_KEY ? 'Startup period' : `${startTime}-${endTime}`,
-            freq: `${day}day x ${duration}second x ${count}times`
+            range: startTime === SCREEN_TIME_KEY && endTime === SCREEN_TIME_KEY ? '开机期间' : `${startTime}-${endTime}`,
+            freq: `${day}天 x ${duration}秒 x ${count}次`
           }
         case AppletOrderType.SOON:
           return {
-            range: 'Immediate',
-            freq: `${assets.reduce((total, { adDuration }) => total + adDuration, 0)}second`
+            range: '即刻',
+            freq: `${assets.reduce((total, { adDuration }) => total + adDuration, 0)}`
           }
         default:
           return null
@@ -150,7 +142,7 @@ export default {
         return {
           id,
           type,
-          startDate: 'Exception data',
+          startDate: '异常数据',
           price: (price / 100).toFixed(2),
           phoneNumber,
           createTime,
@@ -162,7 +154,7 @@ export default {
         ...this.getInfo(type, orders, assets),
         id,
         type,
-        deviceName: orders.length > 1 ? `${orders[0].name}...` : orders[0].name,
+        deviceName: orders.length > 1 ? `${orders[0].name}` : orders[0].name,
         price: (price / 100).toFixed(2),
         phoneNumber,
         createTime,
@@ -192,7 +184,7 @@ export default {
       if (!reason) {
         this.$message({
           type: 'warning',
-          message: 'Please fill in the reason for rejection'
+          message: '请选择或填写驳回原因'
         })
         return
       }
@@ -211,7 +203,7 @@ export default {
         data.ratio = width && height ? `${width}x${height}` : '-'
         data.statusTag = {
           type: ['', 'primay', 'success', 'danger'][status],
-          label: ['-', 'Pending Review', 'Pass', 'Reject'][status],
+          label: ['-', '待审核', '通过', '驳回'][status],
           msg: reason
         }
       }

+ 57 - 71
src/views/ad/applet/user/index.vue

@@ -11,20 +11,20 @@
     />
     <table-dialog
       ref="assetDialog"
-      title="Personal Media Assets"
+      title="个人媒资"
       size="lg"
       :schema="assetSchema"
     />
     <table-dialog
       ref="orderDialog"
-      title="Personal Order"
+      title="个人订单"
       size="lg"
       :schema="orderSchema"
       @row-click="onToggle"
     />
     <table-dialog
       ref="adDialog"
-      title="Broadcast content"
+      title="上播内容"
       :schema="adSchema"
     />
     <preview-dialog ref="previewDialog" />
@@ -52,97 +52,83 @@ export default {
         list: getUsers,
         transform: this.transform,
         filters: [
-          { key: 'phoneNumber', type: 'search', placeholder: 'Phone Number' }
+          { key: 'phoneNumber', type: 'search', placeholder: '手机号' }
         ],
         cols: [
           { prop: 'file', type: 'asset', refresh: true },
-          { prop: 'nickName', label: 'Nickname' },
-          { prop: 'phoneNumber', label: 'Phone Number', align: 'center', 'min-width': 120 },
-          {
-            type: 'invoke', render: [
-              { label: 'Media Assets', on: this.onAsset },
-              { label: 'Order', on: this.onOrder }
-            ]
-          }
+          { prop: 'nickName', label: '昵称' },
+          { prop: 'phoneNumber', label: '手机号', align: 'center', 'min-width': 120 },
+          { type: 'invoke', render: [
+            { label: '媒资', on: this.onAsset },
+            { label: '订单', on: this.onOrder }
+          ] }
         ]
       },
       assetSchema: {
         list: this.getAssets,
         transform: this.transformAsset,
         filters: [
-          {
-            key: 'status', type: 'select', placeholder: 'Status', options: [
-              { value: State.SUBMITTED, label: 'Pending Review' },
-              { value: State.RESOLVED, label: 'Pass' },
-              { value: State.REJECTED, label: 'Reject' }
-            ]
-          }
+          { key: 'status', type: 'select', placeholder: '状态', options: [
+            { value: State.SUBMITTED, label: '待审核' },
+            { value: State.RESOLVED, label: '通过' },
+            { value: State.REJECTED, label: '驳回' }
+          ] }
         ],
         cols: [
           { prop: 'typeInfo', type: 'refresh', width: 72, align: 'center' },
-          { prop: 'file', label: 'Resources', type: 'asset', on: this.onViewAsset },
-          { prop: 'size', label: 'File Size', align: 'right' },
-          { prop: 'ratio', label: 'Resolution', align: 'right' },
-          { prop: 'diff', label: 'Other', align: 'right' },
+          { prop: 'file', label: '资源', type: 'asset', on: this.onViewAsset },
+          { prop: 'size', label: '文件大小', align: 'right' },
+          { prop: 'ratio', label: '分辨率', align: 'right' },
+          { prop: 'diff', label: '其他', align: 'right' },
           { prop: 'statusTag', type: 'tag' },
-          { prop: 'createTime', label: 'Broadcast time', align: 'right', 'min-width': 120 },
-          {
-            type: 'invoke', render: [
-              { label: 'View', allow: ({ file }) => !!file, on: this.onViewAsset }
-            ]
-          }
+          { prop: 'createTime', label: '上传时间', align: 'right', 'min-width': 120 },
+          { type: 'invoke', render: [
+            { label: '查看', allow: ({ file }) => !!file, on: this.onViewAsset }
+          ] }
         ]
       },
       orderSchema: {
         list: this.getOrders,
         transform: this.transformOrder,
         filters: [
-          {
-            key: 'status', type: 'select', placeholder: 'Order Status', options: [
-              { value: 1, label: 'Pending Review' },
-              { value: 2, label: 'Passed' },
-              { value: 3, label: 'Rejected' },
-              { value: 4, label: 'Pending' },
-              { value: 5, label: 'Expired' }
-            ]
-          }
+          { key: 'status', type: 'select', placeholder: '订单状态', options: [
+            { value: 1, label: '待审核' },
+            { value: 2, label: '通过' },
+            { value: 3, label: '驳回' },
+            { value: 4, label: '待支付' },
+            { value: 5, label: '已过期' }
+          ] }
         ],
         cols: [
-          {
-            type: 'expand', refresh: true, render: (data, h) => h('div', {
-              staticClass: 'o-info'
-            }, [
-              h('div', null, `Time Period:${data.range}`),
-              h('div', null, `Frequency:${data.freq}`)
-            ])
-          },
-          { prop: 'deviceName', label: 'Device', 'min-width': 100 },
-          { prop: 'startDate', label: 'Date of publication', align: 'right', 'min-width': 100 },
-          { prop: 'price', label: 'Total Price', 'min-width': 100, align: 'right' },
+          { type: 'expand', refresh: true, render: (data, h) => h('div', {
+            staticClass: 'o-info'
+          }, [
+            h('div', null, `时段:${data.range}`),
+            h('div', null, `频率:${data.freq}`)
+          ]) },
+          { prop: 'deviceName', label: '设备', 'min-width': 100 },
+          { prop: 'startDate', label: '上刊日期', align: 'right', 'min-width': 100 },
+          { prop: 'price', label: '总价(元)', 'min-width': 100, align: 'right' },
           { prop: 'statusTag', type: 'tag' },
-          { prop: 'createTime', label: 'Submit Time', align: 'right', 'min-width': 120 },
-          { prop: 'auditTime', label: 'Review Time', align: 'right', 'min-width': 120 },
-          {
-            type: 'invoke', render: [
-              { label: 'Broadcast content', on: this.onViewOrderAssets }
-            ]
-          }
+          { prop: 'createTime', label: '提交时间', align: 'right', 'min-width': 120 },
+          { prop: 'auditTime', label: '审核时间', align: 'right', 'min-width': 120 },
+          { type: 'invoke', render: [
+            { label: '上播内容', on: this.onViewOrderAssets }
+          ] }
         ]
       },
       adSchema: {
         nonPagination: true,
         list: this.getOrderAssets,
         cols: [
-          { prop: 'typeInfo', label: 'Resources', width: 72, align: 'center' },
+          { prop: 'typeInfo', label: '资源', width: 72, align: 'center' },
           { prop: 'file', label: '', type: 'asset', on: this.onViewAsset },
-          { prop: 'ratio', label: 'Resolution', align: 'right' },
-          { prop: 'adDuration', label: 'Broadcast Duration', align: 'center' },
+          { prop: 'ratio', label: '分辨率', align: 'right' },
+          { prop: 'adDuration', label: '上播时长', align: 'center' },
           { prop: 'statusTag', type: 'tag' },
-          {
-            type: 'invoke', render: [
-              { label: 'View', allow: ({ file }) => !!file, on: this.onViewAsset }
-            ]
-          }
+          { type: 'invoke', render: [
+            { label: '查看', allow: ({ file }) => !!file, on: this.onViewAsset }
+          ] }
         ]
       }
     }
@@ -174,7 +160,7 @@ export default {
         data.ratio = width && height ? `${width}x${height}` : '-'
         data.statusTag = {
           type: ['', 'primay', 'success', 'danger'][status],
-          label: ['-', 'Pending Review', 'Passed', 'Rejected'][status],
+          label: ['-', '待审核', '通过', '驳回'][status],
           msg: reason
         }
         data.size = parseByte(size)
@@ -205,7 +191,7 @@ export default {
         startDate,
         range: `${startTime}-${endTime}`,
         price: (price / 100).toFixed(2),
-        freq: `${day}day x ${duration}second x ${count}times`,
+        freq: `${day}天 x ${duration}秒 x ${count}次`,
         statusTag: this.getOrderTag(status, expand),
         assets,
         createTime,
@@ -217,28 +203,28 @@ export default {
         case 1:
           return {
             type: 'primay',
-            label: 'Pending Review'
+            label: '待审核'
           }
         case 2:
           return {
             type: 'success',
-            label: 'Passed'
+            label: '通过'
           }
         case 3:
           return {
             type: 'danger',
-            label: 'Rejected',
+            label: '驳回',
             msg: expand
           }
         case 4:
           return {
             type: 'warning',
-            label: 'Pending Payment'
+            label: '待支付'
           }
         case 5:
           return {
             type: 'danger',
-            label: 'Expired'
+            label: '已过期'
           }
         default:
           return null

+ 61 - 88
src/views/ad/automation/contract/index.vue

@@ -19,18 +19,13 @@
     >
       <div class="l-flex__fill l-flex c-step">
         <div class="l-flex__none l-flex--col c-step__column">
-          <div class="c-contract-dialog__header u-color--black u-font-size--sm u-bold has-bottom-border">
-            Basic data
-            (affects initial import)
-          </div>
+          <div class="c-contract-dialog__header u-color--black u-font-size--sm u-bold has-bottom-border">基本数据(影响初次导入)</div>
           <div class="l-flex__fill u-overflow-y--auto">
             <div
               v-if="contract"
               class="c-grid-form auto"
             >
-              <div class="c-grid-form__label">
-                Date of publication
-              </div>
+              <div class="c-grid-form__label">上刊日期</div>
               <el-date-picker
                 v-model="contract.date"
                 class="u-width--md"
@@ -40,18 +35,14 @@
                 :editable="false"
                 :clearable="false"
               />
-              <div class="c-grid-form__label">
-                Broadcast Method
-              </div>
+              <div class="c-grid-form__label">上播方式</div>
               <schema-select
                 v-model="contract.time.type"
                 class="u-width--xs"
                 :schema="timeTypeSelectSchema"
               />
               <template v-if="contract.time.type === 2">
-                <div class="c-grid-form__label">
-                  Time Period
-                </div>
+                <div class="c-grid-form__label">时段</div>
                 <el-time-picker
                   key="range-picker"
                   v-model="contract.time.range"
@@ -62,9 +53,7 @@
                 />
               </template>
               <template v-if="contract.time.type === 3">
-                <div class="c-grid-form__label">
-                  Point in time
-                </div>
+                <div class="c-grid-form__label">时间点</div>
                 <el-time-picker
                   key="time-picker"
                   v-model="contract.time.point"
@@ -73,26 +62,20 @@
                   :clearable="false"
                 />
               </template>
-              <div class="c-grid-form__label">
-                Broadcast duration(s)
-              </div>
+              <div class="c-grid-form__label">上播时长(s)</div>
               <el-input-number
                 :value="totalDuration"
                 controls-position="right"
                 disabled
               />
-              <div class="c-grid-form__label">
-                Times of Broadcast
-              </div>
+              <div class="c-grid-form__label">上播次数</div>
               <el-input-number
                 v-model="contract.count"
                 controls-position="right"
                 :min="1"
                 step-strictly
               />
-              <div class="c-grid-form__label">
-                Associated files
-              </div>
+              <div class="c-grid-form__label">关联的文件</div>
               <div class="c-grid-form__option">
                 <el-upload
                   ref="upload"
@@ -132,9 +115,7 @@
               class="l-flex--row inline u-color--black u-font-size--sm u-bold has-active"
               @click="onEditAssets"
             >
-              <span class="c-sibling-item u-bold">
-                Broadcast content
-              </span>
+              <span class="c-sibling-item u-bold">上播内容</span>
               <i class="c-sibling-item near el-icon-edit" />
             </div>
           </div>
@@ -149,7 +130,7 @@
     </confirm-dialog>
     <multi-asset-transfer-dialog
       ref="transferDialog"
-      title="Broadcast content"
+      title="上播内容"
       :choosen="onSaveAssets"
       @view="onViewAsset"
     />
@@ -205,32 +186,28 @@ export default {
         ],
         cols: [
           { type: 'selection' },
-          {
-            label: 'Name', render: (data, h) => h('edit-input', {
-              props: {
-                value: data.name
-              },
-              on: { edit: val => this.onEditName(data, val) }
-            }), 'class-name': 'c-edit-column', 'min-width': 240
-          },
-          { prop: 'dateRange', label: 'Date of publication', 'min-width': 200, align: 'center' },
-          { prop: 'timeRange', label: 'Broadcast Time', 'min-width': 160, align: 'center' },
-          { prop: 'durationInfo', label: 'Single Duration', 'min-width': 120, align: 'center' },
-          { prop: 'count', label: 'Times of Broadcast', 'min-width': 120, align: 'right' },
-          {
-            type: 'invoke', render: [
-              { label: 'Details', on: this.onEdit },
-              { label: 'Delete', on: this.onDel }
-            ]
-          }
+          { label: '名称', render: (data, h) => h('edit-input', {
+            props: {
+              value: data.name
+            },
+            on: { edit: val => this.onEditName(data, val) }
+          }), 'class-name': 'c-edit-column', 'min-width': 240 },
+          { prop: 'dateRange', label: '上刊日期', 'min-width': 200, align: 'center' },
+          { prop: 'timeRange', label: '上播时间', 'min-width': 160, align: 'center' },
+          { prop: 'durationInfo', label: '单次时长', 'min-width': 120, align: 'center' },
+          { prop: 'count', label: '上播次数', 'min-width': 120, align: 'right' },
+          { type: 'invoke', render: [
+            { label: '详情', on: this.onEdit },
+            { label: '删除', on: this.onDel }
+          ] }
         ]
       },
       contract: null,
       timeTypeSelectSchema: {
         options: [
-          { value: TimeType.SCREEN, label: 'Startup period' },
-          { value: TimeType.RANGE, label: 'Time Period' },
-          { value: TimeType.POINT, label: 'Point in time' }
+          { value: TimeType.SCREEN, label: '开机期间' },
+          { value: TimeType.RANGE, label: '时段' },
+          { value: TimeType.POINT, label: '时间点' }
         ]
       },
       files: [],
@@ -242,20 +219,18 @@ export default {
         },
         list: this.getAssetsByDataset,
         buttons: [
-          { type: 'del', label: 'Remove', on: this.onDelAssets }
+          { type: 'del', label: '移除', on: this.onDelAssets }
         ],
         cols: [
           { type: 'selection' },
-          { prop: 'tagInfo', label: 'Category', width: 72, align: 'center' },
-          { prop: 'typeInfo', label: 'Resources', width: 72, align: 'center' },
+          { prop: 'tagInfo', label: '分类', width: 72, align: 'center' },
+          { prop: 'typeInfo', label: '资源', width: 72, align: 'center' },
           { prop: 'file', label: '', type: 'asset', on: this.onViewAsset },
           { prop: 'name', label: '' },
-          { prop: 'durationInfo', label: 'Broadcast duration', width: 80, align: 'center' },
-          {
-            type: 'invoke', render: [
-              { label: 'Remove', on: this.onDelAsset }
-            ]
-          }
+          { prop: 'durationInfo', label: '上播时长', width: 80, align: 'center' },
+          { type: 'invoke', render: [
+            { label: '移除', on: this.onDelAsset }
+          ] }
         ]
       },
       assets: []
@@ -275,27 +250,27 @@ export default {
     },
     onAdd () {
       this.$prompt(
-        '<p class="u-color--black u-font-size--sm u-bold">Contract Name</p>',
-        'Add Contract',
+        '<p class="u-color--black u-font-size--sm u-bold">合同名称</p>',
+        '新增合同',
         {
           dangerouslyUseHTMLString: true,
           closeOnClickModal: false,
           inputValue: '',
-          inputPlaceholder: 'Maximum 30 characters',
+          inputPlaceholder: '最多30个字符',
           inputPattern: /^.{0,30}$/,
           inputValidator: val => {
             console.log(val)
             if (val) {
               if (/^\s+|\s+$/.test(val)) {
-                return 'Please do not enter spaces at the beginning and end'
+                return '请勿输入首尾空格'
               }
               return true
             }
-            return 'Please fill in the name'
+            return '请填写名称'
           },
-          inputErrorMessage: 'Maximum 30 characters',
-          confirmButtonText: 'Add',
-          cancelButtonText: 'Cancel',
+          inputErrorMessage: '最多30个字符',
+          confirmButtonText: '新增',
+          cancelButtonText: '取消',
           beforeClose: (action, instance, done) => {
             if (action === 'confirm') {
               this.onSave(instance.inputValue, done)
@@ -323,7 +298,7 @@ export default {
     },
     transform (contract) {
       contract.durationInfo = parseDuration(contract.duration)
-      contract.dateRange = `${contract.startDate} - ${offsetDate(contract.startDate, contract.day)}`
+      contract.dateRange = `${contract.startDate}  ${offsetDate(contract.startDate, contract.day)}`
       contract.timeRange = getTaskTimeInfo(contract)
       return contract
     },
@@ -334,7 +309,7 @@ export default {
       if (!newVal) {
         this.$message({
           type: 'warning',
-          message: 'Please fill in the contract name'
+          message: '请填写合同名称'
         })
         return
       }
@@ -368,14 +343,14 @@ export default {
       if (!startTime) {
         this.$message({
           type: 'warning',
-          message: 'Please select the time of broadcasting'
+          message: '请选择上播时间'
         })
         return
       }
       if (endTime && endTime !== SCREEN_TIME_KEY && startTime >= endTime) {
         this.$message({
           type: 'warning',
-          message: 'The start time must be less than the end time'
+          message: '开始时间必须小于结束时间'
         })
         return
       }
@@ -477,7 +452,7 @@ export default {
       } else {
         this.$message({
           type: 'warning',
-          message: 'Please select the contract you want to delete first'
+          message: '请先选择需要删除的合同'
         })
       }
     },
@@ -489,18 +464,16 @@ export default {
     },
     getAssetsByDataset () {
       this.$selectionAssetItems = null
-      return Promise.resolve({
-        data: this.assets.map(({ key, tag, type, file, name, duration }) => {
-          return {
-            key,
-            tagInfo: AssetTagInfo[tag],
-            typeInfo: AssetTypeInfo[type],
-            file,
-            name,
-            durationInfo: parseDuration(duration)
-          }
-        })
-      })
+      return Promise.resolve({ data: this.assets.map(({ key, tag, type, file, name, duration }) => {
+        return {
+          key,
+          tagInfo: AssetTagInfo[tag],
+          typeInfo: AssetTypeInfo[type],
+          file,
+          name,
+          durationInfo: parseDuration(duration)
+        }
+      }) })
     },
     onAssetChanged () {
       this.$refs.assetContentTable.pageTo()
@@ -518,8 +491,8 @@ export default {
     onDelAssets () {
       if (this.$selectionAssetItems?.length) {
         this.$confirm(
-          'Remove the selected resource?',
-          'Confirm operation',
+          '移除所选资源?',
+          '操作确认',
           { type: 'warning' }
         ).then(() => {
           this.$selectionAssetItems.forEach(({ key }) => {
@@ -531,7 +504,7 @@ export default {
       } else {
         this.$message({
           type: 'warning',
-          message: 'Please select the resources to be removed'
+          message: '请选择需移除的资源'
         })
       }
     }
@@ -587,7 +560,7 @@ export default {
   &__file {
     width: 350px;
 
-    &+& {
+    & + & {
       border-top: 1px solid $border;
     }
   }

+ 72 - 80
src/views/ad/automation/dataset/index.vue

@@ -11,7 +11,7 @@
     />
     <c-dialog
       ref="assetDialog"
-      title="Broadcast content"
+      title="上播内容"
       size="xl fixed"
       @closed="onClosed"
     >
@@ -29,13 +29,15 @@
             @change="onAssetDirectoryChanged"
           />
         </template>
-        <div class="l-flex__none l-flex--row right c-sibling-item--v">
+        <div
+          class="l-flex__none l-flex--row right c-sibling-item--v"
+        >
           <div class="l-flex__fill c-sibling-item">
             <div
               class="o-button"
               @click="onDelAssets"
             >
-              Remove
+              移除
             </div>
           </div>
           <div class="l-flex__none l-flex--row right c-sibling-item--v near u-font-size--sm u-color-black u-bold">
@@ -79,15 +81,15 @@
     </c-dialog>
     <table-dialog
       ref="deviceDialog"
-      title="Associated Devices"
+      title="关联的设备"
       :schema="deviceSchema"
       @row-click="onRowClick"
       @selection-change="onSelectionChange"
     />
     <radio-table-dialog
       ref="devicesDialog"
-      title="Bind device"
-      message="Please select device"
+      title="绑定设备"
+      message="请选择设备"
       :schema="devicesSchema"
       append-to-body
       @confirm="onChoosenDevice"
@@ -139,31 +141,25 @@ export default {
           { type: 'add', on: this.onAdd }
         ],
         filters: [
-          {
-            key: 'name', type: 'search', placeholder: 'Name'
-          },
+          { key: 'name', type: 'search', placeholder: '名称' },
           { type: 'refresh' }
         ],
         cols: [
           { type: 'refresh' },
-          {
-            prop: 'name', label: 'Name', render: (data, h) => h('edit-input', {
-              props: {
-                value: `${data.name}`
-              },
-              on: { edit: val => this.onEditName(data, val) }
-            }), 'class-name': 'c-edit-column'
-          },
-          { prop: 'createTime', label: 'Create time', width: 200 },
-          { prop: 'updateTime', label: 'Update Time', width: 200 },
-          {
-            type: 'invoke', render: [
-              { label: 'Broadcast content', on: this.onEdit },
-              { label: 'Associated Devices', on: this.onViewDevices },
-              { label: 'Copy', on: this.onCopy },
-              { label: 'Delete', on: this.onDel }
-            ], width: 240
-          }
+          { prop: 'name', label: '名称', render: (data, h) => h('edit-input', {
+            props: {
+              value: `${data.name}`
+            },
+            on: { edit: val => this.onEditName(data, val) }
+          }), 'class-name': 'c-edit-column' },
+          { prop: 'createTime', label: '创建时间', width: 200 },
+          { prop: 'updateTime', label: '更新时间', width: 200 },
+          { type: 'invoke', render: [
+            { label: '上播内容', on: this.onEdit },
+            { label: '关联设备', on: this.onViewDevices },
+            { label: '复制', on: this.onCopy },
+            { label: '删除', on: this.onDel }
+          ], width: 240 }
         ]
       },
       assetSchema: {
@@ -176,52 +172,48 @@ export default {
         transform: transformDatasetAssetToAsset,
         cols: [
           { type: 'selection' },
-          { prop: 'tagInfo', label: 'Category', width: 72, align: 'center' },
-          { prop: 'typeInfo', label: 'Resources', width: 72, align: 'center' },
+          { prop: 'tagInfo', label: '分类', width: 72, align: 'center' },
+          { prop: 'typeInfo', label: '资源', width: 72, align: 'center' },
           { prop: 'file', label: '', type: 'asset', on: this.onViewAsset },
           { prop: 'name', label: '' },
-          {
-            label: 'Broadcast Duration(s)', render: (data, h) => data.minioData && data.type === AssetType.IMAGE
-              ? h('edit-input', {
-                staticClass: 'border',
-                props: {
-                  value: `${data.adDuration}`,
-                  align: 'center',
-                  size: 'sm'
-                },
-                on: {
-                  edit: val => this.onEditAssetDuration(data, val)
-                }
-              })
-              : parseDuration(data.adDuration), width: 100, align: 'center'
-          }
+          { label: '上播时长(s)', render: (data, h) => data.minioData && data.type === AssetType.IMAGE
+            ? h('edit-input', {
+              staticClass: 'border',
+              props: {
+                value: `${data.adDuration}`,
+                align: 'center',
+                size: 'sm'
+              },
+              on: {
+                edit: val => this.onEditAssetDuration(data, val)
+              }
+            })
+            : parseDuration(data.adDuration), width: 100, align: 'center' }
         ]
       },
       deviceSchema: {
         list: getDevicesByDataset,
         buttons: [
-          { type: 'add', label: 'Bind device', on: this.onBindDevice },
-          { icon: 'el-icon-scissors', label: 'Unbind', on: this.onUnbindDevices }
+          { type: 'add', label: '绑定设备', on: this.onBindDevice },
+          { icon: 'el-icon-scissors', label: '解绑', on: this.onUnbindDevices }
         ],
         cols: [
           { type: 'selection' },
-          { prop: 'name', label: 'Device Name' },
-          { prop: 'address', label: 'Address' },
-          {
-            type: 'invoke', render: [
-              { label: 'Unbind', on: this.onUnbind }
-            ]
-          }
+          { prop: 'name', label: '设备名称' },
+          { prop: 'address', label: '地址' },
+          { type: 'invoke', render: [
+            { label: '解绑', on: this.onUnbind }
+          ] }
         ]
       },
       devicesSchema: {
         list: getDevices,
         filters: [
-          { key: 'name', type: 'search', placeholder: 'Device Name' }
+          { key: 'name', type: 'search', placeholder: '设备名称' }
         ],
         cols: [
-          { prop: 'name', label: 'Device Name' },
-          { prop: 'address', label: 'Address' }
+          { prop: 'name', label: '设备名称' },
+          { prop: 'address', label: '地址' }
         ]
       }
     }
@@ -229,15 +221,15 @@ export default {
   computed: {
     statistics () {
       const length = this.assets.length
-      return `total ${length},total duration ${parseDuration(this.assets.reduce((total, asset) => total + asset.adDuration, 0), false)}`
+      return `共${length}条,总时长 ${parseDuration(this.assets.reduce((total, asset) => total + asset.adDuration, 0), false)}`
     },
     resourceSize () {
       const totalSizeMB = this.assets.reduce((total, item) => total + parseInt(item.minioData.size), 0) / (1024 * 1024)
       if (totalSizeMB >= 1024) {
         const totalSizeGB = totalSizeMB / 1024
-        return `Resource Pack Size: ${totalSizeGB.toFixed(2)} GB`
+        return `资源包大小: ${totalSizeGB.toFixed(2)} GB`
       }
-      return `Resource Pack Size: ${totalSizeMB.toFixed(2)} MB`
+      return `资源包大小: ${totalSizeMB.toFixed(2)} MB`
     }
   },
   methods: {
@@ -256,21 +248,21 @@ export default {
     },
     onAdd () {
       this.$prompt(
-        '<p class="u-color--black u-font-size--sm u-bold">Pack Name</p>',
-        'Add Pack',
+        '<p class="u-color--black u-font-size--sm u-bold">素材包名称</p>',
+        '新增填充素材包',
         {
           dangerouslyUseHTMLString: true,
           closeOnClickModal: false,
           inputValue: '',
-          inputPlaceholder: 'Maximum 30 characters',
+          inputPlaceholder: '最多30个字符',
           inputPattern: /^.{0,30}$/,
           inputValidator: val => {
             const name = val ? val.replace(/^\s+|\s+$/g, '') : val
-            return name ? true : 'Please fill in the name'
+            return name ? true : '请填写名称'
           },
-          inputErrorMessage: 'Maximum 30 characters',
-          confirmButtonText: 'Add',
-          cancelButtonText: 'Cancel',
+          inputErrorMessage: '最多30个字符',
+          confirmButtonText: '新增',
+          cancelButtonText: '取消',
           beforeClose: (action, instance, done) => {
             if (action === 'confirm') {
               this.onSave(instance.inputValue.replace(/^\s+|\s+$/g, ''), done)
@@ -298,7 +290,7 @@ export default {
       if (!newVal) {
         this.$message({
           type: 'warning',
-          message: 'Please fill in the package name'
+          message: '请填写素材包名称'
         })
         return
       }
@@ -385,15 +377,15 @@ export default {
     onDelAssets () {
       if (this.$selectionItems?.length) {
         this.$confirm(
-          'Remove the selected resource?',
-          'Confirm operation',
+          '移除所选资源?',
+          '操作确认',
           { type: 'warning' }
         ).then(() => unbindAssetsFromDataset(this.$datasetId, this.$selectionItems.map(({ keyName }) => keyName)))
           .then(this.onAssetChanged)
       } else {
         this.$message({
           type: 'warning',
-          message: 'Please select the resources to be removed'
+          message: '请选择需移除的资源'
         })
       }
     },
@@ -424,7 +416,7 @@ export default {
       } else {
         this.$message({
           type: 'warning',
-          message: 'Please select the device to be unbundled first'
+          message: '请先选择需要解绑的设备'
         })
       }
     },
@@ -448,25 +440,25 @@ export default {
     },
     onCopy ({ id, name }) {
       this.$prompt(
-        '<p class="u-color--black u-font-size--sm u-bold">Pack Name</p>',
-        'Copy Pack',
+        '<p class="u-color--black u-font-size--sm u-bold">素材包名称</p>',
+        '复制素材包',
         {
           dangerouslyUseHTMLString: true,
           closeOnClickModal: false,
-          inputValue: name.length <= 28 ? `${name}Copy` : name,
-          inputPlaceholder: 'Maximum 30 characters',
+          inputValue: name.length <= 28 ? `${name}副本` : name,
+          inputPlaceholder: '最多30个字符',
           inputPattern: /^.{0,30}$/,
           inputValidator: val => {
             const inputName = val ? val.replace(/^\s+|\s+$/g, '') : val
             return inputName
               ? inputName === name
-                ? 'The name cannot be the same as the source pack'
+                ? '名称不能与源素材包一样'
                 : true
-              : 'Please fill in the name'
+              : '请填写名称'
           },
-          inputErrorMessage: 'Maximum 30 characters',
-          confirmButtonText: 'Copy',
-          cancelButtonText: 'Cancel',
+          inputErrorMessage: '最多30个字符',
+          confirmButtonText: '复制',
+          cancelButtonText: '取消',
           beforeClose: (action, instance, done) => {
             if (action === 'confirm') {
               this.onConfirmCopy(id, instance.inputValue.replace(/^\s+|\s+$/g, ''), done)